2016-10-12 1 views
1

Ich versuche, out-of-date zu entfernen Dateien in einem SFTP-Remote-Ordner mithilfe:Feder Integration SFTP Outbound-Gateway entfernen

<int-sftp:outbound-gateway 
     session-factory="sftpSessionFactory" 
     request-channel="rmChannel" 
     reply-channel="sftpOutputChannel" 
     remote-file-separator="/" 
     command="rm" 
     expression="headers['file_remoteDirectory'] + headers['file_remoteFile']"> 
    <int-sftp:request-handler-advice-chain> 
     <si:retry-advice /> 
    </int-sftp:request-handler-advice-chain> 
</int-sftp:outbound-gateway> 

, bevor sie in Gateway immer gibt es einen Filter, um nur die Dateien auszuwählen, aus von Datum:

@Override 
@Filter 
public boolean accept(Message<?> message) { 
    if (message.getPayload() instanceof FileInfo) { 
     final FileInfo fileInfo = (FileInfo) message.getPayload(); 
     final DateTime lastModified = new DateTime(fileInfo.getModified()); 

     boolean accept = lastModified.plusDays(this.days).isBeforeNow(); 
     return accept; 
    } 
    return false; 
} 

die Fragen sind:

  1. warum der Header 'file_remoteFile' werden nicht automatisch erstellt?
  2. Wenn der Remote-Ordner leer ist und nichts zu entfernen ist, kann das Programm nicht anhalten. Wie soll ich das lösen?

Antwort

0

The FileHeaders.REMOTE_FILE sowie FileHeaders.REMOTE_DIRECTORY, wird automatisch durch prducing Komponenten erstellt. Da Sie entfernte Dateien manuell entfernen, müssen Sie diese Header auch manuell angeben. Oder verwenden Sie andere Eigenschaften, um Remote-Pfad zum Entfernen in diesem expression zu erstellen.

Noch eine Frage ist nicht klar.

Ich habe gerade getestet und endete damit, wenn es keine Remote-Datei zu löschen:

org.springframework.core.NestedIOException: Failed to remove file.; nested exception is 2: /junk 

    at org.springframework.integration.sftp.session.SftpSession.remove(SftpSession.java:83) 
... 
Caused by: 2: /junk 
    at com.jcraft.jsch.ChannelSftp.throwStatusError(ChannelSftp.java:2846) 
    at com.jcraft.jsch.ChannelSftp.rm(ChannelSftp.java:1958) 
    at org.springframework.integration.sftp.session.SftpSession.remove(SftpSession.java:79) 

Daher gibt es eine Ausnahme geworfen, wenn nichts zu entfernen.

Bitte, erarbeiten Sie mehr, wie Ihr Programm nicht stoppen kann oder was sonst passiert, wenn Sie versuchen, nicht existierende Remove-Datei zu entfernen.

+0

Danke für die Antwort! Also habe ich 'header-enreicher' verwendet und dieses Problem gelöst. – TiTing

+0

Großartig! Zeit, die Antwort zu akzeptieren? http://StackOverflow.com/Help/Someone-answers –

+0

Für die zweite Frage, ist mein Test unter: – TiTing

Verwandte Themen