Ein Forward-Proxy für Springs WebServiceTemplate
Verbinden Sie einen proxy-konfigurierten HttpClient 5-Transport mit dem WebServiceTemplate und behalten Sie den vom SOAP-Sender benötigten Header-Interceptor bei.
WebServiceTemplate sendet über seinen WebServiceMessageSender. Konfigurieren Sie den HTTP-Client dieses Senders, wenn das SOAP-Ziel einen Forward-Proxy erfordert.
Für Spring WS 4.1 mit verfügbarem 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 ist die vorhandene Vorlage der Anwendung. Ihre SOAP-Service-URI bleibt das Ziel; der HTTP-Client enthält den Vermittler, der ein öffentlicher Kandidat aus der HTTP-Proxy-Liste sein kann, sofern diese Route zulässig ist.
Der Konstruktor für einen benutzerdefinierten Client fügt nicht den üblichen Header-Interceptor des Senders hinzu. Behalten Sie ihn beim Zusammenbauen des Clients bei: Er entfernt vom SOAP bereitgestellte Transport-Header, die Apaches Anforderungsverarbeitung verwaltet. Ein über die Standardeinstellungen der Client-Factory erzeugter Sender ist ein anderer Konstruktionsweg, der diese Integration beibehält.
Fügen Sie erforderliche Proxy-Anmeldedaten und Zeitüberschreitungen am benutzerdefinierten Client über dessen eigene unterstützte Schnittstellen hinzu. Die Setter-Methoden des Senders ersetzen nicht die Konfiguration eines bereits bereitgestellten Clients.
Behalten Sie den Client für die Arbeitslast der Vorlage bei und schließen Sie eigene Ressourcen beim Herunterfahren. Dieses Beispiel verwendet den HttpClient 5-Sender; Spring-WS-Beispiele, die org.apache.http importieren, beschreiben eine andere Client-Generation.