2016-09-02 6 views
2

Я хотел бы использовать SFTP Outbound Gateway для get файла через SFTP, но я нахожу только примеры с помощью XML-конфигурации. Как это можно сделать с помощью конфигурации Java?Как настроить SFTP исходящий шлюз с помощью Java Config?

Update (Спасибо Артему Билана помощь)

MyConfiguration класс:

@Configuration 
public class MyConfiguration { 

    @Bean 
    public SessionFactory<LsEntry> sftpSessionFactory() { 
     DefaultSftpSessionFactory sftpSessionFactory = new DefaultSftpSessionFactory(); 
     sftpSessionFactory.setHost("myhost"); 
     sftpSessionFactory.setPort(22); 
     sftpSessionFactory.setUser("uname"); 
     sftpSessionFactory.setPassword("pass"); 
     sftpSessionFactory.setAllowUnknownKeys(true); 
     return new CachingSessionFactory<LsEntry>(sftpSessionFactory); 
    } 

    @Bean 
    @ServiceActivator(inputChannel = "sftpChannel") 
    public MessageHandler handler() { 
     SftpOutboundGateway sftpOutboundGateway = new SftpOutboundGateway(sftpSessionFactory(), "get", "#getPayload() == '/home/samadmin/test.endf'"); 
     sftpOutboundGateway.setLocalDirectory(new File("C:/test/gateway/")); 
     return sftpOutboundGateway; 
    } 

} 

Мой класс приложения:

@SpringBootApplication 
@EnableIntegration 
public class TestIntegrationApplication { 

    public static void main(String[] args) { 
     SpringApplication.run(TestIntegrationApplication.class, args); 
    } 
} 

Конфигурация успешно сейчас, но не SFTP не происходит. Нужно выяснить, как запросить SFTP.

ответ

3

Цитирование Reference Manual:

@Bean 
@ServiceActivator(inputChannel = "sftpChannel") 
public MessageHandler handler() { 
    return new SftpOutboundGateway(ftpSessionFactory(), "ls"); 
} 

Также стоит обратить внимание на DSL образца Java в следующем разделе там.

EDIT

@Bean 
@ServiceActivator(inputChannel = "sftpChannel") 
public MessageHandler handler() { 
    SftpOutboundGateway sftpOutboundGateway = new SftpOutboundGateway(sftpSessionFactory(), "get", "payload"); 
    sftpOutboundGateway.setLocalDirectory(new File("C:/test/gateway/")); 
    return sftpOutboundGateway; 
} 

В случае GET SFTP команду expression CTOR ARG может быть как выше - просто ссылка на Message.getPayload() для всех входящих сообщений.

В этом случае вы должны отправить на sftpChannelMessage как:

new GenericMessage<>("/home/samadmin/test.endf"); 

Итак, что /home/samadmin/test.endf является payload этого Message. Когда он прибывает в SftpOutboundGateway, это выражение оценивается по этому сообщению, а getPayload() вызывается SpEL. Таким образом, команда GET будет предварительно сформирована с желаемым путем к удаленному файлу.

Другое сообщение может иметь совершенно другой путь к другому файлу.

+0

Является ли конфигурация Java для исходящего шлюза SFTP доступной в версии 4.3.1? В текущем GA (4.3.1) мне не удалось найти конструктор с параметрами, поддерживающими 'new SftpOutboundGateway (sftpSessionFactory()," ls ")' где 'sftpSessionFactory' имеет тип' SessionFactory ' – James

+0

Ну, у нас есть ошибка в этом документе. Согласен. Но это образец, какой-то шаблон. Вы должны выбрать подходящий конструктор для вашего прецедента. Я предполагаю, что это должно быть похоже на «SftpOutboundGateway» (ftpSessionFactory(), «get», «THE_PATH_TO_REMOTE_FILE»). –

+0

Я получаю 'org.springframework.expression.spel.SpelParseException: EL1070E: (pos 0): проблема с анализом левого операнда при попытке создать компонент' MessageHandler'. У меня есть два компонента в моем классе '@ Configuration':' MessageHandler' и 'SessionFactory '. Я что-то упускаю? – James