2016-03-17 22 views
2

我目前正在使用IBM Integration Bus v9,並試圖從聚合消息中獲取DOM節點(org.w3c.dom.Node)以將其解組爲Java對象。IIB - 從彙總消息中獲取DOM節點

在我的流程的第一個版本,我是同步調用只有一個Web服務,而且從Java Compute節點,我是直接從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(); 

我的問題IST的getDomNode總是儘管返回null,關於該消息的XMLNSC部分docGenBefaXML點。我試圖在樹結構的各種元素上調用getDomNode方法,它總是返回null。

聚合消息的結構被描述爲here

有沒有人有任何想法如何解決這個問題?

+0

不知道。一個理論(它只是一個理論)是,getDOMNode()函數不適用於聚合消息。可能值得檢查getDOMNode()的文檔。如果什麼都沒有出現,請打開PMR並詢問IBM。 – kimbert

+0

您是否嘗試導航到DOM中的回覆根元素?這可能會起作用。 –

回答

1

感謝這兩個意見,但我不得不在結構中更深入一步(下至郵件正文內容),並且它工作。但令人驚訝的是,當我嘗試在調試器中顯示節點對象時,它也顯示爲空。

在這種情況下,如果有人做同樣的,這裏是我的代碼:

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