3

我正在使用 Java 和 Spring-ws 构建 Web 服务。它工作正常,除了一件事。

当我组装要放入 SOAP 主体中的有效负载时,我想包含 CDATA 转义字符串。这就是我希望结果的样子:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:_0="http://example.com/ns">
<soapenv:Header/>
<soapenv:Body>
 <_0:Message>
    <_0:StringPayload><![CDATA[<myxml>stuff</myxml>]]></_0:StringPayload>
 </_0:Message>
</soapenv:Body>
</soapenv:Envelope>

但是,Spring-WS 在添加 SOAP 信封时似乎会篡改有效负载。这是我得到的结果:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:_0="http://example.com/ns">
<soapenv:Header/>
<soapenv:Body>
 <_0:Message>
    <_0:StringPayload>&lt;myxml>stuff&lt;/myxml></StringPayload>
 </_0:Message>
</soapenv:Body>
</soapenv:Envelope>

有没有办法确保 Spring WS 不会转义 XML 字符并尊重 CDATA 标记?

我将 Spring WS 与 Apache Camel 一起使用,因此我更喜欢不需要更改/扩展 spring-ws 类的解决方案。

4

1 回答 1

3

我使用 MOXy 和 @XmlCDATA 注释来生成 CDATA 内容,实验表明 AxiomSoapMessageFactory 用转义的 XML 内容重新生成它(尽管 Jaxb2Marshaller 似乎产生了正确的 CDATA 内容)。

但是,它与 SaajSoapMessageFactory 配合得很好。

于 2012-05-09T12:43:44.330 回答