2012-10-17 76 views
1

有沒有人知道將ActiveMQ連接到CXF的工作示例?我看到很多將WebService連接到消息隊列的例子,但我反過來需要它。來自JMS隊列的消息應被轉發到Web服務,並將結果返回給調用者。如何使用Apache Camel將ActiveMQ連接到CXF

我的第一個方法是唯一的工作爲Web服務暴露一個單一的方法:

from("activemq:wsa").to("cxf:bean:webServiceA"); 

Status msg = producerTemplate.requestBody("activemq:wsa", params, Status.class); 

但對於那些有不止一種方法,類似的電話導致ExchangeTimedOutException Web服務。

Map<String, Object> header = new HashMap<String, Object>(); 
header.put(CxfConstants.OPERATION_NAME, "doSomething"); 
header.put(CxfConstants.OPERATION_NAMESPACE, "http://.../"); 

Status msg = producerTemplate.requestBodyAndHeaders("activemq:wsb", params, header, Status.class); 

儘管如此,我可以看到請求轉發到Web服務並返回正確的答案。但不幸的是,它在回來的路上迷路了。

讚賞任何提示或鏈接到外部資源。

許多方面, 雅各布

回答

0

的ActiveMQ和JMS電話是單向默認情況下,你可能需要指定它是同步的。

http://camel.apache.org/jms.html#JMS-RequestreplyoverJMS

除此之外,它應該是沒有什麼不同使用的ActiveMQ作爲CXF生產者首發。

一個建議是下載駱駝來源並查找到這個文件夾:

\部件\駱駝CXF \ SRC \測試\ java中\組織\阿帕奇\駱駝\部件\ CXF

(或通過網絡:http://svn.apache.org/viewvc/camel/trunk/components/camel-cxf/src/test/

您將有大量的CXF生產者測試用例,作爲參考資料來看待。

+0

requestBody的ProducerTemplate設置了InOut MEP,所以這不是原因。應該注意的是第一個例子有效。它只是適用於使用單一方法(operationName)的Web服務,而不適用於使用多種方法的Web服務。 – jkob

0

當Web服務返回沒有實現可序列化接口的類的對象時,即使這些類是可序列化的,也會出現此問題。

實現可序列化接口解決了這個問題。