7

ルートからすべての例外をキャッチしたい。

この OnException を追加します。

onException(Exception.class).process(new MyFunctionFailureHandler()).stop();

次に、クラス MyFunctionFailureHandler を作成します。

public class MyFunctionFailureHandler  implements Processor {

@Override
public void process(Exchange exchange) throws Exception {
    Throwable caused;

    caused = exchange.getProperty(Exchange.EXCEPTION_CAUGHT, Throwable.class);

    exchange.getContext().createProducerTemplate().send("mock:myerror", exchange);
   }

}

残念ながら、それは機能しません。その理由はわかりません。

例外が発生した場合、プログラムは停止する必要があります。

このコードが機能しない理由をどうやって知ることができますか!!

ありがとう。

4

2 に答える 2

4

私は自分のルートでこれを使用しました:

public class MyCamelRoute extends RouteBuilder {

   @Override
   public void configure() throws Exception {

        from("jms:start")
           .process(testExcpProcessor)

       // -- Handle Exceptions
       .onException(Exception.class)
         .process(errorProcessor)
         .handled(true)

       .to("jms:start");
   }
}

そして私のエラーでProcessor

public class ErrorProcessor implements Processor {

  @Override
  public void process(Exchange exchange) throws Exception {


    Exception cause = exchange.getProperty(Exchange.EXCEPTION_CAUGHT, Exception.class);

    if(cause != null){
        log.error("Error has occurred: ", cause);

        // Sending Error message to client
        exchange.getOut().setBody("Error");
    }else

        // Sending response message to client
        exchange.getOut().setBody("Good");
  }
}

役立つことを願っています

于 2014-05-29T09:03:58.883 に答える
0

複数の RouteBuilder クラスにルートがある場合、このルート内に onExcpetion があると、この RouteBuilder の下のすべてのルートのみに影響することに注意してください。

この回答を確認してください

さらに、ルート内で例外が発生し、このルート内で処理された場合、元の呼び出し元ルートには伝播されません。つまりfrom(direct:start).errorHandler(noErrorHandler())、例外処理を呼び出し元に伝播するには、 noErrorHandler() を使用する必要があります。

于 2013-01-22T14:49:42.697 に答える