基本上骆驼cxfrs覆盖,以换取设置任何头时,其转换交流,以实际的HTTP响应 见here:
exchange.getOut().setHeaders(binding.bindResponseHeadersToCamelHeaders(response, exchange));
这是因为DefaultCxfRsBinding需要一个JAXRS作为参数的响应。
因此,要修复此问题,请使用自定义替代DefaultCxfRsBinding以便从exchange.getIn()中复制标题。
<cxf:rsServer id="MyService" address="/myAddress">
<cxf:binding><bean class="MyCustomCxfRsBinding" /></cxf:binding>
<cxf:serviceBeans>
<ref bean="myResourceWithJSR311Annotations" />
</cxf:serviceBeans>
</cxf:rsServer>
或者让你的骆驼路线返回与头,而不是在击溃或骆驼处理器设置页眉一个JAXRS响应。东西
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>
你也可以使用一个服务豆返回与headders
<route id="front-end">
<from uri="cxfrs:bean:myService" />
<bean ref="myServiceImpl">
是否使用的是骆驼的版本
一个jaxrs.Response? – 2014-09-21 03:53:23
我使用驼峰2.13.1和CXF 2.7.11与春季3.2.8-RELEASE – Matt 2014-09-21 06:02:30
我只是更新到骆驼2.14.0和CXF 3.0.1,但这不能解决我的问题。 – Matt 2014-09-21 07:31:14