Прямой прокси для WebServiceTemplate в Spring
Подключите транспорт HttpClient 5, настроенный на прокси, к WebServiceTemplate и сохраните обязательный перехватчик заголовков отправителя SOAP.
WebServiceTemplate отправляет через свой WebServiceMessageSender. Настройте HTTP-клиент этого отправителя, если назначение SOAP требует прямого прокси.
Для Spring WS 4.1 с доступным Apache HttpClient 5:
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 — это существующий шаблон приложения. Его URI службы SOAP остаётся назначением; HTTP-клиент содержит посредника, которым может быть публичный кандидат из списка HTTP-прокси, если этот маршрут разрешён.
Конструктор пользовательского клиента не добавляет обычный перехватчик заголовков отправителя. Сохраните его при сборке клиента: он удаляет транспортные заголовки, предоставляемые SOAP, которыми управляет обработка запросов Apache. Отправитель, собранный через настройки по умолчанию фабрики клиентов, — другой путь сборки, сохраняющий эту интеграцию.
Добавьте необходимые учётные данные прокси и тайм-ауты в пользовательский клиент через его собственные поддерживаемые интерфейсы. Методы-сеттеры отправителя не заменяют настройку уже предоставленного клиента.
Сохраняйте клиент для рабочей нагрузки шаблона и закрывайте собственные ресурсы при завершении. В этом примере используется отправитель HttpClient 5; примеры Spring WS, импортирующие org.apache.http, описывают другое поколение клиентов.