2013-05-27 55 views
4

我試圖創建具有以下結構的SOAP消息:SOAP體有兩個元素

<SOAP:Envelope> 
    <SOAP:Header/> 
    <SOAP:Body> 
     <Item1/> 
     <Item2/> 
    </SOAP:Body> 
</SOAP:Envelope> 

我使用的是WebServiceMessageCallback得到上面的格式,但是當我嘗試用新的變換身體源,其中源具有上述格式:

TransformerFactory transformerFactory = TransformerFactory.newInstance(); 
Transformer transformer = transformerFactory.newTransformer(); 
transformer.transform(source, soapBody.getPayloadResult()); 

我得到以下錯誤:

[Fatal Error] :1:157: The markup in the document following the root element must be well-formed. 
ERROR: 'The markup in the document following the root element must be well-formed.' 
    Exception in thread "main" org.springframework.ws.client.WebServiceTransformerException:Transformation error: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 157; The markup in the document following the root element must be well-formed.; nested exception is javax.xml.transform.TransformerException: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 157; The markup in the document following the root element must be well-formed. 

我的理解是,這個錯誤告訴我,主體不是格式良好的XML,因爲它沒有單個根元素。然而,這正是我所需要的服務,我正在發送信息以期望上述結構。

有沒有辦法解決這個問題?謝謝你的幫助。

編輯: 我要指出,我所看到的Spring Update SOAP Header with Two Elements,這正是我試圖做的,但在頭而不是。我已經嘗試過使用虛擬根的方法,但是我不確定如何在轉換後刪除虛擬根,就像他提到的一樣。我沒有足夠的代表評論他的答案找出...

回答

-1

元素<SOAP:Body>包含消息要交換。因此在<SOAP:Body>中放入兩個元素是不可能的。你必須在你的兩個項目中包裝一個根XML元素。