重定向/转发SOAP Web服务请求到另一个Web服务

问题描述:

我有一个用例,要求对NewWebService的所有调用都路由到OldWebService,如果SOAP请求不针对NewWebService的XSD和WSDL进行验证。 NewWebService位于ServerA上,OldWebService位于ServerB上。重定向/转发SOAP Web服务请求到另一个Web服务

抽象地说,我知道我需要一些机制来允许我接受一个访问NewWebService的SOAP请求,将它发送到OldWebService,然后将SOAP结果返回给客户端。我对spring-ws的有限经验使得很难决定如何实现这一点。

我的第一个想法是在NewWebService中构建一个SOAP客户端,每当有效载荷无法验证时调用OldWebService。这是最好的解决方案,还是有更好的方法来允许NewWebService充当某些请求的传递?

+0

有一个选项将请求路由与WS-Addressing.Refer为[http://static.springsource.org/spring-ws/sites/2.0/reference/html/server.html#server -ws-addressing –

我的解决方案是编写一个自定义的SoapRequestFilter,它实现了一个javax.servlet.Filter和一个扩展HttpServletRequestWrapper的新类。由于HttpServletRequestWrapper实现了HttpServletRequest接口,所以扩展包装器允许您复制HttpRequest并对流进行操作而不消耗对象并导致下游出现问题。

一旦我有过滤器和包装,我能够从HttpRequest解析端点和有效载荷。如果请求需要重定向,我为旧的SOAP WebService创建了一个新的HttpUrlConnection,并将该响应的InputStream设置为HttpResponse的OutputStream。

+6

您是否在任何地方共享此代码?我很乐意看到你的实施。 – youdonotexist

我认为Apache Camel可以以高效的方式帮助你。

您可以看看它的代理示例,它很简单,很容易满足您的要求。

http://camel.apache.org/cxf-proxy-example.html