首页 > 解决方案 > 文件组件的 [consumer.]bridgeErrorHandler 与 startingDirectoryMustExist 结合使用

问题描述

我有一条路线(使用 Camel 2.23.1),例如:

from("file://not.existing.dir?autoCreate=false&startingDirectoryMustExist=true&consumer.bridgeErrorHandler=true")

    .onException(Exception.class)
    .handled(true)
    .log(LoggingLevel.ERROR, "...exception text...")
    .end()

    .log(LoggingLevel.INFO, "...process text...")

    ...

(我也试过&bridgeErrorHandler了,因为根据最新的文档consumer.前缀似乎不再需要了。)

根据文档startingDirectoryMustExist

|   起始目录必须存在   | [...] 如果目录不存在,将引发异常。|

抛出以下异常:

org.apache.camel.FailedToCreateRouteException: Failed to create route route1:
  Route(route1)[[From[file://not.existing.dir?autoCreate=false...
  because of Starting directory does not exist: not.existing.dir
...

但是,尽管文档和它的描述被[consumer.]bridgeErrorHandler 传播给调用者,即既没有“ exception text”也没有“ process text”被打印。

有一个涵盖的单元测试FileConsumerBridgeRouteExceptionHandlerTestconsumer.bridgeErrorHandler,所以我认为这基本上可以工作。难道它[consumer.]bridgeErrorHandler不能与抛出的异常一起工作startingDirectoryMustExist吗?

我是否必须按照“消费目录不存在时骆驼-停止路线”的答案[consumer.]exceptionHandler中提到的那样编写自己的?

2014 年的邮件列表中还有一篇文章报告了与startingDirectoryMustExist和类似的行为consumer.bridgeErrorHandler

更新

通过代码进行跟踪和调试后,我发现异常传播如下:

FileEndpoint.createConsumer()
  throw new FileNotFoundException(...);
--> RouteService.warmUp()
      throw new FailedToCreateRouteException(...)
    --> DefaultCamelContext.doStart()
          (re)throw e
        --> ServiceSupport.start()
              (re)throw e          

我找不到任何bridgeErrorHandler发挥作用的地方。

BridgeExceptionHandlerToErrorHandler在的构造函数及其所有方法上设置断点handleException()并不会在其中任何一个处停止。

我还缺少什么吗?

标签: exception-handlingapache-camel

解决方案


您应该改用该directoryMustExist选项,然后在轮询期间可能会出现错误,这是可以触发桥接错误处理程序的地方。在创建消费者期间检查该startingDirectoryMustExist选项,因此在轮询之前以及桥接错误处理程序的操作位置。

另请参阅 JIRA 票证:https ://issues.apache.org/jira/browse/CAMEL-13174


推荐阅读