Un proxy forward per WebServiceTemplate di Spring
Collegate un trasporto HttpClient 5 configurato con proxy a WebServiceTemplate e conservate l'intercettore di intestazione richiesto dal mittente SOAP.
WebServiceTemplate invia tramite il proprio WebServiceMessageSender. Configurate il client HTTP di quel mittente quando la destinazione SOAP richiede un proxy forward.
Per Spring WS 4.1 con Apache HttpClient 5 disponibile:
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 è il modello esistente dell'applicazione. Il suo URI del servizio SOAP resta la destinazione; il client HTTP detiene l'intermediario, che può essere un candidato pubblico dall'elenco dei proxy HTTP quando quella rotta è consentita.
Il costruttore di un client personalizzato non aggiunge il consueto intercettore di intestazione del mittente. Conservatelo durante l'assemblaggio del client: rimuove le intestazioni di trasporto fornite da SOAP gestite dall'elaborazione delle richieste di Apache. Un mittente costruito tramite i valori predefiniti della factory dei client è un'altra via di costruzione che conserva questa integrazione.
Aggiungete le credenziali proxy e i timeout necessari al client personalizzato tramite le sue stesse interfacce supportate. I metodi setter del mittente non sostituiscono la configurazione di un client già fornito.
Conservate il client per il carico di lavoro del modello e chiudete le risorse possedute allo spegnimento. Questo esempio usa il mittente HttpClient 5; gli esempi Spring WS che importano org.apache.http descrivono un'altra generazione di client.