Верблюжий SFTP-маршрут не может продолжаться на Exception

У меня довольно простой вид трассы

sftp://hostname:22//incoming/folder/location/?username=username&password=xxxxx
&localWorkDirectory=/tmp&readLock=changed&readLockCheckInterval=2000
&move=processed/$simple{date:now:yyyy}/$simple{date:now:MM}/$simple{date:now:dd}${file:name}
&consumer.delay=450000&stepwise=false&streamDownload=true&disconnect=true

У меня также есть предложение onException

onException(ValidationException.class)
            .handled(true)
            .logStackTrace(true)
            .filter(header("VALIDATION_ERROR").isEqualTo(true))
            .choice()
              .when(header("CamelFileName").contains("Param1"))
               .to(sftp://hostname:22//One/error/folder?password=xxxxxx&username=username)
              .when(header("CamelFileName").contains("Param2"))             
               .to(sftp://hostname:22//Two/error/folder?password=xxxxxx&username=username)
            .endChoice();

Когда у меня есть один файл, маршрут, кажется, работает как ожидалось. Когда возникает более одного файла и возникает исключение, я получаю много разных исключений, таких как

org.apache.camel.component.file.GenericFileOperationFailedException: Cannot list directory: incoming/folder/location

Caused by: java.lang.IndexOutOfBoundsException

Я попытался использовать все атрибуты, упомянутые в маршруте, а именно. streamDownload, пошагово, readLock, localWorkDirectory и др. Однако обработка ошибок, когда несколько файлов не работает. Я вижу, как обрабатывается первый файл. Тем не менее, он не перемещается в обработанную папку, как только возникает исключение, а затем входящий / папка / местоположение становится недоступным для просмотра. Я попытался использовать продолжение (правда), а не обработано (правда)

1 ответ

Решение

Проблема была в том, что несколько файлов обрабатывались в одном обмене. В исключительных случаях маршрут пытался отправить файл ошибок по FTP на тот же сервер. Решением было разделить тело на несколько обменов, чтобы у каждого файла был свой обмен, и обрабатывать их отдельно.

from(sftp://hostname:22//incoming/folder/location/?username=username&password=xxxxx
&localWorkDirectory=/tmp&readLock=changed&disconnect=true&stepwise=false
&move=processed/$simple{date:now:yyyy}/$simple{date:now:MM}/$simple{date:now:dd}${file:name}
&consumer.delay=450000).split(body()).processRef("incomingProcessor").end();
Другие вопросы по тегам