camel-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Claus Ibsen (JIRA)" <>
Subject [jira] [Commented] (CAMEL-4117) RedeliverErrorHandler - Should make defensive copy of Exchange so redelivery works for using Processor
Date Sat, 18 Jun 2011 15:57:47 GMT


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


                // try to redeliver up till 3 times

                    .process(new Processor() {
                        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());
                            // mutate IN body
                            exchange.getIn().setBody("Bye World");

                            throw new IllegalArgumentException("Forced");

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


View raw message