pentaho/pentaho-kettle · error · KettleException

Unable to get list of transformations in folder with id : +…

Error message

Unable to get list of transformations in folder with id : + idDirectory

What it means

getTransformationObjects(idDirectory, includeDeleted) returns ObjectRevision listings for transformations in a folder; any exception while reading/collecting those objects is wrapped in this KettleException that includes the folder id. The cause holds the underlying I/O or XML failure.

Solutions

  1. Resolve a fresh directory ObjectId via loadRepositoryDirectoryTree()/findDirectory before listing
  2. Ensure the running user can read the repository folder and its metadata files
  3. Check e.getCause() for the concrete failure and fix storage/sync issues
  4. Refresh repository state after any out-of-band modification of folders

Example fix

// before
List<RepositoryElementMetaInterface> objs = repository.getTransformationObjects(dirId, false);
// after
RepositoryDirectoryInterface dir = repository.findDirectory("/prod/etl");
if (dir == null) throw new KettleException("/prod/etl missing in repository");
List<RepositoryElementMetaInterface> objs = repository.getTransformationObjects(dir.getObjectId(), false);
Defensive patterns

Strategy: validation

Validate before calling

RepositoryDirectoryInterface dir = repository.findDirectory(folderPath);
if (dir == null) throw new KettleException("Folder " + folderPath + " not found in repository");
ObjectId dirId = dir.getObjectId();

Try / catch

try {
  objects = repository.getTransformationObjects(dirId, false);
} catch (KettleException e) {
  logger.error("getTransformationObjects failed for " + dirId + ": " + e.getCause(), e);
  throw e;
}

Prevention

When it happens

Trigger: Calling getTransformationObjects with a stale or nonexistent idDirectory, or when reading the folder's object metadata files throws IOException or XML parsing errors.

Common situations: Folder renamed/deleted externally while the client holds the old ObjectId; read-permission issues after deployment to a service account; partially synced repository folders on shared storage.

Related errors


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

Appendix: source

Thrown at engine/src/main/java/org/pentaho/di/repository/filerep/KettleFileRepository.java:1040

            String name = child.getName().getBaseName();

            if ( name.endsWith( EXT_TRANSFORMATION ) ) {

              String transName = name.substring( 0, name.length() - 4 );

              ObjectId id = new StringObjectId( calcObjectId( directory, transName, EXT_TRANSFORMATION ) );
              Date date = new Date( child.getContent().getLastModifiedTime() );
              list.add( new RepositoryObject(
                id, transName, directory, "-", date, RepositoryObjectType.TRANSFORMATION, "", false ) );
            }
          }
        }
      }

      return list;
    } catch ( Exception e ) {
      throw new KettleException( "Unable to get list of transformations in folder with id : " + idDirectory, e );
    }
  }

  @Override
  public List<RepositoryElementMetaInterface> getJobObjects( ObjectId id_directory, boolean includeDeleted ) throws KettleException {

    try {
      List<RepositoryElementMetaInterface> list = new ArrayList<RepositoryElementMetaInterface>();

      RepositoryDirectoryInterface tree = loadRepositoryDirectoryTree();
      RepositoryDirectoryInterface directory = tree.findDirectory( id_directory );

      String folderName = calcDirectoryName( directory );
      FileObject folder = KettleVFS.getInstance( DefaultBowl.getInstance() ).getFileObject( folderName );

      for ( FileObject child : folder.getChildren() ) {
        if ( child.getType().equals( FileType.FILE ) ) {
          if ( !child.isHidden() || !repositoryMeta.isHidingHiddenFiles() ) {

View on GitHub (pinned to f3058517a1)