为什么int-ftp:outbound-gateway有效负载不是List <java.io.file>?

时间:2016-03-11 21:02:38

标签: spring-integration apache-commons-net

根据http://docs.spring.io/spring-integration/reference/html/ftp.html#ftp-outbound-gateway,mget有效载荷是文件列表

  

mget根据模式检索多个远程文件,并支持以下选项:

     

...

     

由mget操作产生的消息有效负载是ListFile&gt; object - 一个File对象列表,每个对象代表一个检索到的文件。

我有以下配置

<int-ftp:outbound-gateway 
        session-factory="ftpSesionFactory"
        request-channel="request-channel"
        reply-channel="reply-channel" 
        auto-create-directory="true"
        local-directory="${local-directory}"        
        command="mget" 
        command-options="-stream" 
        expression="payload">
        <int-ftp:request-handler-advice-chain>
            <int:retry-advice />
        </int-ftp:request-handler-advice-chain>
    </int-ftp:outbound-gateway>
<int-file:splitter input-channel="reply-channel" output-channel="logger"/>  

但有效负载是List&lt; FTPFile&gt;并且分离器不起作用。这是一个错误吗?如何获取下载的Listjava.io.File&gt;在有效载荷中(如文档所述)?

解决方法是使用另一个组件从本地目录中读取文件,如how to get file with int-ftp:outbound-gateway and remove from server if exists?所述。

我使用的是spring-integration 4.2.5和commons-net-2.0。

1 个答案:

答案 0 :(得分:1)

是什么让你相信它是List<FTPFile

This test显示它是List<java.io.File>

ls命令会返回StringFTPFile的列表,具体取决于-1选项。

最后,-stream不支持mget,仅get

此外,您不需要文件分割器 - 读取每个文件 - 您需要定期<int:splitter/>List<File>拆分为单独的文件;然后文件分割器将读取文件行。