2012-04-13 66 views
3

我正在使用Java和Spring-ws构建Web服务。它工作正常,除了一件事。在WS SOAP体中不能转义字符

当我将有效载荷组装到SOAP Body中时,我想包含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> 

然而,春天-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类的解决方案。

+0

你使用了什么'org.springframework.ws.soap.SoapMessageFactory'实现(axiom?saaj?)?你使用了什么'org.springframework.ws.server.endpoint.adapter.method.MethodReturnValueHandler'(marshalling,jaxb,castor,'AbstractPayloadSourceMethodProcessor')? – 2012-04-13 08:23:21

+1

为什么?对于XML解析器和Web服务堆栈,这两者是等效的。 – 2012-04-13 08:38:04

+0

@GrzegorzGrzybek该消息属于SAAJ类型。我不确定哪个MethodReturnValueHandler正在使用,但我认为这将是JAXB。 – 2012-04-13 09:37:53

回答

2

我已经使用MOXy和@XmlCDATA注释来生成CDATA内容,并且实验显示AxiomSoapMessageFactory使用转义XML内容重新生成它(尽管Jaxb2Marshaller似乎生成正确的CDATA内容)。

但是,它适用于SaajSoapMessageFactory。