2016-06-17 2 views
0

私は、ファイルをディレクトリからポーリングするために、キャメルファイルコンポーネントを使用しています。 ファイルを処理できるようになる前に、いくつかの条件を満たす必要があります。 ファイルを削除/移動せずにスキップする必要がある場合は、 に移動してください。望ましい行動をアーカイブする別の方法があるかどうCamelファイルコンポーネント - スキップファイル

public InputStream myMethod(@Body InputStream is, @Headers .....) { 

if(!checkPrerequisites) 
    throw new MyRuntimeException("conditions not satisfied yet"); 

は、だから私は思ったんだけど:私はこれを使用してこれを行うには

+0

ファイルに関する条件、つまりファイル名、ファイルサイズなど、ファイル内のデータに関する条件はありますか? –

+0

条件は別のディレクトリに別のファイルが存在することです。まだ存在しない場合は、現在のファイルをスキップして後で再試行します。 – sinclair

+0

2番目のディレクトリにあるファイルを最初に探すのは簡単でしょうか?それが現ディレクトリにファイルを受け取ったときだけです。私。現在のディレクトリのルートは、最初のファイルが到着するまで開始されません。 –

答えて

4

GenericFileFilterを実装できます。そのように、フィルタを作成します。

public class AnotherFileExistsFilter<T> implements GenericFileFilter<T> { 

    @Override 
    public boolean accept(GenericFile<T> firstFile) { 
     return Files.exists(Paths.get("/some/other/folder/" + firstFile.getFileName())); 
    } 
} 

filter=#anotherFileExistsBeanNameを使用して、エンドポイントに追加します。

ファイルをチェックし続けたい場合は、idempotent=falseと設定し、フォルダを連続してポーリングしないように遅延(delay=xxxミリ秒)を設定することをお勧めします。

詳細はApache Camel File2 pageです。

+0

これは次のファイルに続くか、最初のファイルが処理されるまでアイドル状態になりますか? – sinclair

+0

いいえ、最初のファイルを処理できるまでアイドル状態になりません。 Camelはディレクトリ内のすべてのファイルを処理してから、ファイルを再試行します。 – AndyN

+0

このエラーが発生しました: 'タイプから変換するタイプコンバータがありません:java.lang.Stringを必要なタイプに変更してください:org.apache.camel.component.file.GenericFileFilter' – sinclair