2012-04-13 5 views
3

Ich baue einen Web-Service mit Java und Spring-ws. Es funktioniert gut, bis auf eine Sache.Nicht entkommen Zeichen im Frühjahr WS SOAP Körper

Wenn ich die Payload assemblieren, die in den SOAP-Body eingefügt werden soll, möchte ich CDATA-Escape-Strings einfügen. Dies ist, wie ich das Ergebnis aussehen soll wie:

<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> 

jedoch Frühlings-WS scheint mit der Nutzlast zu manipulieren, wenn es den SOAP-Umschlag erstellt. Dies ist das Ergebnis, das ich bekommen:

<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> 

Gibt es eine Möglichkeit, um sicherzustellen, Frühling WS keine XML-Escape-Zeichen und die CDATA-Tag respektieren?

Ich benutze Spring WS zusammen mit Apache Camel, daher wäre eine Lösung, bei der ich die Spring-ws Klassen nicht ändern/erweitern muss, vorzuziehen.

+0

Welche Implementierung von 'org.springframework.ws.soap.SoapMessageFactory' verwenden Sie (axiom? Saaj?)? Was 'org.springframework.ws.server.endpoint.adapter.method.MethodReturnValueHandler' benutzt du (marshalling, jaxb, castor,' AbstractPayloadSourceMethodProcessor')? –

+1

Warum? Für einen XML-Parser und Web-Service-Stack sind diese beiden gleichwertig. –

+0

@GrzegorzGrzybek Die Nachricht ist vom Typ SAAJ. Ich bin mir nicht sicher, welcher MethodReturnValueHandler verwendet wird, aber ich denke, das wird JAXB sein. –

Antwort

2

Ich habe MOXy und @XmlCDATA Annotation verwendet, um CDATA-Inhalt zu generieren, und Experimente haben gezeigt, dass AxiomSoapMessageFactory es mit maskiertem XML-Inhalt reaplces (obwohl Jaxb2Marshaller scheint, CDATA-Zeug zu produzieren).

Allerdings funktioniert es gut mit SaajSoapMessageFactory.

Verwandte Themen