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

Claus Ibsen reassigned CAMEL-24981:
-----------------------------------

    Assignee: Claus Ibsen

> camel-core - Error handler keeps the onException of an earlier redelivery 
> attempt when the exception type changes
> -----------------------------------------------------------------------------------------------------------------
>
>                 Key: CAMEL-24981
>                 URL: https://issues.apache.org/jira/browse/CAMEL-24981
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-core
>            Reporter: Claus Ibsen
>            Assignee: Claus Ibsen
>            Priority: Minor
>
> If the exception changes type between redelivery attempts, the error handler 
> keeps using the onException settings chosen for the first exception.
> h3. Reproducer
> {code:java}
> errorHandler(deadLetterChannel("mock:dead"));
> onException(IOException.class).maximumRedeliveries(1).handled(true).to("mock:io");
> from("direct:b").process(e -> {
>     if (attempt.getAndIncrement() == 0) {
>         throw new IOException("first");
>     }
>     throw new IllegalArgumentException("second");
> });
> {code}
> The first attempt fails with IOException and is redelivered. The redelivery 
> fails with IllegalArgumentException, which no onException matches, so it 
> should go to the dead letter channel. Instead it is routed to mock:io and 
> marked handled by the IOException onException.
> h3. Cause
> RedeliveryErrorHandler.RedeliveryTask.handleException only overwrites the 
> failure processor, handled/continued/retryWhile predicates, 
> useOriginalMessage/Body, onRedelivery/onExceptionOccurred processors and 
> redelivery policy when an exception policy matches. It never resets them to 
> the error handler defaults first, so values from an earlier attempt's policy 
> carry over. The redelivery policy is also derived from the previous attempt's 
> derived policy instead of the error handler's own policy. This behaviour 
> dates from 2009, and nothing in history or JIRA says it was intended.
> h3. Fix
> Reset the per-attempt state to the error handler defaults before applying the 
> policy that matches the current exception.
> _Claude Code on behalf of Claus Ibsen_



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to