我目前正在使用IBM Integration Bus v9,我正在尝试从聚合消息中获取DOM节点(org.w3c.dom.Node)以将其解组为Java对象。
在我的流程的第一个版本中,我只是同步调用一个Web服务,并且从Java Compute Node,我直接从MbMessage获取DOM Document并以下列方式解组(source) :
MbMessage inMessage = inAssembly.getMessage();
JAXBElement<BefpDocData> inMsgJavaObj = jaxbContext.createUnmarshaller().unmarshal(inMessage.getDOMDocument(), BefpDocData.class);
BefpDocData data = inMsgJavaObj.getValue();
我的流的第二个版本现在异步调用两个Web服务并使用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();
我的问题是getDomNode总是返回null,尽管docGenBefaXML指向消息的XMLNSC部分。我试图在树结构的各种元素上调用getDomNode方法,它总是返回null。
汇总消息的结构描述为here。
有谁知道如何解决这个问题?
答案 0 :(得分:2)
感谢您的评论,但我必须更深入地了解结构(直到消息正文内容)并且它有效。但令人惊讶的是,当我尝试在调试器中显示节点对象时,它也显示为null。
在这种情况下,如果有人必须这样做,这是我的代码:
MbMessage inMessage = inAssembly.getMessage();
MbElement comIbmAggregateReplyBody = inMessage.getRootElement().getFirstElementByPath("/ComIbmAggregateReplyBody");
MbElement docGenBefa = comIbmAggregateReplyBody.getFirstElementByPath("/ComIbmAggregateReplyBody/DocGenBefa");
MbElement docGenBefaXML = docGenBefa.getLastChild();
MbElement docGenBefbDocData = docGenBefaXML.getLastChild();
Node docGenBefaNode = docGenBefbDocData.getDOMNode();
JAXBElement<BefpDocData> inMsgJavaObj = jaxbContext.createUnmarshaller().unmarshal(docGenBefaNode, BefpDocData.class);
BefpDocData data = inMsgJavaObj.getValue();