Apache Camel CxfRsEndpoint performInvocation设置触发两次调用

时间:2016-03-12 13:17:18

标签: apache-camel cxfrs

我有一个带有cxf端点的最小驼峰路由(在RouteBuilder #configure方法中):

CxfRsComponent cxfComponent = new CxfRsComponent(context);
CxfRsEndpoint serviceEndpoint = new CxfRsEndpoint("http:/localhost/rest", cxfComponent);
serviceEndpoint.addResourceClass(PersonService.class);
serviceEndpoint.setPerformInvocation(true);

from(serviceEndpoint).log("this is irrelevant");

问题是资源类的方法被调用两次:

假设有一个“PersonService#post”方法:

public Person post(Person p){
    p.setId(p.getId() + "_PersonService#post");
    return p;
}

它被调用两次:断点被击中两次,响应有效载荷

{
    "id" : "id_from_client"
}

{
  "id": "id_from_client_PersonService#post_PersonService#post"
}

这是预期的行为吗?如果是,是否有设置只执行一次方法?这对我来说似乎是个错误。

Camel版本是2.16.2(maven:org.apache.camel:camel-cxf-transport:2.16.2) CXF版本为3.1.4(org.apache.cxf:cxf-rt-transports-http-jetty:3.1.4)

1 个答案:

答案 0 :(得分:2)

FWIW,我更改了配置以添加" synchronous = true"选项以及" performInvocation = true"双重呼叫消失了。我不确定这是不是它应该如何表现,但是现在看起来好像这样。

<camel:from uri="cxfrs:bean:rsServer performInvocation=true&amp;synchronous=true" />