onException и onCompletion вместе в маршруте RouteBuilder
Я хотел бы использовать OnException и OnComplition вместе в одном маршруте (Camel версия 2.10.0.redhat-60024):
from("direct:camelTestEndpoint").
onCompletion().
log("onCompletion1").
log("onCompletion2").
log("onCompletion3").
end().
onException(Throwable.class).
handled(true).
log("onException").
end().
log("route")
.throwException(new RuntimeException());
Хотя это не работает, как я ожидаю. Исключение в основном маршруте вызывает остановку маршрута onComplition после первого процессора (это обрабатывается в методе continueProcessing() PipelineHelper). Верблюд проверяет, было ли обработано исключение, и если да, останавливает обработку.
Выход:
route
onException
onCompletion1
Есть ли я мягкий способ сказать верблюду, что он должен пропустить это (без удаления свойства "CamelErrorHandlerHandled")?
Спасибо
1 ответ
Это ошибка в этой версии Camel.
Это было исправлено CAMEL-7707.
В качестве обходного пути вам нужно будет вручную удалить эти детали из обмена в первом процессе в завершении onCompletion, которое вы делаете.
Например что-то вроде
// must remember some properties which we cannot use during onCompletion processing
// as otherwise we may cause issues
Object stop = exchange.removeProperty(Exchange.ROUTE_STOP);
Object failureHandled = exchange.removeProperty(Exchange.FAILURE_HANDLED);
Object caught = exchange.removeProperty(Exchange.EXCEPTION_CAUGHT);
Object errorhandlerHandled = exchange.removeProperty(Exchange.ERRORHANDLER_HANDLED);
//STEP1: call Successful Route
from("direct:Route_OnCompletion_OnSuccess")
.onCompletion()
.onCompleteOnly()
.log("On Complete Passed")
.to("direct:Route_OnSuccess")
.end()
.to("direct:Route_OnCompletion_OnFailure");
//STEP2: call Failure Route
from("direct:Route_OnCompletion_OnFailure")
.onCompletion()
.onFailureOnly()
.log("On Complete Failed "+ body())
.to("direct:Route_OnFailure")
.end()
.to("direct:Route_MainFlow");