Spring Интеграция FTP — InboundChannelAdapter перестала работать с новым FTP-сервером

#java #ftp #spring-integration-ftp

#java #ftp #spring-интеграция-ftp

Вопрос:

Я уже несколько лет использую Spring-Integration 4.1.6 для подключения к старому FTP-серверу. FTP-сервер был недавно заменен на более новую версию (новый сервер — Globalscape EFT Enterprise), и сразу же мои адаптеры int-ftp для входящих каналов перестали находить файлы. Я отслеживаю несколько учетных записей, и все они перестали работать одновременно.

Вот конфигурация одного:

 <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-серверами, вызывающими подобные проблемы?

Заранее благодарю вас

Ответ №1:

Оказывается, в последней версии GlobalSCAPE EFT (8.0.2.x) неправильно реализована команда LIST. Когда для мониторинга выполняется СПИСОК some/directory, они возвращали сведения о самом каталоге, а не о содержимом каталога. Это было изменение в поведении по сравнению с их версией 7.x.

Было бы неплохо, если бы я мог настроить FTP-библиотеку Spring Integration для создания CWD, а затем списка текущей папки. Или пусть он использует NLST. Однако, поскольку это была просто ошибка на FTP-сервере, вполне понятно, почему это не вариант.