2017-11-30 22 views
2
.from("seda:rest_upload") 
       .process(new Processor() { 
        @Override 
        public void process(Exchange exchange) { 
         if(true){ 
          throw new RuntimeException(); 
         }}) 
       .to("seda:parsed_csv") 
       .onException(Exception.class).process(new Processor() { 
      @Override 
      public void process(Exchange exchange) throws Exception { 
       logger.warn("Error"); 
      } 
     }); 

しかし、logger.warn("Error");は呼び出されませんでした。キャメルが例外をキャッチしない

どうしますか?

ラクラクのルートにグローバル例外ハンドラを登録するにはどうすればよいですか?

答えて

3

ルートの上にonExceptionブロックを移動し、end()ターミネーターを忘れないでください。

end()は、onExceptionブロックが終了するCamelに伝えます。もしそれが間違っていれば、キャメルはそれをブロックonExceptionと扱います。 onException()の後のすべてがonExceptionブロックの一部になるため、単にセダからのルートと出力プロセッサなしのルートがあります。


ルート固有の例外処理: ハンドル例外はルートに取り扱いseda:rest_upload

from("seda:rest_upload") 
    .onException(Exception.class).process(exchange -> logger.warn("Error")).end() 
    .process(e -> {throw new RuntimeException();}) 
    .to("seda:parsed_csv"); 

from("seda:parsed_csv").to("log:parsed_csv"); 

from("timer:tmr?period=1000") 
    .setBody(constant("mock")) 
    .to("seda:rest_upload"); 

グローバル例外が発生しました:現在RouteBuilder

にすべてのルートで例外を処理10
+0

seda:rest_uploadの前にスローされる例外をキャッチしますか?私はグローバルハンドラを持っていたい。 * end()*を使用しない場合はどうなりますか? – gstackoverflow

+0

@gstackoverflow編集を参照してください – Bedla

関連する問題