Apache camel Apache Camel-未捕获异常
我阅读了相应的文档,但是我不明白为什么我的异常没有被捕获 这是我的路线配置:Apache camel Apache Camel-未捕获异常,apache-camel,Apache Camel,我阅读了相应的文档,但是我不明白为什么我的异常没有被捕获 这是我的路线配置: <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}, ${
<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>
现在,当无法访问JettyClient时,将抛出org.apache.camel.camelException
,
路由终止,我收到一封电子邮件。这是理想的行为
但是当method1
抛出异常时,它不会被捕获,因此路由将继续并
我没有收到电子邮件
在第二种情况下,我如何让camel识别并处理异常
解决方案:确保在try-catch块中未引发异常-。-文档中说明了这一点: 骆驼错误处理已禁用 使用doTry时。。记录。。最后是常规的驼峰错误 处理程序不适用。这意味着任何一个例外或类似的情况都会发生 不触发。原因是多特里。。记录。。他终于进来了 事实上,它有自己的错误处理程序,它的目标是模仿和工作方式 try/catch/finally在Java中工作 你最好这样写:
.doCatch(Exception.class)
// and catch all other exceptions
// they are handled by default (ie handled = true)
.to("direct:error")
在direct(直接):error(错误)中,您可以指定发生错误时应采取的措施。您是否认为舒尔method1会引发异常?如果您没有明确捕获异常,camel将在DefaultErrorHandler中捕获它,因此路由终止。是的,它会抛出异常。您是否认为调用了方法中的代码?因为您的
uri
是错误的,请尝试以下操作:
我不知道camel为什么以这个开头。是的,调用了该方法。只是问题中的一个输入错误..有没有办法在我上面的xml结构中配置它?顺便问一下,方法1中引发了什么异常?您可以共享方法1的代码吗?因为我已经完成了相同的过程,异常被捕获,所以一定发生了其他事情。在方法中没有嵌套在try-catch中的任何其他内容?GNARF!就这样!方法中有一个尝试捕获…-谢谢是的,这是一个经典;)