我阅读了相应的文档,但我无法弄清楚为什么我的异常没有被捕获。
这是我的路线配置:
twig:
form_themes:
- 'MyAppBundle:form:my_form_theme.html.twig'
现在当JettyClient无法访问时,会抛出 <route id="foo">
<from uri="vm://.../>
<doTry>
<to uri="jetty:http://127.0.0.1:123/foo?restletMethod=PUT"/>
<to uri="ejb:java:global/..?method=method1(${body}, ${headers})"/>
<to uri="ejb:java:global/..?method=method2(${body}, ${headers})"/>
<doCatch>
<exception>java.lang.Exception</exception>
<transform>
<simple> ${exception.message} </simple>
</transform>
<to uri="smtp://... />
</doCatch>
</doTry>
</route>
,
路线终止,我收到一封电子邮件。这是理想的行为。
但是当org.apache.camel.CamelExchangeException
抛出异常时它没有被捕获,因此路由继续并且
我没有收到电子邮件。
如何让驼峰识别并处理第二种情况中的异常?
解决方案:确保在try-catch块中没有抛出异常-.-
答案 0 :(得分:0)
这在文档中说明: http://camel.apache.org/try-catch-finally.html
禁用Camel错误处理
当使用doTry .. doCatch .. doFinally然后是常规的Camel错误 处理程序不适用。这意味着任何onException或喜欢的 不要触发。原因是doTry .. doCatch .. doFinally是 事实上它自己的错误处理程序,它的目的是模仿和工作如何 try / catch /终于在Java中工作。
你最好这样写:
.doCatch(Exception.class)
// and catch all other exceptions
// they are handled by default (ie handled = true)
.to("direct:error")
直接:错误您可以指定在出现问题时该怎么做。