You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@camel.apache.org by "Claus Ibsen (Jira)" <ji...@apache.org> on 2026/09/28 20:46:00 UTC
[jira] [Updated] (CAMEL-25114) camel-core - doTry, doCatch and doFinally: fix bugs found in a deep review
[ https://issues.apache.org/jira/browse/CAMEL-25114?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Claus Ibsen updated CAMEL-25114:
--------------------------------
Fix Version/s: 4.23.0
> camel-core - doTry, doCatch and doFinally: fix bugs found in a deep review
> --------------------------------------------------------------------------
>
> Key: CAMEL-25114
> URL: https://issues.apache.org/jira/browse/CAMEL-25114
> Project: Camel
> Issue Type: Bug
> Components: camel-core
> Reporter: Claus Ibsen
> Assignee: Claus Ibsen
> Priority: Minor
> Fix For: 4.23.0
>
>
> A review of doTry, doCatch and doFinally found these bugs:
> # An exception from the onWhen predicate of a doCatch is not propagated and the exchange never completes (doFinally is not executed and a synchronous caller waits forever).
> # In the Java DSL, {{onWhen}} on a doCatch is set on every doCatch of the doTry (including the doCatch blocks of nested doTry blocks), so the onWhen of a later doCatch replaces the onWhen of the earlier doCatch blocks.
> # A nested doTry (or a doTry in a route called from a doTry) removes the try block marker ({{TryRouteBlock}}) when it completes, instead of restoring it. Steps after it in the outer doTry, such as recipientList, multicast and split, then use the route error handler (redelivery and dead letter channel), and the doCatch of the outer doTry is not used.
> # An exception thrown in doFinally while an earlier exception is not handled is lost. The original exception is now kept and the doFinally exception is added as suppressed.
> # The doFinally (also the implicit doFinally) removes the failure details ({{Exchange.FAILURE_ROUTE_ID}}, {{FAILURE_NODE_ID}}, {{FAILURE_ENDPOINT}}, {{FAILURE_LOCATION}}) of an earlier failure that happened before the doTry.
> # The check that a doTry must have one or more doCatch or doFinally blocks never fails (the list of catch clauses is never null), so a doTry without them is accepted, which silently turns off the route error handler for its steps. Such a doTry now fails to start.
> # A doCatch after a doCatch that already handled the exception still evaluates its onWhen and updates its counters.
> # The step id (CAMEL-23616) is not set on the doCatch and doFinally processors.
> The documentation now describes how doCatch matches an exception (clause order, differs from onException), that an exception that escapes a doTry is not handled by the route error handler, and that stop() skips doFinally.
> Not changed:
> * The circuit breaker processors (camel-resilience4j, camel-microprofile-fault-tolerance) also remove the TryRouteBlock marker instead of restoring it.
> * The model accepts doTry children in any order (such as steps after a doCatch).
> _Claude Code on behalf of Claus Ibsen_
--
This message was sent by Atlassian Jira
(v8.20.10#820010)