pentaho/pentaho-kettle · error · KettleException

Unable to get all transformation names

Error message

Unable to get all transformation names

What it means

PurRepository.getTransformationNames() lists transformation titles in a directory and wraps any failure of the pur listing call in this KettleException. The cause chain contains the real repository error.

Solutions

  1. Log e.getCause() to identify connection vs permission vs missing-directory failure.
  2. Reconnect to the repository and retry.
  3. Validate the directory id via getDirectory(idDirectory) before listing.
  4. Check server reachability and user read permissions on the folder.

Example fix

// before
String[] names = repo.getTransformationNames(dirId, false);
// after
try {
  String[] names = repo.getTransformationNames(dirId, false);
} catch (KettleException e) {
  log.error("transformation listing failed", e.getCause());
  reconnectIfNeeded();
}
Defensive patterns

Strategy: try-catch

Validate before calling

if (repo == null || !repo.isConnected()) throw new IllegalStateException("repository not connected");
if (dirId == null) throw new IllegalArgumentException("dirId required");

Type guard

boolean usable(Repository repo) { try { return repo != null && repo.isConnected(); } catch (Throwable t) { return false; } }

Try / catch

try { return repo.getTransformationNames(dirId, false); } catch (KettleException e) { log.error("cause: ", e.getCause()); return new String[0]; }

Prevention

When it happens

Trigger: Calling getTransformationNames(idDirectory, includeDeleted) when getChildren fails: invalid/deleted directory id, lost repository connection, server error, or permission denial.

Common situations: Stale session after Pentaho server restart; directory deleted concurrently; wrong directory id passed from another repository; network failure; insufficient read permissions.

Understand the failure class

Background: "API request failed": what wrapped HTTP errors from external APIs mean and how to find the real cause — this error's family across 29 libraries.

Related errors


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

Appendix: source

Thrown at plugins/pur/core/src/main/java/org/pentaho/di/repository/pur/PurRepository.java:1756

      String path = repositoryDirectory != null ? repositoryDirectory.toString() : "null";
      throw new IdNotFoundException( "Unable to get ID for job [" + name + "]", e, name, path,
        RepositoryObjectType.TRANSFORMATION );
    }
  }

  @Override
  public String[] getTransformationNames( ObjectId idDirectory, boolean includeDeleted ) throws KettleException {
    try {
      List<RepositoryFile>
        children =
        getAllFilesOfType( idDirectory, RepositoryObjectType.TRANSFORMATION, includeDeleted );
      List<String> names = new ArrayList<String>();
      for ( RepositoryFile file : children ) {
        names.add( file.getTitle() );
      }
      return names.toArray( new String[0] );
    } catch ( Exception e ) {
      throw new KettleException( "Unable to get all transformation names", e );
    }
  }

  @Override
  public List<RepositoryElementMetaInterface> getTransformationObjects( ObjectId idDirectory, boolean includeDeleted )
    throws KettleException {
    return getPdiObjects( idDirectory, Arrays
      .asList( new RepositoryObjectType[] { RepositoryObjectType.TRANSFORMATION } ), includeDeleted );
  }

  protected List<RepositoryElementMetaInterface> getPdiObjects( ObjectId dirId, List<RepositoryObjectType> objectTypes,
                                                                boolean includeDeleted ) throws KettleException {

    readWriteLock.readLock().lock();
    try {
      RepositoryFile dirFile;
      dirFile = pur.getFileById( dirId.getId() );

View on GitHub (pinned to f3058517a1)