2017-10-25 15 views
0

Apache CXF 3.1を使用してサードパーティWebサービスにアクセスしようとしています。 wsdl2javaで生成されたコードまたはcurlを使用してサービスを呼び出すと、サービスは有効なSOAPメッセージではないことを示す例外を返します。以下のメッセージを参照してください。Apache CXFを使用してEnvelopeからSoap名前空間を削除する方法

<?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soap:Body> 
    <connectivityTest xmlns="urn:cdc:iisb:2011" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="connectivityTest"> 
     <echoBack>Hello IIS!</echoBack> 
    </connectivityTest> 
    </soap:Body> 
</soap:Envelope> 

私は名前空間(soap :)を削除し、curlを使用してサービスを呼び出すと、サービスが機能します。以下の作業メッセージを参照してください。

<?xml version="1.0" encoding="utf-8"?> 
<Envelope xmlns="http://www.w3.org/2003/05/soap-envelope"> 
    <Body> 
    <connectivityTest xmlns="urn:cdc:iisb:2011" xmlns:ns2="http://www.w3.org/2003/05/soap-envelope"> 
     <echoBack>Hello IIS V2!</echoBack> 
    </connectivityTest> 
</Body> 

それが送られた前に、どのように私は、SOAPメッセージのエンベロープおよびボディ要素から名前空間を削除しますか?ウェブの検索に基づいて、私は迎撃器を作る必要があるかもしれないようです。 EnvelopeとBody要素から名前空間を削除するインターセプタの例を提供できるものがあれば、それは大いに感謝しています。

ありがとうございます! JR

答えて

1

これにはインターセプタは必要ありません。 jaxwsプロパティに名前空間を設定できます。

<jaxws:properties> 
    <entry key="soap.env.ns.map"> 
     <map> 
      <entry key="" value="http://schemas.xmlsoap.org/soap/envelope/"/> 
     </map> 
    </entry> 
    <entry key="disable.outputstream.optimization" value="true"/> 
</jaxws:properties> 
関連する問題