如何在服务 class 中访问 spring SFTP 远程 InputStream

How to access spring SFTP remote InputStream in service class

我正在寻找一种使用服务激活器将 InputStream 传递给服务 class 方法的方法,测试了以下配置,似乎没有调用服务激活器。有什么地方做错了吗?

<bean id="sftpSessionFactory" ... />

<int:channel id="inboundGetStream">
    <int:queue />
</int:channel>

<int-sftp:outbound-gateway session-factory="sftpSessionFactory"
              request-channel="inboundGetStream"
              command="get"
              command-options="-stream"
              expression="payload"
              remote-directory="ftpTarget"
              reply-channel="streamHandler" />

<int:service-activator input-channel="inboundGetStream" ref="streamHandler" method="handleMessage"/>

在服务 class 中创建了带有 InputStream 参数的方法:

@Service("streamHandler")
public class StreamHandler {

    public void handleMessage(InputStream file, @Headers['file_remoteSession']DefaultSftpSessionFactory session) throws FileNotFoundException, IOException{
        log.debug("############# handleMessage(file) ###########");     
        log.debug(IOUtils.toString(new FileInputStream(file)));
        session.close();
    }
}

删除链 - <file:splitter/> 从 inputStream 读取文件并将每一行作为 Message<String>.

发出

由于您想自己使用 inputStream,所以您不希望这样。那么你的服务方式是正确的。

只需将回复通道更改为 outboundGetStream 并将服务激活器的输入通道更改为该通道。