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

Java IIB-从聚合消息获取DOM节点,java,dom,jaxb,messagebroker,Java,Dom,Jaxb,Messagebroker,我目前正在使用IBMIntegrationBusV9,我正在尝试从聚合消息中获取DOM节点(org.w3c.DOM.Node),以将其解组为Java对象 在我的流程的第一个版本中,我只同步调用一个Web服务,从Java计算节点直接从MbMessage获取DOM文档,并按以下方式()解组: MbMessage inMessage=inAssembly.getMessage(); JAXBElement inMsgJavaObj=jaxbContext.createUnmarshaller().un

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

在我的流程的第一个版本中,我只同步调用一个Web服务,从Java计算节点直接从MbMessage获取DOM文档,并按以下方式()解组:

MbMessage inMessage=inAssembly.getMessage();
JAXBElement inMsgJavaObj=jaxbContext.createUnmarshaller().unmarshal(inMessage.getDOMDocument(),befpodocata.class);
befpdocata 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();
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 inMsgJavaObj=jaxbContext.createUnmarshaller().unmarshal(docgenbefanor,befpodata.class);
befpdocata data=inMsgJavaObj.getValue();
我的问题是getDomNode总是返回null,尽管docGenBefaXML指向消息的XMLNSC部分。我尝试在树结构的各个元素上调用getDomNode方法,它总是返回null

描述了聚合消息的结构


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

谢谢你的两条评论,但我不得不在结构上更深入一步(深入到消息正文内容),它成功了。但令人惊讶的是,当我试图在调试器中显示节点对象时,它也显示为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();
MbMessage inMessage=inAssembly.getMessage();
MbElement comIbmAggregateReplyBody=inMessage.getRootElement().getFirstElementByPath(“/comIbmAggregateReplyBody”);
MbElement docGenBefa=comIbmAggregateReplyBody.getFirstElementByPath(“/comIbmAggregateReplyBody/docGenBefa”);
MbElement docGenBefaXML=docGenBefa.getLastChild();
MbElement docGenBefbDocData=docGenBefaXML.getLastChild();
节点docgenbefanore=docGenBefbDocData.getDOMNode();
JAXBElement inMsgJavaObj=jaxbContext.createUnmarshaller().unmarshal(docgenbefanor,befpodata.class);
befpdocata data=inMsgJavaObj.getValue();

不确定。一种理论(这只是一种理论)是getDOMNode()函数不能处理聚合消息。可能值得检查getDOMNode()的文档。如果什么都没有出现,打开PMR并询问IBM。您是否尝试导航到DOM中的reply根元素?那可能行得通。
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();