2014-01-29 74 views
0

我有以下的駱駝航線/ Spring的XML配置:駱駝errorHandlerRef不處理異常

<camelContext id="my-camel-context" errorHandlerRef="deadLetterErrorHandler" xmlns="http://camel.apache.org/schema/spring"> 
    <route id="my-camel-route"> 
     <from uri="file:///home/myuser/start?include=input_.*xml&sendEmptyMessageWhenIdle=true&delay=6000000"/> 

     <to uri="loggingBean?method=log" /> 
    </route> 
</camelContext> 

<bean id="deadLetterErrorHandler" class="org.apache.camel.builder.DeadLetterChannelBuilder"> 
    <property name="deadLetterUri" value="bean:errorHandler" /> 
</bean> 

<bean id="loggingBean" class="com.me.myapp.LoggingBean" /> 

<bean id="errorHandler" class="com.my.myapp.ErrorHandler" /> 

而下面loggingBean

public class LoggingBean { 
    public void log(Exchange exchange) { 
     System.out.println("About to throw exception..."); 
     boolean b = true; 
     if(b) 
      throw new IllegalArgumentException("Bad code!"); 
    } 
} 

而下面errorHandler

public class ErrorHandler implements Processor { 
    public ErrorHandler() { 
     super(); 
    } 

    @Override 
    public void process(Exchange exchange) { 
     Exception exception = exchange.getException();  
     System.out.println("Just received exception of type " + exception.getClass().getName() + "."); 
    } 
} 

當我運行這段代碼時,我得到了「關於拋出異常...「來自loggingBean的日誌消息,但沒有來自errorHandler的日誌消息。駱駝只是停下來,但並沒有關閉。任何想法爲什麼?

回答

1

您的處理程序中的異常對象可能爲null,從而導致NPE。要獲得捕獲的異常,你可以使用:

Exception exception = exchange.getProperty(Exchange.EXCEPTION_CAUGHT, Exception.class);

+0

嘿感謝@bgossit(+1) - 的作品!但是,我現在看到,在我打印異常後,駱駝並沒有關閉。有沒有辦法告訴駱駝關閉,如果拋出異常? – AdjustingForInflation

+1

你的意思是關閉路線嗎?你可以用exchange.getContext()。stopRoute(「my-camel-route」)來做到這一點。 – bgossit