import org.apache.hc.core5.http.HttpHost;
import org.springframework.ws.transport.http.HttpComponents5ClientFactory;
import org.springframework.ws.transport.http.SimpleHttpComponents5MessageSender;

var factory = HttpComponents5ClientFactory.withDefaults();
factory.addClientBuilderCustomizer(builder ->
    builder.setProxy(new HttpHost("http", "proxy.example", 8080)));

var sender = new SimpleHttpComponents5MessageSender(factory);
template.setMessageSender(sender);

呼び出しの前に、この送信側を既存の template に適用し、サービスの URI、marshaller、その他の設定を維持します。これは Apache HttpClient 5 を使う Spring-WS 4.1.0 です。テンプレートがプロキシ認証なしで許可された公開 SOAP サービスを対象とする場合、HTTP プロキシ一覧にある HTTP アドレスをカスタマイザのプロキシに設定できます。

withDefaults は、Apache が HTTP フレーミングを生成する前に、SOAP が付与した Content-Length と Transfer-Encoding を削除するインターセプタを維持します。そこにプロキシのカスタマイザを追加すれば、その統合が素のクライアントに置き換わるのを避けられます。別に構築した Apache クライアントでは、Spring-WS のヘッダ削除インターセプタを維持してください。

インポートと送信側の生成を一致させます。HttpComponentsMessageSender/org.apache.http を使う古い例は Apache 4 を前提としており、この SimpleHttpComponents5MessageSender と HttpHost インターフェースではありません。

手動で作成した送信側は SOAP クライアントの存続期間中保持し、その後は通常どおり破棄するよう手配します。Spring が管理する Bean はコンテナのライフサイクルを利用できます。別の送信側を保持する他のテンプレートは、それぞれ独自のトランスポート設定を保ちます。

関連記事