У меня есть три "уровня" маршрутов:
- direct: начало - это простой маршрут, который "вызывает" direct: middle
- direct: middle имеет многоадресную / параллельную обработку, вызываядва других
- два других маршрута (на третьем уровне) оба генерируют исключения
Этот пример заставляет эти два маршрута самого низкого уровня генерировать исключения.При кодировании, как показано ниже, я вижу два исключения (напечатано, как показано в onException ())
public void configure() throws Exception {
onException().handled(true).log(" --------------- Exception!! -------------------------");
from("direct:start")
.log("Actual start ")
.inOut("direct:middle")
.log(" --------------- Caught Exception -------------------------")
.log("Actual End ");
from("direct:middle")
//.errorHandler(noErrorHandler())
.log("after direct:start body=${body}")
.multicast(new MyAggregationStrategy()).parallelProcessing().stopOnException()
.to("direct:A")
.to("direct:B")
.end();
from("direct:A").errorHandler(noErrorHandler()).process(new ExceptionThrower());
from("direct:B").errorHandler(noErrorHandler()).process(new ExceptionThrower());
}
I UN -прокомментировал noErrorHandler () в "direct: middle", полагая, что он все еще может запускать onException (), но только с одним исключением.Вместо этого он действовал так, как будто не было никакого onException (), указанного в RouteBuilder, отбрасывая Исключение полностью назад к вызывающей стороне.
Мне интересно понять, почему это происходит.Я попытался использовать doTry () ... doCatch () во внешнем маршруте, и это, похоже, сработало, но я не уверен, почему другой подход не работает.