2012-05-03 94 views
2

我有一個基於cxf和camel的寧靜web服務。我使用駱駝路由我的工作流程是這樣的..Apache Camel和CXF:我如何從bean發送HTTP狀態代碼

客戶端 - >我的休息服務類 - >駱駝定製處理器 - >豆的一些方法foo酒吧

豆子FooBar的長相像這樣..

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對象,但我如何訪問此響應對象。

我試過以下,但它並沒有解決我的問題。

  1. exchange.getOut().setHeader(Exchange.HTTP_RESPONSE_CODE, 202);

  2. exchange.getIn().setHeader(Exchange.HTTP_RESPONSE_CODE, 202);

  3. exchange.setProperty(Exchange.HTTP_RESPONSE_CODE, 202);

  4. Response.status(202).build();

回答

3

這裏是一個解決辦法,我不知道這是否是這樣做的唯一途徑,但這個作品爲了我。將方法Foo的返回類型更改爲Response(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; 
    } 
} 
2

有你喲累了這樣的事情烏爾航線

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

由於要更改默認的響應,你需要重寫交流了信息

1

設置HTTP_RESPONSE_CODE後,您需要告訴交換機發生錯誤。

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