CXFのサーブレットトランスポートとJetty6.1を使用してサービスを提供するアプリケーションがあります。このアプリケーションは、外部サービスも利用する必要があります。すべてのサービスは、WS-Addressing仕様(および最上位のWS-RM)をサポートしています。外部サービスを利用するために、アプリケーションから生成されたサービスクライアントを実行します。
問題は、クライアントに分離されたエンドポイントを提供すると(WS-RMはこのエンドポイントが別のhttp接続を介して着信メッセージを受信する必要がある)、CXFがJettyサーバーの別のインスタンスを実行することです(サーブレットトランスポート(サービス)とクライアント(外部サービスを消費する)は同じバスを共有します)。Jettyの2つのインスタンスは必要ありません(同じHTTPポートで実行できないと言っているわけではありません)。
既存のJettyサーバーとサーブレットトランスポートを使用して分離されたエンドポイントを提供する方法はありますか?
これまでのところ、次のように分離されたエンドポイントを有効にします。
Client client = ClientProxy.getClient(port);
HTTPConduit httpConduit = (HTTPConduit) client.getConduit();
httpConduit.getClient().setDecoupledEndpoint(
"http://domain.com:port/services/dec_endpoints/TestDecEndpoint");
相対パス( "/ dec_endpoints / TestDecEndpoint"、サーブレットトランスポートを介したサービスの提供で相対パスが使用されるのと同じように)を指定すると、HTTPコンジットはSOAPメッセージのヘッダーでフルパスを指定しないため、これも機能しません(サーバーは/dec_endpoints/TestDecEndpointにメッセージを送信できません)。