1 Reply Latest reply on May 24, 2011 11:34 AM by Alex Sokolov

    Exceptions are not caught

    Alex Sokolov Newbie

      Hi all,

      Working with 2 routes I got a strange problem:

      I stop first route if exception is thrown within it.

      When exception is thrown in second route it is not caught!

      Here is the unit test and appContext:


      \org\apache\camel\test\TestOnException.java -

      package org.apache.camel.test;


      import java.util.Date;

      import java.util.Timer;

      import java.util.TimerTask;


      import org.apache.camel.CamelContext;

      import org.apache.camel.CamelContextAware;

      import org.apache.camel.Consumer;

      import org.apache.camel.Exchange;

      import org.apache.camel.ProducerTemplate;

      import org.apache.camel.SuspendableService;

      import org.junit.Assert;

      import org.junit.Test;

      import org.springframework.context.support.ClassPathXmlApplicationContext;


      public class TestOnException {

           ClassPathXmlApplicationContext appcontext = new ClassPathXmlApplicationContext("

           CamelContext camel = appcontext.getBean(CamelContext.class);

           static boolean testPassed = false;



          public void test() throws Exception {

               ProducerTemplate template = camel.createProducerTemplate();

               template.sendBody("amq:two", "bbb");


               template.sendBody("amq:one", "aaa");





          public static class TestHelper implements CamelContextAware {


               CamelContext camelContext;

               public void logMessage(Exchange exchange) {

                    testPassed = true;

                    System.out.println("Log for: " + exchange.getExchangeId());



               public void suspendRoute(Exchange exchange) {

                  final String id = "second";

                  final Consumer consumer = camelContext.getRoute(id).getConsumer();

                  new Timer().schedule(new TimerTask() {


                      public void run() {

                          try {

                              ((SuspendableService) consumer).stop();//.suspend();

                              System.out.println("Route suspended: " + id);

                          } catch (Exception e) {

                               System.out.println("Camel consumer stop failed: " + e);



                  }, new Date(System.currentTimeMillis() - 1L));



               public void throwException(Exchange exchange) throws IllegalArgumentException {

                    throw new IllegalArgumentException("OOps! Some problem occurs!");




               public void setCamelContext(CamelContext camelContext) {

                    this.camelContext = camelContext;




               public CamelContext getCamelContext() {

                    return camelContext;





      /TestOnException.java -


      \org\apache\camel\test\appContext.xml -





      This test is passed if I suspend route instead of stopping and in case if I remove errorhandler from context.

      this problem was reproduced in Camel 2.7.0

      Could you please explain what is wrong?

      thank you.