2012-05-03 20 views
7

SOAP要求がNewWebServiceのXSDおよびWSDLに対して検証されない場合、NewWebServiceへのすべての呼び出しがOldWebServiceにルーティングされる必要がある使用例があります。 NewWebServiceはServerAにあり、OldWebServiceはServerBにあります。別のWebサービスへのSOAP Webサービス要求のリダイレクト/転送

私は、NewWebServiceにヒットし、OldWebServiceに送信し、その後SOAP結果をクライアントに戻すSOAPリクエストを受け取るためのメカニズムが必要であることを知っています。私の限られた春の経験は、それを達成する方法を決めるのを難しくしています。

私の最初の考えは、ペイロードを検証できないときはいつでもOldWebServiceを呼び出すNewWebServiceにSOAPクライアントを構築することでした。これが最善の解決策ですか、またはNewWebServiceが特定の要求のパススルーとして機能するようにする良い方法がありますか?

+0

[http://static.springsource.org/spring-ws/sites/2.0/reference/html/server.html#serverにWS-Addressing.Referでルート要求するオプションがあります-ws-addressing –

答えて

5

私のソリューションは、javax.servlet.FilterとHttpServletRequestWrapperを拡張する新しいクラスを実装するカスタムSoapRequestFilterを記述することでした。 HttpServletRequestWrapperはHttpServletRequestインターフェイスを実装しているため、ラッパーを拡張すると、HttpRequestをコピーしてストリームを処理し、オブジェクトを消費せずにダウンストリームで問題を発生させることもありません。

フィルタとラッパーが完成したら、HttpRequestからエンドポイントとペイロードを解析できました。要求をリダイレクトする必要がある場合は、古いSOAP WebServiceに新しいHttpUrlConnectionを作成し、その応答からHttpResponseのOutputStreamにInputStreamを設定します。

+6

どこでもこのコードを共有していますか?私はあなたの実装を見て興味があります。 – youdonotexist

0

私はApache Camelが効率的にあなたを助けることができると思います。

あなたはそのプロキシの例を見ることができます。あなたの要件を簡単かつ簡単に満たすことができます。

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

関連する問題