9

SOAP 要求が NewWebService の XSD および WSDL に対して検証されない場合、NewWebService へのすべての呼び出しが OldWebService にルーティングされる必要があるユース ケースがあります。NewWebService は ServerA にあり、OldWebService は ServerB にあります。

抽象的に言えば、NewWebService にヒットする SOAP 要求を取得し、それを OldWebService に送信し、SOAP の結果をクライアントに返すことができるメカニズムが必要であることはわかっています。spring-ws の経験が限られているため、それを達成する方法を決定するのが難しくなっています。

私が最初に考えたのは、ペイロードを検証できない場合はいつでも OldWebService を呼び出す SOAP クライアントを NewWebService に組み込むことでした。これは最善の解決策ですか、それとも 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 に答える