Claus Ibsen created CAMEL-24981:
-----------------------------------

             Summary: 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


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