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)?

Спасибо


person Yamahar1sp    schedule 16.12.2014    source источник
comment
Какую версию Camel вы используете?   -  person Claus Ibsen    schedule 17.12.2014
comment
Привет Клаус. Извините, это моя ошибка. 2.10.0.redhat-60024   -  person Yamahar1sp    schedule 17.12.2014


Ответы (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);
person Claus Ibsen    schedule 17.12.2014
comment
Опасения оправдались :) Да, я удаляю CamelErrorHandlerHandled и все работает (мне плевать на сбои, не использовать остановку маршрута и нужно поймать исключение). Клаус, спасибо за отличную поддержку продукта, которую вы предоставляете. - person Yamahar1sp; 17.12.2014