Spring 集成 FTP - InboundChannelAdapter 停止使用新的 FTP 服务器
Spring Integration FTP - InboundChannelAdapter Stopped working with new FTP server
多年来,我一直在使用 Spring-Integration 4.1.6 连接到旧的 FTP 服务器。 FTP 服务器最近更换为更新版本(新服务器是 Globalscape EFT Enterprise),我的 int-ftp inbound-channel-adapters 立即停止查找文件。我监控了几个账户,它们都同时停止工作了。
这里是配置之一:
<beans:bean id="ftpSessionFactory" class="org.springframework.integration.ftp.session.DefaultFtpSessionFactory">
<beans:property name="host" value="${ftp.host}" />
<beans:property name="port" value="${ftp.port}" />
<beans:property name="username" value="${ftp.username}" />
<beans:property name="password" value="${ftp.password}" />
<beans:property name="clientMode" value="2" />
<beans:property name="fileType" value="2" />
<beans:property name="bufferSize" value="5000000" />
</beans:bean>
<beans:bean id="cachingSessionFactory" class="org.springframework.integration.file.remote.session.CachingSessionFactory">
<beans:constructor-arg ref="ftpSessionFactory" />
<beans:constructor-arg value="1" />
<beans:property name="sessionWaitTimeout" value="60000" />
</beans:bean>
<int-ftp:inbound-channel-adapter id="ftpInboundChannelAdapter" channel="ftpChannelIn" session-factory="cachingSessionFactory" auto-create-local-directory="true"
delete-remote-files="true" remote-directory="dev" local-directory="C:/temp" auto-startup="true">
<poller max-messages-per-poll="-1" receive-timeout="10000" cron="0 0/2 * * * *" >
<transactional/>
</poller>
</int-ftp:inbound-channel-adapter>
当我调试适配器时,我看到了这条语句:
[org.springframework.integration.ftp.inbound.FtpInboundFileSynchronizer] cannot copy, not a file: dev/dev
但是dev下面并没有名为dev的文件夹,只有一个.csv文件。
结构为 /path/to/user/dev/file.csv,FTP 服务器配置为在用户执行 PWD 时向用户显示完整路径。
而且我确信当登录发生时,它们被放置在 /path/to/user 文件夹中。
我在我的本地环境中建立了另一个 FTP 服务器,它工作正常。
某些非标准 FTP 服务器是否存在导致此类问题的问题?
提前致谢
事实证明,最新版本的 GlobalScape EFT (8.0.2.x) 错误地实现了 LIST 命令。当执行 LIST some/directory 进行监控时,他们返回的是目录本身的详细信息,而不是目录的内容。这是他们 7.x 版本的行为变化。
如果我可以配置 Spring 集成 FTP 库执行 CWD,然后对当前文件夹进行 LIST,那就太好了。或者让它使用 NLST。然而,由于这只是 FTP 服务器上的一个错误,所以完全可以理解为什么这不是一个选项。
多年来,我一直在使用 Spring-Integration 4.1.6 连接到旧的 FTP 服务器。 FTP 服务器最近更换为更新版本(新服务器是 Globalscape EFT Enterprise),我的 int-ftp inbound-channel-adapters 立即停止查找文件。我监控了几个账户,它们都同时停止工作了。
这里是配置之一:
<beans:bean id="ftpSessionFactory" class="org.springframework.integration.ftp.session.DefaultFtpSessionFactory">
<beans:property name="host" value="${ftp.host}" />
<beans:property name="port" value="${ftp.port}" />
<beans:property name="username" value="${ftp.username}" />
<beans:property name="password" value="${ftp.password}" />
<beans:property name="clientMode" value="2" />
<beans:property name="fileType" value="2" />
<beans:property name="bufferSize" value="5000000" />
</beans:bean>
<beans:bean id="cachingSessionFactory" class="org.springframework.integration.file.remote.session.CachingSessionFactory">
<beans:constructor-arg ref="ftpSessionFactory" />
<beans:constructor-arg value="1" />
<beans:property name="sessionWaitTimeout" value="60000" />
</beans:bean>
<int-ftp:inbound-channel-adapter id="ftpInboundChannelAdapter" channel="ftpChannelIn" session-factory="cachingSessionFactory" auto-create-local-directory="true"
delete-remote-files="true" remote-directory="dev" local-directory="C:/temp" auto-startup="true">
<poller max-messages-per-poll="-1" receive-timeout="10000" cron="0 0/2 * * * *" >
<transactional/>
</poller>
</int-ftp:inbound-channel-adapter>
当我调试适配器时,我看到了这条语句:
[org.springframework.integration.ftp.inbound.FtpInboundFileSynchronizer] cannot copy, not a file: dev/dev
但是dev下面并没有名为dev的文件夹,只有一个.csv文件。
结构为 /path/to/user/dev/file.csv,FTP 服务器配置为在用户执行 PWD 时向用户显示完整路径。
而且我确信当登录发生时,它们被放置在 /path/to/user 文件夹中。
我在我的本地环境中建立了另一个 FTP 服务器,它工作正常。
某些非标准 FTP 服务器是否存在导致此类问题的问题?
提前致谢
事实证明,最新版本的 GlobalScape EFT (8.0.2.x) 错误地实现了 LIST 命令。当执行 LIST some/directory 进行监控时,他们返回的是目录本身的详细信息,而不是目录的内容。这是他们 7.x 版本的行为变化。
如果我可以配置 Spring 集成 FTP 库执行 CWD,然后对当前文件夹进行 LIST,那就太好了。或者让它使用 NLST。然而,由于这只是 FTP 服务器上的一个错误,所以完全可以理解为什么这不是一个选项。