2017-06-19 10 views
1

エラーに基づいてFTPルート内のファイルを別のディレクトリに移動する方法はありますか?例外クラスに基づいてファイルを別のフォルダに移動します。

from("sftp://[email protected]/dir/?delay=2s&move=done&moveFailed=failImport") 
     .split() 
     .body() 
     .process(e -> { 
      String fileName = (String) e.getIn().getHeader(Exchange.FILE_NAME); 
      // do some magic which could throw a exception 
     }) 
     .log("Imported file ${file:name} completely."); 

答えて

0

それはonExceptionをしてアーカイブすることが私の、のtry-catch-最終的またはカスタムファイル処理戦略が、それのどれも本当に便利です。

私はこの単純なコードを思い付いた:

@Override 
public void configure() throws Exception { 
    errorHandler(loggingErrorHandler(logger)); 
    from("sftp://[email protected]/dir/?delay=2s&move=${in.header.outDirectory}&moveFailed=failImport") 
      .process(exchange -> exchange.setProperty(originalMessage, exchange.getIn())) 
      .split() 
      .body() 
      .process(e -> { 
       String fileName = (String) e.getIn().getHeader(Exchange.FILE_NAME); 
       Message origMsg = (Message) e.getProperty(originalMessage); 
       try { 
        // do what ever 
        origMsg.setHeader(outDirectory, "done/" + fileName); 
       } catch (KaboomException ex) { 
        origMsg.setHeader(outDirectory, "retry/" + fileName); 
       } 
      }) 
      .log("Imported file ${file:name} completely."); 

} 

その重要な元のメッセージにヘッダを設定します。

0

キャメルのonExceptionハンドラを確認してください。特定の例外をキャッチし、それに応じてルーティングすることができます。また、エラー処理をCamelのルートでもっと内側にしたい場合は、try-catch-like構文もあります。

onException(BadThingHappenedException.class).to(file:///errorFolder) 

ドキュメント:

onException

try-catch-finally

Custom file processing strategy

+0

私は 'to'のsftp設定全体をもう一度使う必要がありますか? – Zarathustra

+0

は、元のファイルが削除/移動されないように思われます。 – Zarathustra

+0

1.リモートシステム上の別のフォルダにファイルを移動する場合は、「to」に別のsftp://を指定します。 –

関連する問題