我正在使用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一起正常工作。