WSDL はダウンロードされ、Java クラスも生成された。それでも最初の SOAP 呼び出しはネットワークから出られないままだ。ジェネレーターが使うプロキシ指定は、あくまでジェネレーター自身の実行に属する。

Oracle JDK 8 の wsimport のリファレンスには、このツール向けの HTTP プロキシ指定が記載されている。それは生成されたサービス・クラスに埋め込まれる可搬な指示ではない。後から動くアプリケーションは、別の JVM、別のアカウント、別の JAX-WS 実装で動きうる。

どの要求が失敗したかを見極める

段階確認するプロセスまたは構成要素
WSDL と import からクラスを生成するビルドツールまたは wsimport の起動
サービス生成時に WSDL を読むアプリケーションの WSDL の場所と実行時クライアント
SOAP エンドポイントを呼び出す選択した実行時トランスポートとそのプロキシ設定

中間の段階は見落としやすい。生成されたサービスが依然として遠隔の WSDL を参照していることがある。実行時に構築中にそれを取得する必要があるなら、あとからポートを設定しても先のダウンロードには間に合わない。意図した記述をアプリケーションのリソースとして同梱すれば、実装が対応している範囲でその取得依存を取り除ける。

ある実装の ClientProxyFeature というクラスは、すべての JAX-WS プロバイダーに自動的に含まれるわけではない。

プロキシの資格情報は SOAP サービスの資格情報と分けて管理する。WSDL のダウンロードは匿名で通っても、操作エンドポイントがログインを要求する場合があり、逆もある。

失敗した URL と、構築または呼び出しが止まった箇所を記録する。たいていはそれで、欠けている設定がどこに属するか分かる。同じクラスを作り直す必要はない。

関連記事