Camel CXF消费者,webservice方法没有回应

时间:2010-12-16 17:00:12

标签: cxf apache-camel

我正在尝试使用cxf组件从camel中使用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"});
}

我看到第一个调用的效果(即消息到达服务器),但不是第二个,并且方法没有完成运行(再次,我假设它会超时)在某些时候...如果是这样,超时很长:当我开始编写这个时,我运行了测试,并且它仍在运行。)

我错过了什么吗?这是一个错误吗?让webservice方法没有响应只是不好的做法吗?

顺便说一下,当测试有响应的方法时,它可以正常工作。

2 个答案:

答案 0 :(得分:2)

我认为Willem Jiang最近在Camel最近解决了单向CXF的一些问题。也许从后备箱尝试Camel 2.6-SNAPSHOT。

我个人更喜欢双向使用Web服务,只是在没有数据返回的情况下返回一些ACK。客户端通常需要服务器已收到一些确认并确认数据。

答案 1 :(得分:1)

camel-cxf生产者通过检查操作是否单向来决定它是否会处理响应消息。即使sendMessage操作是单向调用,您的服务器也应该根据HTTP协议向客户端发送Http状态202消息,否则camel-cxf生成器仍将等待响应。

顺便说一下,我认为克劳斯所说的问题[1]与camel-cxf生产者的异步调用有单向消息有关,不确定它是否与你提到的问题相同(我不知道哪个版本的骆驼你正在用吗)。

[1] https://issues.apache.org/jira/browse/CAMEL-3426

威廉