Java ApacheCamel和CXF:如何从bean发送HTTP状态代码

Java ApacheCamel和CXF:如何从bean发送HTTP状态代码,java,rest,cxf,apache-camel,cxfrs,Java,Rest,Cxf,Apache Camel,Cxfrs,我有一个基于cxf和camel的restfulweb服务。我在我的工作流程中使用驼峰路由,它是这样的 客户端-->我的Rest服务类-->驼峰自定义处理器-->Bean Bar的某些方法Foo 豆饼看起来像这样的东西 public class Bar { public MyObject foo(String request, Exchange exchange){ //do some procesing return instance of MyObject; }

我有一个基于cxf和camel的restfulweb服务。我在我的工作流程中使用驼峰路由,它是这样的

客户端-->我的Rest服务类-->驼峰自定义处理器-->Bean Bar的某些方法Foo

豆饼看起来像这样的东西

public class Bar {

    public MyObject foo(String request, Exchange exchange){
    //do some procesing 

    return instance of MyObject;
}
现在的问题是,每当我测试这个时,客户端的响应代码都是200。现在,如果我希望这个代码不是200,我需要在
HttpServletResponse
或其他
javax.ws.rs.core.Response
对象中设置它,但是我如何访问这个响应对象呢

我尝试了以下方法,但没有解决我的问题

  • exchange.getOut().setHeader(exchange.HTTP\u RESPONSE\u代码,202)

  • exchange.getIn().setHeader(exchange.HTTP\u RESPONSE\u代码,202)

  • exchange.setProperty(exchange.HTTP\u RESPONSE\u code,202)

  • Response.status(202.build()


  • 你在路上累了吗

    Response r = Response.status(202).entity("Created").build();
    exchange.getOut().setBody(r);
    

    由于要更改默认响应,需要覆盖交换消息,这里有一个解决方法,我不知道这是否是唯一的方法,但这对我来说很有效。将方法Foo的返回类型更改为响应(javax.ws.rs.core),然后在此响应中包装对象(“myobject实例”),如果需要,还可以指定mime类型。。下面是一个例子

    public class Bar {
        public Response foo(String request, Exchange exchange){
            //make instance of MyObject
            MyObject myObj = new myObj();
            //do your processing and set the object in response code
            Response response = Response.status(Status.ACCEPTED).entity(myObj).type(MediaType.APPLICATION_JSON).build();
            return response;
        }
    }
    

    设置
    HTTP\u RESPONSE\u code
    后,需要告诉exchange发生错误

    exchange.getOut().setHeader(Exchange.HTTP_RESPONSE_CODE, 202);
    exchange.getOut().setFault(true);