【问题标题】:How to access spring SFTP remote InputStream in service class如何在服务类中访问spring SFTP远程InputStream
【发布时间】:2016-03-13 03:06:04
【问题描述】:

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

<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"/>

在服务类中创建了带有 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();
    }
}

【问题讨论】:

    标签: java spring spring-integration spring-integration-sftp


    【解决方案1】:

    删除链 - &lt;file:splitter/&gt; 从 inputStream 读取文件并将每一行作为 Message&lt;String&gt; 发出。

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

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

    【讨论】:

    • 问题已更新,出现异常“java.lang.IllegalStateException:无法将 StreamHandler 类型的值”转换为属性“outputChannel”所需的类型 [org.springframework.messaging.MessageChannel]:没有匹配的编辑器或找到转化策略
    • 网关的reply-channel 需要连接到服务激活器的input-channel。我之前没有注意到你们都绑定到inboundGetStream
    猜你喜欢
    • 2011-11-14
    • 2015-06-22
    • 1970-01-01
    • 2016-05-06
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多