2012-05-03 19 views
7

Tengo un caso de uso que requiere que todas las llamadas a NewWebService se enruten a OldWebService, si la solicitud SOAP no valida contra XSD y WSDL de NewWebService. NewWebService está ubicado en ServerA y OldWebService está en ServerB.Redirigir/Reenviar solicitudes de servicio web SOAP a otro servicio web

En abstracto, sé que necesito algún mecanismo que me permita realizar una solicitud SOAP que llegue a NewWebService, enviarla a OldWebService y devolver el resultado SOAP al cliente. Mi experiencia limitada con spring-ws hace que sea difícil decidir cómo lograr eso.

Mi primer pensamiento fue construir un cliente SOAP en el NewWebService que llama al servicio OldWeb siempre que no se pueda validar la carga útil. ¿Es esta la mejor solución, o existe una mejor manera de permitir que NewWebService actúe como un pase para ciertas solicitudes?

+0

Hay una opción para enrutar las solicitudes con WS-Addressing.Refer a [http://static.springsource.org/spring-ws/sites/2.0/reference/html/server.html#server -ws-address –

Respuesta

5

Mi solución fue escribir un SoapRequestFilter personalizado que implementa un javax.servlet.Filter y una nueva clase que amplía HttpServletRequestWrapper. Como HttpServletRequestWrapper implementa la interfaz HttpServletRequest, la extensión del contenedor le permite copiar HttpRequest y actuar en la ruta sin consumir el objeto y causar problemas en la ruta.

Una vez que tuve el filtro y la envoltura, pude analizar el punto final y la carga desde HttpRequest. Si la solicitud debía redireccionarse, creé una nueva HttpUrlConnection en el antiguo SOAP WebService y establecí el InputStream a partir de esa respuesta al OutputStream de HttpResponse.

+6

¿Tiene este código compartido en alguna parte? Me interesaría ver tu implementación. – youdonotexist

Cuestiones relacionadas