[ 
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

        

Reply via email to