Я использую IBM Integration Bus v9, и я пытаюсь получить DOM Node (org.w3c.dom.Node) из агрегированного сообщения, чтобы отменить его в Java-объект ,IIB - Получить узел DOM из агрегированного сообщения
В первой версии моего потока, я звонил только один веб-службы синхронно и с Java Compute Node, я получаю DOM документа непосредственно из MbMessage и демаршаллизации следующим образом (source):
MbMessage inMessage = inAssembly.getMessage();
JAXBElement<BefpDocData> inMsgJavaObj = jaxbContext.createUnmarshaller().unmarshal(inMessage.getDOMDocument(), BefpDocData.class);
BefpDocData data = inMsgJavaObj.getValue();
Вторая версия моего потока теперь асинхронно вызывает два веб-сервиса и объединяет их с узлом AggregateReply. В этом случае, я стараюсь так:
MbMessage inMessage = inAssembly.getMessage();
MbElement comIbmAggregateReplyBody = inMessage.getRootElement().getFirstElementByPath("/ComIbmAggregateReplyBody");
MbElement docGenBefa = comIbmAggregateReplyBody.getFirstElementByPath("/ComIbmAggregateReplyBody/DocGenBefa");
MbElement docGenBefaXML = docGenBefa.getLastChild();
Node docGenBefaNode = docGenBefaXML.getDOMNode();
JAXBElement<BefpDocData> inMsgJavaObj = jaxbContext.createUnmarshaller().unmarshal(docGenBefaNode, BefpDocData.class);
BefpDocData data = inMsgJavaObj.getValue();
Моя проблема IST, что getDomNode всегда возвращает нуль, несмотря на то, что docGenBefaXML точки на XMLNSC части сообщения. Я попытался вызвать метод getDomNode для разных элементов древовидной структуры, и он всегда возвращает null.
Структура агрегированного сообщения описана here.
Кто-нибудь знает, как это решить?
Не уверен. Одна теория (и это всего лишь теория) заключается в том, что функция getDOMNode() не работает с агрегированными сообщениями. Возможно, стоит проверить документы для getDOMNode(). Если ничего не появится, откройте PMR и спросите IBM. – kimbert
Вы пробовали переходить к корневым элементам ответа в DOM? Это может сработать. –