次のように、cxfコンポーネントを使用してラクダからWebサービスを利用しようとしています。
<cxf:cxfEndpoint id="webservice"
address="http://webservice.url.com/webservice"
serviceClass="com.url.webservice.MyWebService"/>
<camel:camelContext>
<camel:route>
<camel:from uri="direct:a"/>
<camel:inOnly uri="cxf:bean:webservice?defaultOperationName=sendMessage"/>
</camel:route>
</camel:camelContext>
このsendMessage
メソッドには応答がないため、inOnly
ではなくto
(代わりに試してみると同じ問題が発生しto
ます)。問題は、明らかにラクダがまだ応答を期待していて、応答を待っている間にルートがハングすることです。十分に長く試してみると、やがてタイムアウトになると思います。
明確にするために、私はテストメソッドを実行しています:
/* ... */
@Produce(uri = "direct:a")
protected ProducerTemplate directA;
@Test
public void sendMessage() throws Exception {
directA.sendBody(new String[] {"client id", "message"});
directB.sendBody(new String[] {"client id", "message 2"});
}
そして、最初の呼び出し(つまり、メッセージがサーバーに到着する)の効果が表示されていますが、2番目の呼び出しは表示されておらず、メソッドの実行が終了していません(ここでも、ある時点でタイムアウトになると想定しています) ...もしそうなら、タイムアウトはかなり長いです:私はこれを書き始めたときにテストを実行しました、そしてそれはまだ実行中です)。
私は何かが足りないのですか?バグですか?応答のないWebサービスメソッドを使用するのは悪い習慣ですか?
ちなみに、応答のあるメソッドをテストする場合は問題なく動作します。