WebServiceTemplate は自身の WebServiceMessageSender を通じて送信します。SOAP の宛先がフォワードプロキシを必要とする場合は、その送信側の HTTP クライアントを設定します。

Apache HttpClient 5 が利用可能な Spring WS 4.1 の場合:

var http = org.apache.hc.client5.http.impl.classic.HttpClients.custom()
    .setProxy(new org.apache.hc.core5.http.HttpHost(
        "http", "proxy.example", 8080))
    .addRequestInterceptorFirst(
        new org.springframework.ws.transport.http
            .HttpComponents5ClientFactory.RemoveSoapHeadersInterceptor())
    .build();

var sender = new org.springframework.ws.transport.http
    .HttpComponents5MessageSender(http);
webServiceTemplate.setMessageSender(sender);

webServiceTemplate はアプリケーションの既存のテンプレートです。その SOAP サービス URI は宛先のままです。HTTP クライアントが中間者を保持し、その経路が許可されている場合は HTTP プロキシ一覧 の公開候補を使用できます。

カスタムクライアントのコンストラクターは、送信側の通常のヘッダーインターセプターを追加しません。クライアントを組み立てるときはこれを保持してください。Apache のリクエスト処理が管理する SOAP 提供のトランスポートヘッダーを除去します。クライアントファクトリーのデフォルト で構築した送信側も、この統合を保つ別の構築経路です。

必要なプロキシ資格情報とタイムアウトは、カスタムクライアント自身が対応するインターフェースを通じて追加してください。送信側の setter メソッドは、すでに提供されたクライアントの設定の代わりにはなりません。

テンプレートのワークロードのためにクライアントを保持し、シャットダウン時に所有リソースを閉じます。この例では HttpClient 5 の送信側を使用します。org.apache.http をインポートする Spring WS の例は別のクライアント世代を説明しています。

関連記事