java—如何从spring中的组件在配置中调用sftp出站网关操作

yh2wf1be  于 2021-06-29  发布在  Java
关注(0)|答案(1)|浏览(323)

我在这里查看过,无法使列表文件正常工作:

@Bean
    public SessionFactory<LsEntry> sftpSessionFactory() {
        DefaultSftpSessionFactory factory = new DefaultSftpSessionFactory(true);
        factory.setHost("localhost");
        factory.setPort(port);
        factory.setUser("foo");
        factory.setPassword("foo");
        factory.setAllowUnknownKeys(true);
        factory.setTestSession(true);
        return new CachingSessionFactory<LsEntry>(factory);
    }

    @MessagingGateway
    public interface MyGateway {
         @Gateway(requestChannel = "sftpChannel")
         List<File> listFiles();

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

在@component类中,我有:

@Autowired
    MyGateway gateway;

    public void list(){
        List<File> files = gateway.listFiles();
    }

当我运行这个,我得到一个错误 receive is not supported, because no pollable reply channel has been configured 我认为这与我对整合渠道的了解有关。也许我缺少了一个bean,但我的主要目标是替换我当前使用的inboundchannel适配器来请求临时文件,而不是连续轮询文件服务器

gfttwv5a

gfttwv5a1#

是的,SpringIntegrationGateway中提到的没有任何参数的故事肯定与您的问题有关。
你错过了一个事实 List<File> listFiles() 契约是没有争议的,所以框架不清楚用什么来发送给它 sftpChannel . 所以它试着呼叫 receive . 但是自从你 sftpChannel 不是 PollableChannel ,你犯了那个错误。无论如何,这是一个不同的故事,而不是你想要得到的答复,从发送一条消息到 sftpChannel 就像你试图处理网关合同一样。
您只需要更明确地说什么作为no-arg网关契约的有效负载。
在文档中查看更多信息:https://docs.spring.io/spring-integration/docs/current/reference/html/messaging-endpoints.html#gateway-不调用参数方法。这个 @Payload 是你的答案。或者您可以指定 payloadExpression 在那上面 @Gateway 注解或 defaultPayloadExpression@MessagingGateway .

相关问题