我使用 Spring DSL 定义了以下路由:
<camelContext id="myapp-camel-ctx" errorHandlerRef="deadLetterErrorHandler"
xmlns="http://camel.apache.org/schema/spring">
<route id="myapp-camel-route">
<from uri="timer://runOnce?repeatCount=1&delay=10" />
<to uri="bean:fizzBean?method=doFizz" />
<!-- What I call the "Smooks processor" -->
<to uri="smooks://my-smooks-config.xml" />
<to uri="bean:buzzBean?method=doBuzz" />
</route>
</camelContext>
<bean id="deadLetterErrorHandler" class="org.apache.camel.builder.DeadLetterChannelBuilder">
<property name="deadLetterUri" value="bean:errorCatcher" />
</bean>
<bean id="errorCatcher" class="com.me.myorg.myapp.ErrorCatcher">
<property name="foo" value="BAR" />
</bean>
有时,根据 的输出(出站消息)fizzBean
,Smooks 处理器会抛出异常并挂起整个应用程序。当它这样做时,我可以在应用程序日志中看到抛出的异常(它实际上是一个 MySQL 异常),但不知道如何包装/捕获它并继续处理。我认为,鉴于ErrorCatcher
上面的设置,抛出的 MySQL 异常将被处理,并且路由将继续处理。相反,我从来没有在我的应用程序日志中看到ErrorCatcher#handle
当这些 Smooks/MySQL 异常被抛出时该方法被执行的证据。
我在这里配置了什么不正确吗?我还能做些什么(通过 Smooks 处理器的 URI 配置或其他方式)来防止从该处理器内部引发的异常挂起整个应用程序?提前致谢!