文件组件的 [consumer.]bridgeErrorHandler 结合 startingDirectoryMustExist

File component's [consumer.]bridgeErrorHandler in conjunction with 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 尝试过,因为 according to the latest doc 似乎不再需要 consumer. 前缀。)

根据the doc of startingDirectoryMustExist

|   startingDirectoryMustExist   |   [...] Will thrown an exception if the directory doesn’t exist.   |

抛出以下异常:

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
...

但是,尽管 the doc and the description of [consumer.]bridgeErrorHandler 它会传播给调用者 ,即“exception text”和“process text”都不会被打印出来。

a unit test FileConsumerBridgeRouteExceptionHandlerTest that covers consumer.bridgeErrorHandler,所以我认为这基本上可行。难道 [consumer.]bridgeErrorHandler 不能与 startingDirectoryMustExist 抛出的异常结合使用?

我是否必须像 中提到的那样编写自己的 [consumer.]exceptionHandler

还有一个 post on the mailing list from 2014 报告与 startingDirectoryMustExistconsumer.bridgeErrorHandler 类似的行为。

更新

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

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

我找不到 bridgeErrorHandler 起作用的地方。

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

我是不是还漏掉了什么?

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

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