Apache camel 驼峰SFTP路由无法继续一个异常

Apache camel 驼峰SFTP路由无法继续一个异常,apache-camel,sftp,ioexception,onexception,Apache Camel,Sftp,Ioexception,Onexception,我的路线很简单 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:n

我的路线很简单

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

我尝试使用route viz中提到的所有属性。streamDownload、stepwise、readLock、localWorkDirectory等。但是,当多个文件不起作用时,错误处理是无效的。我看到第一个文件正在处理中。但是,一旦发生异常,它不会移动到已处理的文件夹,然后传入/文件夹/位置将不可列出。我尝试使用continued(true)代替handled(true)

在同一个交换中处理多个文件。在异常情况下,路由尝试在同一服务器上通过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();