骆驼Spring DSL onException完全不触发

时间:2019-03-08 10:01:12

标签: exception apache-camel

我正在使用Camel DSL Spring路由,如下所示。
如您所见,我想转换一个xls文件,如果发生异常,我需要记录一个错误并将文件移动到特定的文件夹中。
似乎这些步骤都没有发生,我只是在转换文件时遇到了一个异常,并且得到了moveFailed的“文件”组件。 我怀疑异常机制不会转置已处理的标志,然后异常返回给调用者(文件comp),并且继续移动。

如何在异常情况下执行onException机制

<route>
        <from uri="file:C:/Users/Administrator/Desktop/HB_DATA/mov?delay=1000&amp;move=../mov_done&amp;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>

1 个答案:

答案 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