我正在使用Camel DSL Spring路由,如下所示。
如您所见,我想转换一个xls
文件,如果发生异常,我需要记录一个错误并将文件移动到特定的文件夹中。
似乎这些步骤都没有发生,我只是在转换文件时遇到了一个异常,并且得到了moveFailed
的“文件”组件。
我怀疑异常机制不会转置已处理的标志,然后异常返回给调用者(文件comp),并且继续移动。
如何在异常情况下执行onException
机制
<route>
<from uri="file:C:/Users/Administrator/Desktop/HB_DATA/mov?delay=1000&move=../mov_done&moveFailed=../mov_fail"/>
<process ref="processor"/>
<to uri="bean:excelConverter"/>
<onException>
<exception >org.savino.hb.dataprovider.DataProviderException</exception>
<handled>
<constant>true</constant>
</handled>
<log loggingLevel="ERROR" message="HEY I GOT AN EXCEPTION" />
<to uri="file:C:/Users/Administrator/Desktop/HB_DATA/mov_fail?fileName={header.X_UID}"/>
<process ref="processorEx"/>
</onException>
<to uri="bean:finish"/>
</route>
答案 0 :(得分:1)
<onException>
必须先行要急于错误运行的代码。
在您的特定情况下,只需将异常处理移至“ from”之后即可,例如:
<route>
<from uri="..."/>
<!-- Exception handling -->
<onException>
<exception>org.savino.hb.dataprovider.DataProviderException</exception>
<handled>
<constant>true</constant>
</handled>
<log loggingLevel="ERROR" message="HEY I GOT AN EXCEPTION" />
<onException>
<!-- The route definition -->
<process ref="processor"/>
<to uri="bean:excelConverter"/>
<to uri="file:..."/>
<to uri="bean:finish"/>
</route>
尝试捕获是一种可能(更自然)的选择: http://people.apache.org/~dkulp/camel/try-catch-finally.html