我正在尝试使用: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文档中获取如何执行此操作。
答案 0 :(得分:0)
FtpOutboundGateway
是一个EIP组件,应该在Integration流场景中配置为bean。
有了这个,您应该为端点Message
发送inputChannel
,FtpOutboundGateway
会为您执行命令并使用特定的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;
}
}