Java 未转义Spring WS-SOAP正文中的字符

Java 未转义Spring WS-SOAP正文中的字符,java,xml,soap,apache-camel,spring-ws,Java,Xml,Soap,Apache Camel,Spring Ws,我正在使用Java和SpringWS构建一个Web服务。除了一件事,它工作得很好 当我组装要放入SOAP主体中的有效负载时,我希望包括CDATA转义字符串。这就是我希望结果的样子: <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:_0="http://example.com/ns"> <soapenv:Header/> <soapenv:Body>

我正在使用Java和SpringWS构建一个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>

内容]]>
然而,SpringWS在添加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>

myxml>stuff/myxml>
有没有办法确保SpringWS不会转义XML字符并尊重CDATA标记


我将springws与apachecamel一起使用,因此我更倾向于使用一种不必修改/扩展springws类的解决方案

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


但是,它在SaajSoapMessageFactory中工作得很好。

您使用的
org.springframework.ws.soap.SoapMessageFactory的实现是什么(axiom?saaj?)?您使用什么
org.springframework.ws.server.endpoint.adapter.method.MethodReturnValueHandler
(编组、jaxb、castor、
AbstractPayloadSourceMethodProcessor
)?为什么?对于xml解析器和web服务堆栈,这两者是等效的。@GrzegorzGrzybek消息的类型是SAAJ。我不确定正在使用哪个MethodReturnValueHandler,但我认为这将是JAXB。@JörnHorstmann感谢您提到这一点。但是,使用CData节而不是转义字符,内容更易于人阅读。在这种情况下,人类可读的因素相当大。所有业务数据都将位于该标记内。它将绑定为XML格式的XML。请参阅和提问。如果您使用的是JAXB ri,则必须对
ContextHandler
使用一些技巧。使用MOXy,您可以使用
@xmlcata
扩展名。