2

cxf と camel に基づく安らかな Web サービスがあります。私は自分のワークフローに Camel ルーティングを使用しています。これは次のようなものです。

クライアント --> My Rest Service Class --> Camel Custom Processors --> Bean Bar のメソッド Foo

Bean 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();

4

3 に答える 3

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;
    }
}
于 2012-05-03T07:21:15.743 に答える
2

あなたはあなたのルートでこのようなものを疲れましたか?

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

デフォルトの応答を変更したいので、交換メッセージを上書きする必要があります

于 2012-05-03T06:56:00.643 に答える