2012-05-03 10 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のresponeコードを取得することです。今私はこのコードを別のものにしたい場合は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タイプを指定することもできます。

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); 
関連する問題