我正在使用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><myxml>stuff</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一起工作得很好。