1

私はかなり単純なルートを持っています

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、stepwise、readLock、localWorkDirectory など。ただし、複数ファイル時のエラーハンドリングは動作しません。最初のファイルが処理されているのがわかります。ただし、例外が発生し、incoming/folder/locationがリスト不可になると、処理済みフォルダーに移動しません。処理された(true)の代わりにcontinued(true)も使用してみました

4

1 に答える 1

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();
于 2014-08-16T00:13:38.580 に答える