.NET WebサービスのAxis2リクエストヘッダーをオーバーライドする方法
-
22-07-2019 - |
質問
.NET 2.0で実装されたサードパーティのWebサービスを使用する必要があります(もちろんIIS上で)。
Javaクライアントを作成する必要があります。 wsdl2javaを使用してSOAPスタブを生成しています。
元のApache Axisプロジェクトはメンテナンスされていないように見えるため、サービスからの応答を解析する際に問題が発生したため、クライアントを最新バージョン(1.5)のAxis2を使用するように変換しました。現在、.NETサービスは私の要求さえ認識しません。
「チャンク」を取得できました。オフ(「スタブ」はwsdl2javaによって生成されたタイプMumbleStubの変数であり、ここではコードの数行を1つの恐ろしい行として示しています):
stub._getServiceClient().getOptions().setProperty( HTTPConstants.CHUNKED, Boolean.FALSE);
..少なくともサービスは、私のリクエストを認識します。 AS リクエストは、悪いものではありますが、" HTTP / 1.1 400 Bad Request
"これは、「WSDLへのリンクを提供する「イントロ/概要」ページとは対照的に)です。
Axis(" 1")リクエストには異なるContent-TYpeヘッダー(text / xml vs application / soap-xml)が含まれていることに気づきました。事実問題。
代わりに、他の誰かがこの問題を抱えていましたか?問題は本当にありますか(ここでは表示できません、ブログエンジンの「要素インジェクション」のように見えます)... xml version-" 1.0" ..." XMLメタイントロタグ"そのAxis2がリクエストの先頭に追加されましたか?
WS-Deathstar、確かに。
解決
異なるコンテンツタイプヘッダーについて言及したように、クライアントはSOAP 1.2リクエストを送信しようとし、サードパーティアプリはSOAP 1.1のみを理解していると思います
AFAIK AXIS2はデフォルトでSOAP 1.2を使用するため、使用済みの石鹸のバージョンを変更してみてください
stub._getServiceClient().getOptions().setSoapVersionURI(org.apache.axiom.soap.SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI);