2012-04-13 7 views
3

JavaとSpring-wsを使用してWebサービスを構築しています。一つのことを除いて、うまくいきます。Spring WS本体の文字をエスケープしない

ペイロードを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> 

しかし、春-WSは、SOAPエンベロープを追加したときにペイロードを改ざんしているようです。

Spring WSがXML文字をエスケープしてCDATAタグを尊重しないようにする方法はありますか?

私はApache Camelと一緒にSpring WSを使用していますので、Spring-wsクラスを変更/拡張する必要がないソリューションが優先されます。

+0

'org.springframework.ws.soap.SoapMessageFactory'のどの実装を使用していますか(公理?saaj?) 'org.springframework.ws.server.endpoint.adapter.method.MethodReturnValueHandler'とは何ですか(marshalling、jaxb、castor、' AbstractPayloadSourceMethodProcessor')? –

+1

なぜですか? XMLパーサーとWebサービススタックの場合、これらの2つは同等です。 –

+0

@GrzegorzGrzybekメッセージはSAAJタイプです。私はどのMethodReturnValueHandlerが使用されているかわからないが、JAXBと思う。 –

答えて

2

私はCDATAコンテンツを生成するためにMOXyと@XmlCDATAアノテーションを使用しました。実験ではAxiomSoapMessageFactoryがエスケープされたXMLコンテンツでそれを再現することが実験によって示されています(Jaxb2Marshallerは正しいCDATAを生成するようです)。

ただし、SaajSoapMessageFactoryでうまく動作します。

関連する問題