pentaho/pentaho-kettle · error · KettleException

JobFTPS.Error.ChangingFolder

JobFTPS.Error.ChangingFolder

Error message

JobFTPS.Error.ChangingFolder

What it means

FTPSConnection.changeDirectory(dir) delegates to the underlying FTPS client's changeDirectory. Any exception is wrapped in KettleException with localized message JobFTPS.Error.ChangingFolder naming the directory, signaling the remote working directory could not be changed.

Solutions

  1. Verify the remote directory path exists (list the parent folder first)
  2. Check the FTPS user's permissions on that directory
  3. Inspect the wrapped cause `f` for the server reply code (e.g. 550)
  4. Reconnect (buildFTPSConnection) if the session went stale before changing directory

Example fix

// before
ftpConnection.changeDirectory( "/data/outbox" );
// after
if ( !ftpConnection.folderExists( "/data/outbox" ) ) {
  logError( "Remote folder missing: /data/outbox" );
  return;
}
ftpConnection.changeDirectory( "/data/outbox" );
Defensive patterns

Strategy: try-catch

Validate before calling

// verify remote dir exists before changing into it
if ( !ftpsConnection.folderExists( directory ) ) {
  throw new KettleException( "Remote folder does not exist: " + directory );
}

Try / catch

try { ftpsConnection.changeDirectory( directory ); }
catch ( KettleException ke ) {
  log.error( "Cannot change to " + directory + ": " + ke.getCause() );
  ftpsConnection.connect(); // reconnect on stale sessions, then retry once
}

Prevention

When it happens

Trigger: Called from buildFTPSConnection or execute() with a directory path that does not exist on the server, is not accessible with the current credentials, or when the control connection has dropped.

Common situations: Typo in the remote folder path; folder deleted or renamed between runs; insufficient permissions for the FTPS user; server closed idle connection before the CWD command.

Understand the failure class

Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.

Related errors


AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13). Data as JSON: /api/errors/4c94912cdebd081c. Report an issue: GitHub.

Appendix: source

Thrown at plugins/ftps/impl/src/main/java/org/pentaho/di/job/entries/ftpsget/FTPSConnection.java:394

          replies.add( e );
        }
      }
    }
  }

  /**
   *
   * this method change FTP working directory
   *
   * @param directory
   *          change the working directory
   * @throws KettleException
   */
  public void changeDirectory( String directory ) throws KettleException {
    try {
      this.connection.changeDirectory( directory );
    } catch ( Exception f ) {
      throw new KettleException( BaseMessages.getString( PKG, "JobFTPS.Error.ChangingFolder", directory ), f );
    }
  }

  /**
   *
   * this method is used to create a directory in remote host
   *
   * @param directory
   *          directory name on remote host
   * @throws KettleException
   */
  public void createDirectory( String directory ) throws KettleException {
    try {
      this.connection.makeDirectory( directory );
    } catch ( Exception f ) {
      throw new KettleException( BaseMessages.getString( PKG, "JobFTPS.Error.CreationFolder", directory ), f );
    }
  }

View on GitHub (pinned to f3058517a1)