pentaho/pentaho-kettle · error · KettleException

Unable to get list of transformations names in folder with…

Error message

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

What it means

KettleFileRepository.getTransformationNames(ObjectId, boolean) wraps any exception thrown while listing transformation names in a repository directory into this KettleException. The file repository reads directory metadata/objects from the filesystem, so any I/O, path, or parsing failure during the listing surfaces here with the folder's ObjectId in the message. The original exception is attached as the cause.

Solutions

  1. Verify id_directory resolves to a real folder under the repository base directory (check the directory tree / findDirectory)
  2. Check repository connection settings point at the correct base folder and the process has read permissions on it
  3. Inspect the chained cause (e.getCause()) to identify the actual I/O or XML parsing failure
  4. If the folder was deleted, reload the repository directory tree (loadRepositoryDirectoryTree) and obtain a fresh ObjectId

Example fix

// before
List<String> names = repository.getTransformationNames(oldDirId, false);
// after
RepositoryDirectoryInterface dir = repository.loadRepositoryDirectoryTree().findDirectory("/home/dev");
if (dir == null) { throw new KettleException("Directory not found"); }
List<String> names = repository.getTransformationNames(dir.getObjectId(), false);
Defensive patterns

Strategy: try-catch

Validate before calling

RepositoryDirectoryInterface dir = repository.findDirectory("/target/folder");
if (dir == null) throw new KettleException("Folder does not exist in repository");

Try / catch

try {
  List<String> names = repository.getTransformationNames(dirId, false);
} catch (KettleException e) {
  logger.error("Listing transformations failed for dir " + dirId + ": " + e.getCause(), e);
  throw new KettleException("Verify repository folder and permissions", e);
}

Prevention

When it happens

Trigger: Calling getTransformationNames(id_directory, includeDeleted) when the directory id does not map to an existing folder, the underlying directory file(s) are unreadable/corrupt, or VFS fails to resolve the directory path.

Common situations: Repository folder deleted or renamed outside Pentaho while an ObjectId is cached in a job; wrong repository base directory configured in spoon.properties or the repository connection dialog; file-system permission problems; a corrupted .ktr metadata file inside the folder.

Related errors


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

Appendix: source

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

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

      for ( FileObject child : folder.getChildren() ) {
        if ( child.getType().equals( FileType.FILE ) ) {
          if ( !child.isHidden() || !repositoryMeta.isHidingHiddenFiles() ) {
            String name = child.getName().getBaseName();

            if ( name.endsWith( EXT_JOB ) ) {

              String jobName = name.substring( 0, name.length() - 4 );
              list.add( jobName );
            }
          }
        }
      }

      return list.toArray( new String[list.size()] );
    } catch ( Exception e ) {
      throw new KettleException(
        "Unable to get list of transformations names in folder with id : " + id_directory, e );
    }
  }

  public ObjectId[] getJobNoteIDs( ObjectId id_job ) throws KettleException {
    return new ObjectId[] {};
  }

  @Override
  public String[] getJobsUsingDatabase( ObjectId id_database ) throws KettleException {
    return new String[] {};
  }

  @Override
  public String getName() {

    return repositoryMeta.getName();
  }

View on GitHub (pinned to f3058517a1)