Apache camel 从Camel CXFRS路由响应REST客户端?
我试图在CXFRS驼峰路由中创建对REST web服务调用的响应,但无论我做什么,对客户端的响应总是相同的200,而不是201。这是我的路线:Apache camel 从Camel CXFRS路由响应REST客户端?,apache-camel,Apache Camel,我试图在CXFRS驼峰路由中创建对REST web服务调用的响应,但无论我做什么,对客户端的响应总是相同的200,而不是201。这是我的路线: <route id="front-end"> <from uri="cxfrs:bean:myService" /> <setBody> <constant>Will do...</constant> </setBody> <se
<route id="front-end">
<from uri="cxfrs:bean:myService" />
<setBody>
<constant>Will do...</constant>
</setBody>
<setHeader headerName="CamelHttpResponseCode">
<constant>201</constant>
</setHeader>
<setHeader headerName="Content-Type">
<constant>more/blah</constant>
</setHeader>
</route>
可以。。。
201
更多/废话
返回正文,但忽略响应代码和内容类型。我做错了什么
谢谢,
Matt当cxfrs将exchange转换为实际HTTP响应时,它会覆盖exchange中设置的任何头 见: 这是因为需要一个jaxrs响应作为参数 因此,要解决此问题,您可以使用自定义文件覆盖DefaultCxfRsBinding,以便从exchange.getIn()复制头文件 对于您的样本:
<route id="front-end">
<from uri="cxfrs:bean:myService" />
<setBody>
set it to Response.ok(your message).header(x, y).build()
</setBody>
将其设置为Response.ok(您的消息).header(x,y).build()
您还可以使用服务bean返回带有标题的jaxrs.Response
<route id="front-end">
<from uri="cxfrs:bean:myService" />
<bean ref="myServiceImpl">
您使用的是哪一版本的camel?我在Spring 3.2.8-Release中使用camel 2.13.1和CXF 2.7.11。我刚刚更新到camel 2.14.0和CXF 3.0.1,但这并不能解决我的问题。这是非常好的反馈,非常感谢。我最终创建了一个定制处理器,类似于您的解决方案,它允许我继续前进。然而,这感觉像是一种黑客行为,所以我稍微改变了跟踪方式,使用RESTDSL(Camel 2.14)和Servlet组件,这对我来说更灵活。
class HttpHeaderProcessor implements Processor
{
@Override
public void process(Exchange exchange) throws Exception
{
Message message = exchange.getIn();
Response response = convertToJaxRs(message);
exchange.getIn().setBody(response);
exchange.getIn().setHeader("Test", "Won't work unless DefaultCxfRsBinding is not replaced with a custom one");
}
private Response convertToJaxRs(Message message)
{
ResponseBuilder jaxrsResponseBuilder = Response.ok(message.getBody(), MediaType.APPLICATION_XML);
jaxrsResponseBuilder.header("header1", "you'll see this");
Response response = jaxrsResponseBuilder.build();
return response;
}
}
<route id="front-end">
<from uri="cxfrs:bean:myService" />
<setBody>
set it to Response.ok(your message).header(x, y).build()
</setBody>
<route id="front-end">
<from uri="cxfrs:bean:myService" />
<bean ref="myServiceImpl">