0

JBoss4.2.3 で実行されている J2EE アプリケーション内から、サードパーティの Web サービスを呼び出す SOAPConnection を作成しています。SOAP ヘッダー内で、'mustUnderstand' を '1' に設定して、Addressing To タグと Action タグを設定する必要があります。この「mustUnderstand」属性はhttp://www.w3.org/2003/05/soap-envelope名前空間にあります。これを作成するには、次を呼び出します。

SOAPFactory#createName("mustUnderstand", "soap", "http://www.w3.org/2003/05/soap-envelope");

これは、saaj.jar と saaj-impl.jar を WEB-INF/lib フォルダーに含めると正しく表示されます。これらを取り出すと、名前空間は xmlns:soap='null' ではなく null になりxmlns:soap="http://www.w3.org/2003/05/soap-envelope"ます。悪いタグ全体は次のとおりです。

<wsa:To xmlns:wsa='http://schemas.xmlsoap.org/ws/2004/08/addressing' xmlns:soap='null' soap:mustUnderstand='1'>http://domain/web-service.url</wsa:To>.

しかし、これらの 2 つの jar ファイルをアプリと共にデプロイすると、フォルトの作成時に独自のホストされた Web サービスが失敗します (クラスキャストの例外が原因で:

javax.xml.soap.SOAPException: java.lang.ClassCastException: com.sun.xml.messaging.saaj.soap.ver1_1.SOAPMessageFactory1_1Impl)

私たちの J2EE アプリは、サードパーティの Web サービス自体を呼び出す JBossWS Web サービスです。jar ファイルとの明らかな競合があります。

http://www.w3.org/2003/05/soap-envelope生成された SOAP タグに名前空間を書き出す方法に関するアイデアはありますか?

4

1 に答える 1

0

最終的に、API を直接使用して SOAPHeaderElement#mustUnderstand(true) を呼び出しました。別の名前空間宣言が必要ないため、これでこの問題は解決したようです (エンベロープ自体の soap-env 名前空間宣言を使用します。

まだ別の問題があります (JBoss はチャンク化された HTTP リクエストを送信しようとしていますが、これはサードパーティの Web サービスが好まないものですが、まだ十分に調べていません)

于 2012-06-05T17:49:08.073 に答える