3

Camel は初めてで、イディオムとベスト プラクティスを学ぼうとしています。いくつかの異なるエラー ケースを処理する必要がある Web サービスを作成しています。これが私のエラー処理とルーティングです:

onException(JsonParseException.class).inOut("direct:syntaxError").handled(true);
onException(UnrecognizedPropertyException.class).inOut("direct:syntaxError").handled(true);

// Route service through direct to allow testing.
from("servlet:///service?matchOnUriPrefix=true").inOut("direct:service");
from("direct:service")
    .choice()
        .when(body().isEqualTo(null))
            .inOut("direct:syntaxError")
        .otherwise()
            .unmarshal().json(lJsonLib, AuthorizationParameters.class).inOut("bean:mybean?method=serviceMethod").marshal().json(lJsonLib);

ご覧のとおり、本文が null のリクエストを処理するための特別な処理 (コンテンツ ベースのルーティング) があります。これをよりエレガントに処理する方法はありますか?私はこのタイプのいくつかのサービスを書いています。

4

3 に答える 3

7

body().isNull()コンテンツベースのルーティングで式を使用して、nullメッセージをデッド レター チャネルにリダイレクトすることは、さらにエレガントです :) 。DLC にリダイレクトされたメッセージにはヘッダーが含まれているため、後で配信失敗の理由を簡単に分析できます。

choice().
   when(body().isNull()).to("jms:deadLetterChannel").
   otherwise().to("jms:regularProcessing").
endChoice();
于 2012-05-27T16:32:24.860 に答える
6

ここに例があるように、when を指定した InterceptFrom などのインターセプターを使用して、空の bod をチェックできます: http://camel.apache.org/intercept

そして、stop を使用して、それ以上処理しないことを示します。

interceptFrom("servlet*").when(body().isNull()).to("direct:syntaxError").stop();
于 2012-05-26T08:07:28.337 に答える
0

null をチェックし、null の場合は例外をスローする Bean を使用できます。したがって、例外処理でこのケースを処理できます。

于 2012-05-26T13:31:24.160 に答える