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.

Ähnliche Artikel