1

JPAでキャメル2.10を使用しています。私のコンテキストには2つのルートがあります。ルート 1 は JPA エンドポイント (db テーブル) から消費し、(Bean で) いくつかの処理を行い、メッセージをルート 2 に転送します。処理中に何か問題が発生した場合、Bean は NULL を返します。

ルート 2 で最初にやりたいことは、(ルート 1 から転送された) 本文が NULL でないかどうかを確認することです。したがって、2 つの可能性が考えられます。1) ルート 2 で検証を使用する

<route id="route2">
...
<validate>
  <simple>${body} != null</simple>
</validate>

2)interceptSendToEndpoint を使用して、NULL メッセージがルート 2 att all に送信されるのを回避します。

<interceptSendToEndpoint uri="toRoute2" skipSendToOriginalEndpoint="true">
  <when><simple>${body} == null</simple></when>
  <transform>
    <constant>Error Message</constant>
  </transform>
  <to uri="direct:logError"/>
</interceptSendToEndpoint> 

より良い方法は何だと思いますか?

あなたの提案をありがとう!

BR マティアス

4

1 に答える 1

1

さて、それはインターフェースの問題です。

NULL ペイロードがエラーと見なされる場合は、代わりに例外をスローします。throw new RuntimeException("some error msg");通常は、 の代わりに 処理 Bean と を変更しますreturn null;。不可能な場合は、null を返す代わりに別の Bean スローで常に Bean をラップすることができます。または、基本的には 1 で行うことを行います。エラー ログなどを実行する場合は、通常のエラー ハンドラにも例外がフックされます。

インターセプトを使用すると非常に強力になる可能性がありますが、数年後にコードを再確認したときにルートがわかりにくくなります。このような単純なシナリオでは、少しやり過ぎです。

于 2012-11-12T21:03:40.103 に答える