0

OnException と OnComplition を 1 つのルートで一緒に使用したい (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 ルートが停止します (PipelineHelper の continueProcessing() メソッドで処理されます)。Camel は例外が処理されたかどうかをチェックし、処理された場合は処理を停止します。

出力:

route
onException
onCompletion1

これをスキップする必要があるとラクダに言う穏やかな方法はありますか (「CamelErrorHandlerHandled」プロパティを削除せずに)?

ありがとう

4

2 に答える 2

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);
于 2014-12-17T10:52:24.470 に答える