使用Spring集成FtpOutboundGateway

时间:2016-07-29 09:08:14

标签: spring spring-integration

我正在尝试使用:ls从ftp端检索org.springframework.integration.ftp.gateway.ftpoutboundgateway信息。

从javadoc我明白我们可以执行像ls,mget这样的命令来通过FtpoOutboundGateway检索信息。

我的问题是如何做到这一点?

我已经设置了一个ftpSessionFactory。我已经使用FtpRemoteFileTemplate测试了此会话,并且可以成功检索文件(通过get())。

但我迷失了如何通过网关做到这一点。 我想通过编码来完成这项工作,而不是使用xml文件进行配置。

所以我要做的是创建一个网关:  new FtpOutboundGateway(defaultFtpSessionFactory," ls -R",null);

执行命令的下一步是什么? (从ftp端执行ls检索)

我原本以为这会实际发生并且可以检索结果,但这对我来说完全不清楚。

我也找不到编码示例(只是xml配置)或从javadoc / integration文档中获取如何执行此操作。

2 个答案:

答案 0 :(得分:0)

FtpOutboundGateway是一个EIP组件,应该在Integration流场景中配置为bean。

有了这个,您应该为端点Message发送inputChannelFtpOutboundGateway会为您执行命令并使用特定的Message回复{{1} }}

您可以在Spring Integration Reference Manual中找到的所有信息,尤其是here,如果您的目标是实现" xmlless"配置。

我们没有outputChannel Java Config示例,但您可以在Spring Integration Java DSL test-cases中找到一些内容:

FtpOutboundGateway

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

答案 1 :(得分:0)

感谢您提供的信息。我用你的信息提出了一个符合我需求的解决方案。我真的想使用网关给出的命令的抽象,而不是完全集成的方式。再次感谢您的信息。

我的解决方案如下,以便能够在不使用完整集成堆栈的情况下使用网关功能。我在这里发布,也许其他人可以使用它。此示例仅适用于ls命令,但可以轻松地为网关提供的所有命令工作。

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;
}
}