Spring Integration - Используйте имя файла со шлюзом - PullRequest
0 голосов
/ 09 октября 2018

У меня проблема с интеграцией Spring.

Я хочу сделать запрос на ftp-сервере для получения имени файла (в командной строке: ls "filename")

Но я не могу восстановить имя файла динамически.Я понял, что была история с полезной нагрузкой или заголовком, но я не могу

Вот что у меня есть:

Просмотрите мой контроллер, я использую это:

private FtpConfig.MyGateway gateway;
...
gateway.fichierExist(filename);

в моем файле FTP:

@Bean
public SessionFactory<FTPFile> ftpSessionFactory() {
    DefaultFtpSessionFactory sf = new DefaultFtpSessionFactory();
    sf.setHost("");
    sf.setPort(21);
    sf.setUsername("");
    sf.setPassword("");
    return new CachingSessionFactory<FTPFile>(sf);
}


@Bean
@ServiceActivator(inputChannel = "ftpChannelExist")
public MessageHandler handler2() {
    FtpOutboundGateway ftpOutboundGateway =
            new FtpOutboundGateway(ftpSessionFactory(), "ls");
    ftpOutboundGateway.setOptions("-a -1")
    FtpSimplePatternFileListFilter filter = new FtpSimplePatternFileListFilter("filename"); //on filtre sur le nom

    return ftpOutboundGateway;
}


@MessagingGateway
public interface MyGateway {

    @Gateway(requestChannel = "ftpChannelExist")
    ArrayList<String> fichierExist(String filename);

}

Я тоже пробовал с заголовком, но ничего не могу сделать ...

Спасибо.

(Извините за мой английский, яя француз)

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

Спасибо за ваш ответ.

Я изменил свой FtpOutboundGateway для добавления "полезной нагрузки", но я не могу использовать полезную нагрузку для своего FtpSimplePatternFileListFilter.

Я пробовал:

FtpSimplePatternFileListFilter filter = new FtpSimplePatternFileListFilter("filename"); 

FtpSimplePatternFileListFilter filter = new FtpSimplePatternFileListFilter("payload"); 

FtpSimplePatternFileListFilter filter = new FtpSimplePatternFileListFilter("payload.filename"); 

FtpSimplePatternFileListFilter filter = new FtpSimplePatternFileListFilter("payload['filename']"); 
0 голосов
/ 09 октября 2018

См. Описание команды LS в Справочном руководстве :

Кроме того, предусмотрена фильтрация имен файлов так же, как и inbound-channel-adapter.

Полезная нагрузка сообщения, полученная в результате операции ls, представляет собой список имен файлов или список FileInfo объектов.Эти объекты предоставляют такую ​​информацию, как измененное время, разрешения и т. Д.

Удаленный каталог, в котором действовала команда ls, указан в заголовке file_remoteDirectory.

Чего вам не хватает вВаша конфигурация является фактом remote directory для получения файлов.Обычно мы предлагаем иметь такой каталог в payload, как вы делаете с вашим fichierExist(String filename), и настраиваете третий аргумент ctor для FtpOutboundGateway:

FtpOutboundGateway ftpOutboundGateway =
        new FtpOutboundGateway(ftpSessionFactory(), "ls", "payload");

В соответствии с логикой в ​​FtpOutboundGatewayэто выражение служит источником для удаленного каталога в команде LS.В вашем случае это будет аргумент вашего fichierExist(String filename) шлюза.

Вы действительно можете использовать FtpSimplePatternFileListFilter, но не забудьте указать правильный шаблон для фильтрации удаленных файлов.

В конце имена удаленных файлов в запрошенном каталоге после фильтрации будут возвращены на ArrayList<String> вашего шлюза.Правильно.

В противном случае ваш вопрос неясен.

...