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

  1. Verify the transformation name in the repository directory via Spoon
  2. Correct the trans parameter to the actual name/path
  3. Update any scheduler or client still pointing at the old name
  4. Re-deploy the transformation if it was deleted
  5. 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

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


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)