我正在寻找一种方法,通过使用service-activator将InputStream传递给服务类方法,并测试了以下配置,似乎没有调用service-activator。可以在哪里做错了?
<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();
}
}
答案 0 :(得分:1)
删除链 - <file:splitter/>
从inputStream中读取文件,并将每一行作为Message<String>
发出。
由于您想自己使用inputStream,因此您不需要这样做。那么您的服务方法是正确的。
只需将回复频道更改为outboundGetStream
,然后将服务激活器的输入频道更改为该频道。