WebServiceTemplate envía a través de su WebServiceMessageSender. Configure el cliente HTTP de ese emisor cuando el destino SOAP requiera un proxy directo.

Para Spring WS 4.1 con Apache HttpClient 5 disponible:

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 es la plantilla existente de la aplicación. Su URI de servicio SOAP sigue siendo el destino; el cliente HTTP contiene el intermediario, que puede ser un candidato público de la lista de proxies HTTP cuando esa ruta esté permitida.

El constructor de cliente personalizado no añade el interceptor de cabeceras habitual del emisor. Consérvelo al montar el cliente: elimina las cabeceras de transporte proporcionadas por SOAP que gestiona el procesamiento de solicitudes de Apache. Un emisor construido mediante los valores predeterminados de la fábrica de clientes es otra vía de construcción que conserva esta integración.

Añada las credenciales de proxy y los tiempos de espera necesarios al cliente personalizado a través de sus propias interfaces compatibles. Los métodos setter del emisor no sustituyen la configuración de un cliente ya proporcionado.

Conserve el cliente para la carga de trabajo de la plantilla y cierre los recursos propios al apagar. Este ejemplo utiliza el emisor HttpClient 5; los ejemplos de Spring WS que importan org.apache.http describen otra generación de clientes.

Artículos relacionados