2016-10-11 2 views
1

Ich verwende Apache CXF 3.0.2, um einen Dienst verfügbar zu machen, der ein Problem mit Namespaces während dem Unmarshalling verursacht. Wenn alle Namespace-Deklarationen auf der Soap-Envelope-Ebene durchgeführt werden, scheinen sie abgezogen zu werden oder verloren zu gehen, wenn ich die Nachricht entpacken will. Zum Beispiel würde zeigen die folgenden als ungültig xml:SOAP-Namespace-Problem bei Webdienst mit Apache CXF

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:v1="http://foo.com/v1" 
xmlns:v2="http://bar.com/v2" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <soapenv:Body > 
     <v1:foo> 
      <v2:bar> 
     </v1:foo> 
    </soapenv:Body> 
</soapenv:Envelope> 

Aber wenn ich die Erklärung unten die zum soapbody oder unter der xml validiert fein bewegen:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"  
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <soapenv:Body xmlns:v2="http://bar.com/v2" xmlns:v1="http://foo.com/v1"> 
     <v1:foo> 
      <v2:bar> 
     </v1:foo> 
    </soapenv:Body> 
</soapenv:Envelope> 

Ich habe versucht, einen Abfangjäger zu schreiben um die eingehende Anfrage zu bearbeiten und die Namensraum-Deklarationen, die mir wichtig sind, vom Header zum Body-Tag zu verschieben/kopieren, aber nicht in der Lage zu sein, die eingehende Nachricht auf diese Weise zu manipulieren. Hat jemand irgendwelche Vorschläge?

Antwort

0

Schauen Sie in Verlängerung AbstractSoapInterceptor, da Sie Apache CFX verwenden. Überschreiben handleMessage() gibt Ihnen Zugriff auf Ihre SOAPMessage und Sie können es manipulieren.

Apache CFX Interceptors

Verwandte Themen