如果SOAP请求未针对NewWebService的XSD和WSDL进行验证,我有一个用例,要求对NewWebService的所有调用都被路由到OldWebService。 NewWebService位于ServerA上,OldWebService位于ServerB上。
抽象地说,我知道我需要一些机制来允许我接受命中NewWebService的SOAP请求,将其发送到OldWebService,然后将SOAP结果返回给客户端。我对spring-ws的有限经验使得很难决定如何实现这一目标。
我的第一个想法是在NewWebService中构建一个SOAP客户端,只要无法验证有效负载,就会调用OldWebService。这是最好的解决方案,还是有更好的方法允许NewWebService充当某些请求的传递?
答案 0 :(得分:5)
我的解决方案是编写一个自定义SoapRequestFilter,它实现了一个javax.servlet.Filter和一个扩展HttpServletRequestWrapper的新类。由于HttpServletRequestWrapper实现了HttpServletRequest接口,因此扩展包装器允许您复制HttpRequest并在不占用对象的情况下对流进行操作并导致下游问题。
一旦我有了过滤器和包装器,我就能够从HttpRequest解析端点和有效负载。如果需要重定向请求,我为旧的SOAP WebService创建了一个新的HttpUrlConnection,并将InputStream从该响应设置为HttpResponse的OutputStream。
答案 1 :(得分:0)