【发布时间】:2016-07-03 22:47:04
【问题描述】:
我目前正在使用 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 总是返回 null,尽管 docGenBefaXML 指向消息的 XMLNSC 部分。我尝试在树结构的各个元素上调用 getDomNode 方法,它总是返回 null。
聚合消息的结构描述为here。
有人知道如何解决这个问题吗?
【问题讨论】:
-
不确定。一个理论(这只是一个理论)是 getDOMNode() 函数不适用于聚合消息。可能值得检查 getDOMNode() 的文档。如果没有任何反应,请打开 PMR 并询问 IBM。
-
您是否尝试过导航到 DOM 中的回复根元素?这可能行得通。
标签: java dom jaxb messagebroker