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

时间:2012-05-03 15:10:59

标签: java web-services soap spring-ws

如果SOAP请求未针对NewWebService的XSD和WSDL进行验证,我有一个用例,要求对NewWebService的所有调用都被路由到OldWebService。 NewWebService位于ServerA上,OldWebService位于ServerB上。

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

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

2 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:0)

我认为Apache Camel可以有效地帮助您。

您可以查看其代理示例,它可以简单轻松地满足您的要求。

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