Hello.

I'm trying to store redelivery policies in separate spring context.

Here context files that I'm using to test my approach:

main-context.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"; 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
    xmlns:camel="http://camel.apache.org/schema/spring"; 
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
        http://camel.apache.org/schema/spring
http://camel.apache.org/schema/spring/camel-spring.xsd";>
    <camel:camelContext id="camelContext" trace="true">
        <camel:route id="main" errorHandlerRef="defaultErrorHandler">
            <camel:from ref="input" />
            <camel:onException redeliveryPolicyRef="redeliveryPolicy"
onRedeliveryRef="onRedeliveryBean">
                <camel:exception>java.lang.Exception</camel:exception>
                
               
<camel:handled><camel:constant>true</camel:constant></camel:handled>
            </camel:onException>
            <camel:bean ref="exceptionThrowingBean" />
            <camel:to ref="output" />
        </camel:route>
    </camel:camelContext>
</beans>

test-policies-context.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans";
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
    xmlns:camel="http://camel.apache.org/schema/spring";
    xsi:schemaLocation="
            http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
            http://camel.apache.org/schema/spring
http://camel.apache.org/schema/spring/camel-spring.xsd";>
    <camel:endpoint id="input" uri="direct:input" />
    <camel:endpoint id="output" uri="mock:output" />
    <camel:redeliveryPolicyProfile id="redeliveryPolicy"
maximumRedeliveries="5" disableRedelivery="false" />
    <camel:errorHandler id="defaultErrorHandler" type="DeadLetterChannel"
deadLetterUri="mock:deadLetterChannel" />
    <bean id="onRedeliveryBean"
class="RedeliveryPoliciesTest.OnRedeliveryBean" />
    <bean id="exceptionThrowingBean"
class="RedeliveryPoliciesTest.ExceptionThrowingBean" />
</beans>

Test class:
public class RedeliveryPoliciesTest extends CamelSpringTestSupport {
    public static class ExceptionThrowingBean implements Processor {
        public void process(Exchange exchange) throws Exception {
            throw new Exception("RedeliveryPoliciesTest");
        }
    }

    public static class OnRedeliveryBean implements Processor {
        private Counter counter;

        public void setCounter(Counter counter) {
            this.counter = counter;
        }

        public void process(Exchange exchange) throws Exception {
            counter.inc();
        }
    }

    public static interface Counter {
        void inc();
    }

    protected AbstractApplicationContext createApplicationContext() {
        return new ClassPathXmlApplicationContext("main-context.xml",
"test-policies-context.xml");
    }

    @Test
    public void testEnsureTharRedeliveryPolicyIsWorking() {
        Counter counter = Mockito.mock(Counter.class);
        getMandatoryBean(OnRedeliveryBean.class,
"onRedeliveryBean").setCounter(counter);
        template.sendBody("direct:input", new Object());
        Mockito.verify(counter, Mockito.times(5)).inc();
    }
}

If I run this test it fail with:
java.lang.IllegalArgumentException: Defensive copy of Exchange is null must
be specified on:

If I uncomment  it starts to work.
Is it correct behaviour?

I'm using camel 2.8.0.


--
View this message in context: 
http://camel.465427.n5.nabble.com/redeliveryPolicyProfile-and-onException-redeliveryPolicyRef-tp4738408p4738408.html
Sent from the Camel - Users mailing list archive at Nabble.com.

Reply via email to