Apache Camel路由:发生异常时未达到onCompletion?

时间:2016-07-19 15:29:19

标签: java apache-camel

我有一个类似下面的Camel路线。如果所有记录都成功解析,那么我会从onCompletion步骤收到一封电子邮件。如果一条记录获得异常,则其余记录将处理,这很好,但是onCompletion步骤不会触发。

我想要的是即使有错误也要运行onCompletion步骤,并且能够发送一条消息“路由已完成但有错误”。我怎么能这样做?

        <route id="route1">
            <from uri="file://C:/TEMP/load?noop=true&amp;idempotentRepository=#sysoutStore&amp;sorter=#externalDataFilesSorter"/>
            <choice>
                <when>
                    <simple>${file:name} regex '*file.*.(txt)'</simple>
                    <to uri="direct:RouteFile" />
               </when>
            </choice>      
        </route>

        <route id="testRouteDirect">
            <from uri="direct:RouteFile" />
                <onException>
                    <exception>java.lang.IllegalArgumentException</exception>
                    <redeliveryPolicy maximumRedeliveries="1" />
                    <handled>
                        <constant>true</constant>
                     </handled>
                    <to uri="log:java.lang.IllegalArgumentException"></to>
                </onException> 
                <onException>
                    <exception>java.text.ParseException</exception>
                    <redeliveryPolicy maximumRedeliveries="1" />
                    <handled>
                        <constant>true</constant>
                     </handled>
                    <to uri="log:java.text.ParseException"></to>
                </onException> 
                <split parallelProcessing="false" strategyRef="exchangePropertiesAggregatorStrategy" >
                    <tokenize token="\r\n"/>
                    <to uri="log:Record"></to>
                </split>
              <onCompletion>
                    <to uri="log:completion"></to> 
                    <to uri="smtp://mail.com?contentType=text/html&amp;to=done@test.com&amp;from=route@test.com&amp;subject=we're done" />
              </onCompletion>
        </route>

2 个答案:

答案 0 :(得分:1)

您的路线中最好的部分是,您的路线中的onException with handling = true。所以将你的onCompletion移动到父路由(route1),它应该工作!

答案 1 :(得分:0)

在骆驼网站上有一堆与oncompletion相关的门票:Camel Jira URL。我升级到更新版本的驼峰&amp;我不再理解这个问题了。