[Customer.] BridgeErrorHandler компонента файла в сочетании с startDirectoryMustExist - PullRequest
0 голосов
/ 04 февраля 2019

У меня есть маршрут (с верблюдом 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:

| initialDirectoryMustExist |[...] Будет сгенерировано исключение, если каталог не существует.|

выдается следующее исключение:

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" не печатаются.

Существует модульный тест FileConsumerBridgeRouteExceptionHandlerTest, который охватывает consumer.bridgeErrorHandler, так что я думаю, что это работает в принципе.Может ли быть так, что [consumer.]bridgeErrorHandler не работает в сочетании с исключением, выданным startingDirectoryMustExist?

Должен ли я написать свой собственный [consumer.]exceptionHandler, как упомянуто в этом ответе на " Camel - остановка маршрута, когда каталог-потребитель не существует"?

В списке рассылки 2014 также есть запись , сообщающая о сходном поведении с startingDirectoryMustExist иconsumer.bridgeErrorHandler.

ОБНОВЛЕНИЕ

После TRACEing и отладки с помощью кода я обнаружил, что исключение распространяется следующим образом:

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

Я не смог найти точку, где bridgeErrorHandlerвступает в игру.

Установка точек останова на конструкторе BridgeExceptionHandlerToErrorHandler и всех его handleException() методах не останавливается ни на одном из них.

Я естьвсе еще чего-то не хватает?

1 Ответ

0 голосов
/ 11 февраля 2019

Вместо этого следует использовать параметр directoryMustExist, тогда вы можете иметь ошибку во время опроса, где может быть запущен обработчик ошибок моста.Параметр startingDirectoryMustExist проверяется при создании получателя и, следовательно, перед опросом и там, где работает обработчик ошибок моста.

См. Также билет JIRA: https://issues.apache.org/jira/browse/CAMEL-13174

...