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
- Verify id_directory resolves to a real folder under the repository base directory (check the directory tree / findDirectory)
- Check repository connection settings point at the correct base folder and the process has read permissions on it
- Inspect the chained cause (e.getCause()) to identify the actual I/O or XML parsing failure
- 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
- Resolve ObjectIds from a freshly loaded directory tree, never cache them across sessions
- Verify repository base directory and read permissions after environment changes
- Watch for external folder deletions/renames when the repo folder is shared
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
- Unable to get list of transformations in folder with id : +…
- Unable to get root object ids for extension [ + extension +…
- Unable to load the directory tree from this file repository
- Unable to write log entry to file [ + logfile + ]
- Class [ + repositoryElement.getClass().getName() + ] needs…
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)