WebSphere Application Server 8.5.5 JAX-WS では、クライアントのリクエスト コンテキストにあるアドレスに依存する前に、周囲の 2 つの制御を確認します。IBM の JVM レベルの com.ibm.ws.websvcs.transport.enableProxyTunnel は既定で false です。クライアント単位のアドレスだけではトンネリングは有効になりません。ポリシー セットの HTTP トランスポート値もプログラムによる値を上書きし、さらにそれらが JVM のシステム プロパティを上書きします。

選択した既存ポートについて、IBM は呼び出し前にこのクライアント単位の設定を文書化しています。

import javax.xml.ws.BindingProvider;

BindingProvider binding = (BindingProvider) servicePort;
binding.getRequestContext().put("https.proxyHost", "proxy.example");
binding.getRequestContext().put("https.proxyPort", "8080");

HTTPS のキーは HTTPS エンドポイントに適用されます。HTTP には対応する IBM HTTP のキーを使用します。許可されたパブリック SOAP エンドポイントが HTTP プロキシ一覧の HTTP アドレスを使えるのは、該当するポリシーとトンネリング制御が許可し、それらのレベルでプロキシ アカウントが構成されていない場合だけです。プロキシ認証には SOAP サービスの資格情報とは独立した、HTTP/HTTPS それぞれの proxyUser と proxyPassword プロパティがあります。

これらは WebSphere の拡張です。Metro、CXF、その他の実装の BindingProvider マップでは、これらの文字列は移植できません。

呼び出しの実行中に共有ポート コンテキストを書き換えるのではなく、同時に使う異なるルートを適切に構成したクライアント オブジェクトに保持します。これによりアドレスは実際のクライアントに限定され、周囲の JVM 制御すべてがクライアント固有と見なされることはありません。

関連記事