pentaho/pentaho-kettle · error · KettleException
Unable to find transformation '" + name + "' in directory…
Error message
Unable to find transformation '" + name + "' in directory :" + directory
What it means
KettleException thrown by ExecuteTransServlet.loadTransformation when repository.getTransformationID(name, directory) returns null — the directory resolved but no transformation with the given name exists inside it. The message includes the transformation name and the directory object.
Solutions
- Verify the transformation name in the repository directory via Spoon
- Correct the trans parameter to the actual name/path
- Update any scheduler or client still pointing at the old name
- Re-deploy the transformation if it was deleted
- Check for case or extension mismatch in the name
Example fix
// before String transParam = "/home/prod/load_dw"; // renamed // after String transParam = "/home/prod/load_dw_incremental";
Defensive patterns
Strategy: validation
Validate before calling
RepositoryDirectoryInterface dir = repo.loadRepositoryDirectoryTree().findDirectory( dirPath ); boolean exists = dir != null && repo.getTransformationID( transName, dir ) != null;
Try / catch
try {
// executeTrans request
} catch ( KettleException e ) {
if ( e.getMessage().startsWith( "Unable to find transformation" ) ) {
LOG.error( "Transformation missing: " + transName + " in " + dirPath );
}
} Prevention
- Look up transformation ObjectIds rather than hardcoding names
- Update schedulers when transformations are renamed/moved
- Verify names via repository explorer before external execution
- Detect stale transformation references with periodic repository audits
When it happens
Trigger: GET /kettle/executeTrans/ with trans=/path/name where /path exists but no transformation 'name' is stored there (renamed, deleted, or never exported).
Common situations: Transformation renamed or moved after the URL was created; executing a .ktr by name that was saved under a different name; wrong directory in the request; deleted transformation with stale schedulers still calling it.
Understand the failure class
Background: "Not found" and "does not exist" errors: why "Task not found", "No such folder", and "Can't find" fire when a lookup comes back empty — this error's family across 14 libraries.
Related errors
- ExecuteJobServlet.Error.DirectoryPathNotFoundInRepository
- ExecuteJobServlet.Error.JobNotFoundInDirectory
- ExecuteJobServlet.Error.UnableToFindRepository
- ExecuteTransServlet.Error.ErrorExecutingTrans
- Unable to find directory path '' + directoryPath + '' in…
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/dfcab9d9593de123.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/www/ExecuteTransServlet.java:390
String directoryPath;
String name;
int lastSlash = trans.lastIndexOf( RepositoryDirectory.DIRECTORY_SEPARATOR );
if ( lastSlash < 0 ) {
directoryPath = "/";
name = trans;
} else {
directoryPath = trans.substring( 0, lastSlash );
name = trans.substring( lastSlash + 1 );
}
RepositoryDirectoryInterface directory =
repository.loadRepositoryDirectoryTree().findDirectory( directoryPath );
if ( directory == null ) {
throw new KettleException( "Unable to find directory path '" + directoryPath + "' in the repository" );
}
ObjectId transformationID = repository.getTransformationID( name, directory );
if ( transformationID == null ) {
throw new KettleException( "Unable to find transformation '" + name + "' in directory :" + directory );
}
// TODO BACKLOG-44138 need to pass parent variablespace
TransMeta transMeta = repository.loadTransformation( transformationID, null, parentVariableSpace );
return transMeta;
}
}
private Repository openRepository( String repositoryName, String user, String pass ) throws KettleException {
if ( Utils.isEmpty( repositoryName ) ) {
return null;
}
RepositoriesMeta repositoriesMeta = new RepositoriesMeta();
repositoriesMeta.readData();
RepositoryMeta repositoryMeta = repositoriesMeta.findRepository( repositoryName );
if ( repositoryMeta == null ) {
throw new KettleException( "Unable to find repository: " + repositoryName );View on GitHub (pinned to f3058517a1)