Un proxy directo para o WebServiceTemplate de Spring
Conecte un transporte HttpClient 5 configurado con proxy ao WebServiceTemplate e conserve o interceptor de cabeceiras que require o emisor SOAP.
WebServiceTemplate envía a través do seu WebServiceMessageSender. Configure o cliente HTTP dese emisor cando o destino SOAP requira un proxy directo.
Para Spring WS 4.1 con Apache HttpClient 5 dispoñible:
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 é a plantilla existente da aplicación. O seu URI de servizo SOAP segue a ser o destino; o cliente HTTP contén o intermediario, que pode ser un candidato público da lista de proxies HTTP cando esa ruta estea permitida.
O construtor de cliente personalizado non engade o interceptor de cabeceiras habitual do emisor. Consérveo ao montar o cliente: elimina as cabeceiras de transporte proporcionadas por SOAP que xestiona o procesamento de solicitudes de Apache. Un emisor construído mediante os valores predeterminados da fábrica de clientes é outra vía de construción que conserva esta integración.
Engada as credenciais de proxy e os tempos de espera necesarios ao cliente personalizado a través das súas propias interfaces compatibles. Os métodos setter do emisor non substitúen a configuración dun cliente xa proporcionado.
Conserve o cliente para a carga de traballo da plantilla e peche os recursos propios ao apagar. Este exemplo utiliza o emisor HttpClient 5; os exemplos de Spring WS que importan org.apache.http describen outra xeración de clientes.