2017-06-19 6 views
1

Wie Verschieben einer Datei in einer FTP-Route in ein anderes Verzeichnis auf der Grundlage des Fehlers?Verschieben von Dateien basierend auf Ausnahmeklasse in einen anderen Ordner mit camel

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."); 

Antwort

0

es meint mit einem OnException archiviert werden, try-catch-finally oder Benutzerdefinierte Dateiverarbeitungsstrategie aber nichts davon ist wirklich praktisch.

kam ich mit diesem einfachen Code auf:

@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."); 

} 

Es ist wichtig, den Header auf der ursprünglichen Nachricht einzustellen.

0

Überprüfen Sie den onException-Handler in Camel. Sie können bestimmte Ausnahmen abfangen und dann entsprechend routen. Es gibt auch eine Try-Catch-artige Syntax, wenn Sie möchten, dass die Fehlerbehandlung mehr mit Ihrer Camel-Route verknüpft ist.

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

Dokumentation:

onException

try-catch-finally

Custom file processing strategy

+0

Muss ich die gesamte sftp-Konfiguration in 'to' erneut verwenden? – Zarathustra

+0

scheint, dass die Originaldatei nicht gelöscht/verschoben wird. – Zarathustra

+0

1. Ja, wenn Sie die Datei in einen anderen Ordner auf dem Remote-System verschieben möchten, würden Sie einen anderen sftp: // in der "to" –

Verwandte Themen