文件组件的 [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 报告与 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()
方法上设置断点并不止于其中任何一个。
我是不是还漏掉了什么?
您应该改用 directoryMustExist
选项,这样您就可以在轮询期间出现错误,这是触发网桥错误处理程序的地方。 startingDirectoryMustExist
选项在创建消费者期间检查,因此在轮询之前以及桥接错误处理程序运行的位置检查。
另见 JIRA 票证:https://issues.apache.org/jira/browse/CAMEL-13174
我有一条路线(使用 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 报告与 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()
方法上设置断点并不止于其中任何一个。
我是不是还漏掉了什么?
您应该改用 directoryMustExist
选项,这样您就可以在轮询期间出现错误,这是触发网桥错误处理程序的地方。 startingDirectoryMustExist
选项在创建消费者期间检查,因此在轮询之前以及桥接错误处理程序运行的位置检查。
另见 JIRA 票证:https://issues.apache.org/jira/browse/CAMEL-13174