具有两个元素的 SOAP 主体

Posted

技术标签:

【中文标题】具有两个元素的 SOAP 主体【英文标题】:SOAP Body with Two Elements 【发布时间】:2013-05-22 11:07:30 【问题描述】:

我正在尝试创建具有以下结构的肥皂消息:

<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】:

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

【讨论】:

以上是关于具有两个元素的 SOAP 主体的主要内容,如果未能解决你的问题,请参考以下文章

sqlmap通过soap主体中的参数注入?

如何使用 wcf 的 .net Web 服务创建安全的 SOAP 主体?

流作为 SOAP 响应传递

如何使用jQuery在某些特定div中选择具有相同名称的所有元素[重复]

Mulesoft RAML - 在嵌套 XSD 文件上具有请求主体架构和响应主体架构的 Api 规范

具有 OAuth2-ResourceServer 的 Spring 微服务仅返回 String 作为主体而不是我的自定义用户