You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Spring Integration与SFTP迁移文件时遇空指针异常求助

问题分析

空指针异常出现在AbstractRemoteFileOutboundGateway.getRemoteFilename()方法,原因是你配置的SftpOutboundGateway依赖file_remoteFile和file_renameTo这两个消息头获取远程文件路径,但调用rename()方法时只传递了本地File对象,没有设置对应的消息头,导致SpEL表达式无法解析到值,触发空指针。

解决方案

你需要确保调用网关方法时,正确传递SFTP服务器上的原文件路径和目标路径作为消息头,有两种实现方式:

方式一:通过@Header注解直接传递头参数

修改fileGateway接口,显式声明需要的消息头参数:

@MessagingGateway
public interface FileGateway {
    
    @Gateway(requestChannel = "moveFiles")
    void rename(@Header("file_remoteFile") String originalRemotePath, 
                @Header("file_renameTo") String targetRemotePath);
}

调用时直接传入SFTP服务器上的原路径和目标路径:

// 示例:将SFTP上的/path/source.txt移动到/path/target/new.txt
fileGateway.rename("/path/source.txt", "/path/target/new.txt");

方式二:构建包含头信息的Message对象传递

调整网关方法接收Message类型参数:

@MessagingGateway
public interface FileGateway {
    
    @Gateway(requestChannel = "moveFiles")
    void rename(Message<?> message);
}

调用时手动构建消息并设置头信息:

String originalRemotePath = "/path/source.txt";
String targetRemotePath = "/path/target/new.txt";

Message<?> message = MessageBuilder.emptyMessage()
        .setHeader("file_remoteFile", originalRemotePath)
        .setHeader("file_renameTo", targetRemotePath)
        .build();

fileGateway.rename(message);
注意事项
  • 这里的路径都是SFTP服务器上的远程路径,不是本地文件路径,不要混淆本地File对象和远程文件路径
  • 确保sftpSessionFactory已正确配置,能正常连接到目标SFTP服务器

内容的提问来源于stack exchange,提问作者Wael90

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 20:02:50