[
https://issues.apache.org/jira/browse/CAMEL-25047?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Claus Ibsen resolved CAMEL-25047.
---------------------------------
Resolution: Fixed
Merged to main in https://github.com/apache/camel/pull/26928
(c10aa0cc60dd8758441caea86ad58915c9ad9f6a).
_Claude Code on behalf of davsclaus_
> camel-core - Reifiers and error handler: fix bugs found in a deep review
> ------------------------------------------------------------------------
>
> Key: CAMEL-25047
> URL: https://issues.apache.org/jira/browse/CAMEL-25047
> Project: Camel
> Issue Type: Bug
> Components: camel-core
> Reporter: Claus Ibsen
> Assignee: Claus Ibsen
> Priority: Major
> Fix For: 4.23.0
>
>
> A deep review of the reifiers in camel-core-reifier (route, error handler,
> onException and the EIP reifiers) found the bugs below. Each one was
> reproduced against 4.23.0-SNAPSHOT and has a test that fails without the fix.
> # *onException useOriginalBody fails unless allowUseOriginalMessage is turned
> on.* The reifier turns on allowUseOriginalMessage for useOriginalMessage but
> not for useOriginalBody, so the exchange failed with "AllowUseOriginalMessage
> is disabled".
> # *The redelivery options of an onException reset the error handler's options
> to the defaults.* When an onException sets any redelivery option (such as
> maximumRedeliveries), every option it does not set was filled in with the
> model default (redeliveryDelay 1000, logStackTrace true, ...) instead of
> being inherited from the error handler. So
> errorHandler(defaultErrorHandler().redeliveryDelay(0)) with
> onException(...).maximumRedeliveries(3) waited 1 second per redelivery. The
> defaults were added in Camel 3.17 when the error handler became part of the
> model; the error handler itself never used them.
> # *logName of defaultErrorHandler and deadLetterChannel is ignored.* No
> reifier read it, so the XML/YAML logName attribute did nothing.
> # *A disabled multicast or pipeline with a single output still runs.* With
> one output the processor is that output's channel, where the disabled flag is
> not checked at runtime.
> # *An error handler with an unknown executorServiceRef fails with
> NullPointerException* instead of "ExecutorService x not found in registry".
> The deadLetterChannel also did not resolve a placeholder in the ref.
> # *Property placeholders are not resolved in the executorService of delay and
> throttle*, while split, multicast and others resolve them.
> # *Property placeholders are not resolved in aggregationStrategyMethodName of
> split, enrich, pollEnrich, aggregate and claimCheck*, while multicast and
> recipient list resolve them. The retryWhileRef of the deadLetterChannel was
> not resolved either.
> *Not changed (for a later look)*
> * interceptSendToEndpoint: the intercepted route id and from uri come from
> the first route that registered the intercept, and the callbacks of the other
> routes are never removed.
> * The load balancer and its children do not get ids and route ids, so
> context.getProcessor(id) does not find them.
> * doTry without doCatch or doFinally is accepted (the null check on the catch
> list is dead).
> * threads keepAliveTime is parsed as a duration (milliseconds) but used with
> timeUnit (seconds by default).
> _Claude Code on behalf of Claus Ibsen_
--
This message was sent by Atlassian Jira
(v8.20.10#820010)