2

複数のルート間で例外を処理するときにいくつかの問題があります。

Java開発者の観点から、いくつかの共通ロジックを共通ルートに抽出して、他のルートがどこにでも共通ロジックを含まずに共通ルートを直接呼び出すことができるようにしたいと考えています.(ルートバージョン関数呼び出しのように)しかし、エラーになると扱いは、ちょっと難しいと思いました。

例えば:

//main logic 1
from("direct:route1")
  .doTry()
     .to("direct:common")
  .doCatch(Exception.class)
     .log("Error in route1")
  .end()

//main logic 2
from("direct:route2")
  .doTry()
     .to("direct:common")
  .doCatch(Exception.class)
     .log("Error in route2")
  .end()

//common logic
from("direct:common")
   .to("mock:commonlogic")

問題は、「mock:commonlogic」エンドポイントから例外がスローされた場合、その例外が route1 と route2 の両方で定義された doTry...doCatch ブロックによってキャッチされないことです。例外は共通ルートスコープで処理できるようです。しかし、私が望むのは、共通ルートが例外を「スロー」し、「呼び出し元」ルートがそれをすべて単独で処理することです。それを行う方法はありますか?

ありがとう

4

2 に答える 2

4

共通ルートでエラー処理を無効にする必要があります。次に、共通ルートからスローされた例外はエラー ハンドラによって処理されず、try .. catch ブロックを持つ呼び出し元ルートに伝播されます。

from("direct:common")
   .errorHandler(noErrorHandler())
   .to("mock:commonlogic")
于 2012-05-25T04:17:05.293 に答える
0

例外句を使用することもできます。 http://camel.apache.org/exception-clause.html

このように(ルートビルダーのconfigureメソッドで)

// A common error handler for all exceptions. You could also write onException statements for explicit exception types to handle different errors different ways.
onException(Exception.class).to("log:something"); 

from("direct:route1")...;

from("direct:route2")...;

それはあなたのためにトリックをするはずです。

onException は、現在のルート ビルダーに対してグローバルになります。

于 2012-05-24T10:13:07.200 に答える