Einen Spring-WS 4.1-Proxy mit HttpComponents 5 konfigurieren
Passen Sie die HttpComponents5-Client-Factory von Spring-WS 4.1 an und hängen Sie den resultierenden Sender an das WebServiceTemplate.
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);Wenden Sie diesen Sender vor Aufrufen auf das vorhandene template an und behalten Sie die Dienst-URI, den Marshaller und weitere Einstellungen bei. Dies ist Spring-WS 4.1.0 mit Apache HttpClient 5. Wenn die Vorlage einen zulässigen öffentlichen SOAP-Dienst ohne Proxy-Authentifizierung anspricht, kann eine HTTP-Adresse aus der HTTP-Proxy-Liste den Proxy des Customizers belegen.
withDefaults behält den Interceptor, der die von SOAP gelieferten Content-Length- und Transfer-Encoding-Header entfernt, bevor Apache die HTTP-Rahmung erzeugt. Wird der Proxy-Customizer dort ergänzt, bleibt diese Integration erhalten und wird nicht durch einen nackten Client ersetzt. Für einen separat aufgebauten Apache-Client behalten Sie den Header-Entfernungs-Interceptor von Spring-WS bei.
Stimmen Sie Imports und Sendererzeugung ab. Ältere Beispiele mit HttpComponentsMessageSender/org.apache.http nutzen Apache 4, nicht diesen SimpleHttpComponents5MessageSender und die HttpHost-Schnittstelle.
Behalten Sie einen manuell erzeugten Sender für die Lebensdauer des SOAP-Clients und regeln Sie danach die normale Zerstörung. Eine von Spring verwaltete Bean kann den Container-Lebenszyklus nutzen. Andere Vorlagen mit anderen Sendern behalten ihre eigene Transportkonfiguration.