wsimport は完了した。それでも SOAP 呼び出しにはプロキシが要る。
JAX-WS のプロキシ経由アクセスを設定するときは、WSDL 生成・実行時の WSDL 取得・SOAP 呼び出しを分けて考える。
WSDL はダウンロードされ、Java クラスも生成された。それでも最初の SOAP 呼び出しはネットワークから出られないままだ。ジェネレーターが使うプロキシ指定は、あくまでジェネレーター自身の実行に属する。
Oracle JDK 8 の wsimport のリファレンスには、このツール向けの HTTP プロキシ指定が記載されている。それは生成されたサービス・クラスに埋め込まれる可搬な指示ではない。後から動くアプリケーションは、別の JVM、別のアカウント、別の JAX-WS 実装で動きうる。
どの要求が失敗したかを見極める
| 段階 | 確認するプロセスまたは構成要素 |
|---|---|
| WSDL と import からクラスを生成する | ビルドツールまたは wsimport の起動 |
| サービス生成時に WSDL を読む | アプリケーションの WSDL の場所と実行時クライアント |
| SOAP エンドポイントを呼び出す | 選択した実行時トランスポートとそのプロキシ設定 |
中間の段階は見落としやすい。生成されたサービスが依然として遠隔の WSDL を参照していることがある。実行時に構築中にそれを取得する必要があるなら、あとからポートを設定しても先のダウンロードには間に合わない。意図した記述をアプリケーションのリソースとして同梱すれば、実装が対応している範囲でその取得依存を取り除ける。
ある実装の ClientProxyFeature というクラスは、すべての JAX-WS プロバイダーに自動的に含まれるわけではない。
プロキシの資格情報は SOAP サービスの資格情報と分けて管理する。WSDL のダウンロードは匿名で通っても、操作エンドポイントがログインを要求する場合があり、逆もある。
失敗した URL と、構築または呼び出しが止まった箇所を記録する。たいていはそれで、欠けている設定がどこに属するか分かる。同じクラスを作り直す必要はない。