2016-07-29 9 views
0

Ich versuche, die ls Informationen von einer FTP-Seite abrufen: org.springframework.integration.ftp.gateway.ftpoutboundgateway.Abrufen von Dateien von FTP mit Federintegration FtpOutboundGateway

Von der Javadoc ich verstehe, können wir einen Befehl wie ls, mget ausführen, um die Informationen über die FtpoOutboundGateway abrufen.

Meine Frage ist, wie man das macht?

Ich habe eine ftpSessionFactory eingerichtet. Ich habe diese Sitzung mit FtpRemoteFileTemplate getestet und kann eine Datei erfolgreich abrufen (via get()).

Aber ich bin verloren, wie dies über das Gateway zu tun. Ich möchte dies über die Codierung tun, keine XML-Dateien für die Konfiguration verwenden.

Also was ich tue ist ein Gateway zu erstellen: neue FtpOutboundGateway (defaultFtpSessionFactory, "ls -R", null);

Was wird der nächste Schritt sein, um den Befehl auszuführen? (tun die ls Abruf von der FTP-Seite)

Ich hatte erwartet, dass dies tatsächlich feuern würde und konnte das Ergebnis abrufen, aber das ist völlig unklar für mich.

Ich kann auch kein Coding-Beispiel finden (nur xml-Konfigurationen) oder aus der javadoc/integration-Dokumentation entnehmen, wie das geht.

Antwort

0

Die FtpOutboundGateway ist eine EIP-Komponente, die als eine Bean im Integration-Flow-Szenario konfiguriert werden sollte.

Damit sollten Sie eine Message für einen Endpunkt inputChannel, senden die FtpOutboundGateway für Sie einen Befehl ausführt und dessen outputChannel mit einem bestimmten Message in antworten.

All diese Informationen finden Sie in der Spring Integration Reference Manual, vor allem here, wenn Ihr Ziel zu erreichen "xmlless" Konfiguration.

Wir haben eine FtpOutboundGateway Java Config nicht Probe, aber Sie können etwas im Frühjahr Integration Java DSL test-cases finden: für die Informationen

@Bean 
public MessageHandler ftpOutboundGateway() { 
    return Ftp.outboundGateway(this.ftpSessionFactory, 
      AbstractRemoteFileOutboundGateway.Command.MGET, "payload") 
      .options(AbstractRemoteFileOutboundGateway.Option.RECURSIVE) 
      .regexFileNameFilter("(subFtpSource|.*1.txt)") 
      .localDirectoryExpression("@ftpServer.targetLocalDirectoryName + #remoteDirectory") 
      .localFilenameExpression("#remoteFileName.replaceFirst('ftpSource', 'localTarget')") 
      .get(); 
} 

@Bean 
public IntegrationFlow ftpMGetFlow() { 
    return IntegrationFlows.from("ftpMgetInputChannel") 
      .handle(ftpOutboundGateway()) 
      .channel(remoteFileOutputChannel()) 
      .get(); 
} 

Auch https://github.com/spring-projects/spring-integration/pull/1860

0

Dank sehen. Ich habe Ihre Informationen verwendet, um eine Lösung zu finden, die meinen Bedürfnissen entspricht. Ich wollte wirklich die Abstraktion der Befehle verwenden, die vom Gateway gegeben werden, nicht die vollständige Integration. Danke nochmal für die Info.

Meine Lösung ist wie folgt, um die Gateway-Funktionalität ohne den vollen Integrationsstapel zu verwenden. Ich habe es hier gepostet, vielleicht können andere Leute es benutzen. Dieses Beispiel funktioniert nur mit dem Befehl ls, kann aber problemlos für alle vom Gateway angegebenen Befehle ausgeführt werden.

class FtpGateway { 

@Autowired 
private DefaultFtpSessionFactory defaultFtpSessionFactory; 

private List<String> ftpFiles = new ArrayList<String>(); 

class ProcessCommandReturn extends AbstractMessageChannel { 

    @Override 
    protected boolean doSend(Message<?> message, long timeout) { 
     ftpFiles.clear(); 
     ArrayList<FileInfo> fileNames = (ArrayList<FileInfo>) message.getPayload(); 
     for (FileInfo filename : fileNames) { 
      ftpFiles.add(filename.getFilename()); 
     } 
     return true; 
    } 
} 

public List<String> getFileListFromFTP() throws IOException { 

    FtpOutboundGateway gw = new FtpOutboundGateway(defaultFtpSessionFactory, "ls", "'last*.zip'"); 
    // set return processing 
    MessageChannel ochannel = new ProcessCommandReturn(); 
    e.setOutputChannel(ochannel); 
    // make the gateway do it's work 
    gw.handleMessage(new GenericMessage("")); 
    return ftpFiles; 
} 
} 
Verwandte Themen