9

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

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

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

4

2 回答 2

6

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

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

于 2012-05-29T15:02:11.830 回答
0

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

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

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

于 2013-08-09T09:15:08.917 回答