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
- Verify the remote directory path exists (list the parent folder first)
- Check the FTPS user's permissions on that directory
- Inspect the wrapped cause `f` for the server reply code (e.g. 550)
- 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
- Confirm remote paths exist and are spelled correctly before runs
- Check FTPS user permissions on target directories
- Reconnect on idle timeouts before issuing CWD
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
- JobFTPS.Error.Connecting
- JobFTPS.Error.RetrievingFilenames
- StatusCode:
- An error occurred sending a slave transformation:
- An error occurred sending the master transformation:
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)