Как установить значение атрибута xmlns в Java Compute Node? - PullRequest
0 голосов
/ 30 октября 2018

Я пытался распространить следующее xml-сообщение на узел вывода файлов в IBM Integration Bus.

<Resto xmlns = 'https://stackoverflow.com'><Location network_id="5dfweg68h"><Category>Continental</Category></Location></Resto>

Ниже был мой связанный Java-код для создания вышеуказанного xml-сообщения:

MbElement xmlBody = outMessage.getRootElement().createElementAsLastChild(MbXMLNSC.PARSER_NAME);
MbElement xmlParent = xmlBody.createElementAsLastChild(MbElement.TYPE_NAME, "Resto", null);
xmlParent.createElementAsLastChild(MbXMLNSC.ATTRIBUTE, "xmlns", "https://stackoverflow.com");

MbElement locationParser = xmlParent.createElementAsLastChild(MbElement.TYPE_NAME, "Location", null);
locationParser.createElementAsLastChild(MbXMLNSC.ATTRIBUTE, "network_id", "5dfweg68h");
locationParser.createElementAsLastChild(MbElement.TYPE_NAME_VALUE,"Category","Continental");

При отладке приложения я получил ошибки записи XML. Я немного подумал о необходимом решении и обнаружил, что добавление префикса пространства имен решит проблему. Разве это не может быть сделано без добавления префикса? Если нет, может ли кто-нибудь подсказать мне, как присвоить необходимое значение, предложив необходимые изменения в вычислительном узле Java?

Примечание: Строка, назначенная для xmlns, должна быть в одинарных кавычках в сообщении xml.

1 Ответ

0 голосов
/ 31 октября 2018

Используйте константу MbXMLNSC.NAMESPACE_DECLARATION для объявления пространства имен:

MbElement xmlBody = outMessage.getRootElement().createElementAsLastChild(MbXMLNSC.PARSER_NAME);
MbElement xmlParent = xmlBody.createElementAsLastChild(MbElement.TYPE_NAME, "Resto", null);
xmlParent.createElementAsFirstChild(MbXMLNSC.NAMESPACE_DECLARATION, "xmlns", "https://stackoverflow.com");

Если ваш XSD определяет, что элементы XML квалифицированы , вы должны явно указать пространство имен. Примеры:

xmlParent.setNamespace("https://stackoverflow.com");
locationParser.setNamespace("https://stackoverflow.com");
locationParser.createElementAsLastChild(MbElement.TYPE_NAME_VALUE,
     "Category", "Continental").setNamespace("https://stackoverflow.com");
...