我正在使用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类的解决方案。

最佳答案

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

但是,它可以与SaajSoapMessageFactory一起正常工作。

10-07 13:17