2016-06-17 16 views
0

Ich benutze die Camel File Komponente, um Dateien aus einem Verzeichnis abzurufen. Bevor ich mit einer Datei umgehen kann, müssen einige Bedingungen erfüllt sein, wenn nicht camel sollte die Datei überspringen, ohne sie zu löschen/verschieben und zum nächsten gehen.Camel File Komponente - Datei überspringen

Um dies zu tun, ich benutze diese:

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

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

Also ich frage mich, ob es eine andere Möglichkeit ist es, das gewünschte Verhalten zu archivieren.

+0

Sind die Bedingungen für die Datei, z. B. Dateiname, Dateigröße usw., oder Bedingungen für die Daten in der Datei? –

+0

Die Bedingung ist, dass eine andere Datei in einem anderen Verzeichnis existiert, wenn sie noch nicht da ist, möchte ich die aktuelle Datei überspringen und es später erneut versuchen. – sinclair

+0

Wäre es einfacher, wenn Sie zuerst nach der Datei im zweiten Verzeichnis suchen, und nur wenn das ankommt, holen Sie die Datei im aktuellen Verzeichnis ab? I.e. Die Route für das aktuelle Verzeichnis wird erst gestartet, wenn die erste Datei eintrifft. –

Antwort

4

Sie könnten eine GenericFileFilter implementieren. Erstellen Sie den Filter, etwa so:

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

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

Fügen Sie es zu Ihrem Endpunkt mit filter=#anotherFileExistsBeanName.

Wenn Sie die Datei weiterhin prüfen möchten, setzen Sie idempotent=false, und ich empfehle, eine Verzögerung (delay=xxx in ms) einzustellen, um den Ordner nicht kontinuierlich abzufragen.

Weitere Details sind auf der Apache Camel File2 page.

+0

Wird dies mit der nächsten Datei fortgesetzt oder wird es inaktiv bleiben, bis die erste Datei verarbeitet werden kann? – sinclair

+0

Nein, es wird nicht inaktiv, bis die erste Datei verarbeitet werden kann. Camel verarbeitet alle Dateien in einem Verzeichnis, bevor eine Datei erneut versucht wird. – AndyN

+0

Ich bekomme diesen Fehler: 'Es gibt keinen Typkonverter, der vom Typ java.lang.String in den erforderlichen Typ konvertiert werden kann: org.apache.camel.component.file.GenericFileFilter' – sinclair