[ 
https://issues.apache.org/jira/browse/CAMEL-25047?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Claus Ibsen updated CAMEL-25047:
--------------------------------
    Fix Version/s: 4.23.0

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

Reply via email to