[
https://issues.apache.org/jira/browse/CAMEL-4117?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13051543#comment-13051543
]
Claus Ibsen commented on CAMEL-4117:
------------------------------------
For example in the given route below. You would like the Exchange to be the
*same* for each of the redeliveries. Even if you alter the Exchange in the
.process code, and then *afterwards* and exception is thrown
{code}
// try to redeliver up till 3 times
errorHandler(defaultErrorHandler().maximumRedeliveries(3).redeliveryDelay(0));
from("direct:a")
.process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception
{
// should be same input body
assertEquals("Hello World",
exchange.getIn().getBody());
assertFalse("Should not have OUT",
exchange.hasOut());
assertNull(exchange.getException());
// mutate IN body
exchange.getIn().setBody("Bye World");
counter++;
throw new IllegalArgumentException("Forced");
}
});
{code}
So in this example you would expect that each redelivery contains the message
body "Hello World" despite you changed it in the .process code.
> RedeliverErrorHandler - Should make defensive copy of Exchange so redelivery
> works for using Processor
> ------------------------------------------------------------------------------------------------------
>
> Key: CAMEL-4117
> URL: https://issues.apache.org/jira/browse/CAMEL-4117
> Project: Camel
> Issue Type: Improvement
> Components: camel-core
> Affects Versions: 2.7.0
> Reporter: Claus Ibsen
> Assignee: Claus Ibsen
> Fix For: 2.8.0, 2.9.0
>
>
> When using redelivery with the Camel error handler, it will by default use
> the _previous_ exchange when redelivering. This ensures that any changes that
> was done by the failed attempt does not reflect when a redelivery is
> performed (eg think like use original message). However this does not apply
> when end users uses the low level .process in their Camel routes. So if they
> change the Exchange in the .process and then some error occurs, then that
> change is redelivered.
> We should consider making the redelivery error handler do a defensive copy of
> the exchange, so it can redelivery without any changes/side effects. For
> example this happens when people use .bean or any of the other EIPs. So why
> not for .process as well?
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira