1

有人知道将 ActiveMQ 连接到 CXF 的工作示例吗?我看到了许多将 WebService 连接到消息队列的示例,但反过来我需要它。来自 JMS 队列的消息应转发到 Web 服务,并将结果返回给调用者。

我的第一种方法仅适用于公开一个方法的 Web 服务:

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

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

但是对于具有多个方法的 Web 服务,类似的调用会导致ExchangeTimedOutException

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 服务并返回了正确的答案。但不幸的是,它在回来的路上迷路了。

任何指向外部资源的提示或链接表示赞赏。

许多问候, 雅各布

4

2 回答 2

0

ActiveMQ 和 JMS 调用是一种默认方式,您可能希望将其指定为同步的。

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

除此之外,使用 ActiveMQ 作为 CXF 生产者的启动器应该没有什么不同。

一个建议是下载 Camel 源代码并查看此文件夹:

\components\camel-cxf\src\test\java\org\apache\camel\component\cxf

(或通过网络: http: //svn.apache.org/viewvc/camel/trunk/components/camel-cxf/src/test/

您将拥有大量的 CXF 生产者测试用例,作为参考资料。

于 2012-10-18T05:38:27.197 回答
0

当 Web 服务返回未实现可序列化接口的类的对象时会出现问题,即使这些类是可序列化的。

实现可序列化接口解决了这个问题。

于 2012-10-18T10:08:48.520 回答