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
的日誌消息。駱駝只是停下來,但並沒有關閉。任何想法爲什麼?
嘿感謝@bgossit(+1) - 的作品!但是,我現在看到,在我打印異常後,駱駝並沒有關閉。有沒有辦法告訴駱駝關閉,如果拋出異常? – AdjustingForInflation
你的意思是關閉路線嗎?你可以用exchange.getContext()。stopRoute(「my-camel-route」)來做到這一點。 – bgossit