IIB - 从聚合消息中获取 DOM 个节点

IIB - Get DOM Node from aggregated Message

我目前正在使用 IBM Integration Bus v9,我正在尝试从聚合消息中获取 DOM 节点 (org.w3c.dom.Node) 以将其解组为 Java 对象。

在我的流程的第一个版本中,我只同步调用一个 Web 服务,并且从 Java 计算节点,我直接从 MbMessage 获取 DOM 文档并解组以下方式 (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 总是 returns null,尽管 docGenBefaXML 指向消息的 XMLNSC 部分。我尝试在树结构的各种元素上调用 getDomNode 方法,它总是 returns null。

描述了聚合消息的结构 here

有人知道如何解决这个问题吗?

感谢这两条评论,但我不得不在结构上更深入一步(深入到 消息正文内容 )并且它起作用了。但令人惊讶的是,当我试图在调试器中显示节点对象时,它也显示为空。

在这种情况下,如果有人必须这样做,这是我的代码:

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();