sftp outbound gateway error-file list命令

pzfprimi  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(423)

我有一个具有以下目录结构的sftp服务器:

main
--directoryA
  --subDirectory1
--directoryB
  --subDirectory1

但是,当我尝试使用sftp出站网关获取目录列表时,出现以下错误:

Caused by: com.jcraft.jsch.SftpException: main/directoryA/directoryA/subDirectory1
at com.jcraft.jsch.ChannelSftp.throwStatusError(ChannelSftp.java:2873) ~[jsch-0.1.55.jar:na]
at com.jcraft.jsch.ChannelSftp._stat(ChannelSftp.java:2225) ~[jsch-0.1.55.jar:na]
at com.jcraft.jsch.ChannelSftp._stat(ChannelSftp.java:2242) ~[jsch-0.1.55.jar:na]
at com.jcraft.jsch.ChannelSftp.ls(ChannelSftp.java:1592) ~[jsch-0.1.55.jar:na]
at com.jcraft.jsch.ChannelSftp.ls(ChannelSftp.java:1553) ~[jsch-0.1.55.jar:na]
at org.springframework.integration.sftp.session.SftpSession.list(SftpSession.java:111) ~[spring-integration-sftp-5.3.3.RELEASE.jar:5.3.3.RELEASE]
... 47 common frames omitted

我不知道为什么目录会附加两次。这是我的出站网关:

<int-sftp:outbound-gateway id="gateway"
  expression="payload"
  request-channel="request"
  remote-directory="main"
  command-options="-dirs -R"
  command="ls"
  session-factory="sessionFactory"
  reply-channel="reply">
</int-sftp:outbound-gateway>
ca1c2owp

ca1c2owp1#

查看服务器日志,看看是否有任何线索。
也许你没有权限访问这个子目录?

if(type!=SSH_FXP_ATTRS){
    if(type==SSH_FXP_STATUS){
      int i=buf.getInt();
      throwStatusError(buf, i);
    }

根据堆栈跟踪,服务器返回101(客户端预期为105)。
值(i)不出现在 SftpException.getMessage() 显示在堆栈跟踪中。
你可以通过遍历 cause() 链条及使用 toString() .

public class SftpException extends Exception{
  //private static final long serialVersionUID=-5616888495583253811L;
  public int id;
  private Throwable cause=null;
  public SftpException (int id, String message) {
    super(message);
    this.id=id;
  }
  public SftpException (int id, String message, Throwable e) {
    super(message);
    this.id=id;
    this.cause=e;
  }
  public String toString(){
    return id+": "+getMessage();
  }
  public Throwable getCause(){
    return this.cause;
  }
}

它可能提供更多的线索。

相关问题