SOAP元素有两个元素

时间:2013-05-27 14:56:39

标签: java xml spring soap spring-ws

我正在尝试使用以下结构创建soap消息:

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

我正在使用WebServiceMessageCallback来获取上述格式,但是当我尝试使用新源转换主体时,source具有以上格式:

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 个答案:

答案 0 :(得分:-1)

元素<SOAP:Body>包含您要交换的 消息。因此,在<SOAP:Body>中放入两个元素是不可能的。你必须在你的两个项目周围包装一个根XML元素。