pentaho/pentaho-kettle · error · KettleException
Unable to get the list of repository objects from the…
Error message
Unable to get the list of repository objects from the repository
What it means
GetRepositoryNames.getRepositoryObjects() enumerates repository objects (via repository.getRepositoryObject or directory listings) to build the step's file list. Any exception during enumeration is wrapped in a KettleException with this message. The step init() fails, so the transformation cannot start.
Solutions
- Ensure the transformation is connected to a valid repository before running the step
- Verify the configured repository directory exists and is listable by the repository user
- Re-login/reconnect the repository session and retry
- Inspect the cause for the underlying repository/DB error
Example fix
// before
step.init(...); // repository not connected
// after
if (rep != null && rep.isConnected()) {
step.init(...);
} else {
rep.connect(user, pass);
step.init(...);
} Defensive patterns
Strategy: try-catch
Validate before calling
if (rep == null || !rep.isConnected()) { throw new IllegalStateException("Repository connection required by GetRepositoryNames step"); } Try / catch
try { ok = step.init(beforeTrans); } catch (KettleException e) { log.error("Repository object listing failed; check connection/directory/permissions", e); return false; } Prevention
- Run repository-dependent steps only with an active repository session
- Verify the configured directory path exists in the repository
- Confirm the repository user can list objects in target directories
- Re-authenticate before long-running executions to avoid expired sessions
When it happens
Trigger: Initializing the step while connected to a repository: the repository is disconnected/unavailable, the target directory does not exist, or the repository user lacks rights to list objects in the directory.
Common situations: Running the transformation on a slave/cluster node without a repository connection; repository session expired; wrong repository directory path configured; permissions restricted on the directory.
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
- Error initialize repo:// VFS
- Repository.NoRepositoryExists.Messages
- Unable to obtain a IUnifiedRepository instance
- AbortMeta.Exception.UnableToSaveStepInfoToRepository
- AbsSecurityProvider.ERROR_0002_UNABLE_TO_ACCESS_IS_ALLOWED
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/231ec43df898c476.
Report an issue: GitHub.
Appendix: source
Thrown at plugins/get-repository-names/impl/src/main/java/org/pentaho/di/trans/steps/getrepositorynames/GetRepositoryNames.java:203
RepositoryDirectoryInterface tree = repository.loadRepositoryDirectoryTree();
// Loop over the directories and add the discovered objects to the list...
//
for ( int i = 0; i < meta.getDirectory().length; i++ ) {
RepositoryDirectoryInterface dir = tree.findDirectory( environmentSubstitute( meta.getDirectory()[i] ) );
if ( dir != null ) {
List<RepositoryElementMetaInterface> objects =
getRepositoryObjects( repository, dir, meta.getIncludeSubFolders()[i], environmentSubstitute( meta
.getNameMask()[i] ), environmentSubstitute( meta.getExcludeNameMask()[i] ) );
list.addAll( objects );
}
}
}
return list;
} catch ( Exception e ) {
throw new KettleException( "Unable to get the list of repository objects from the repository", e );
}
}
private List<RepositoryElementMetaInterface> getRepositoryObjects( Repository repository,
RepositoryDirectoryInterface directory, boolean subdirs, String nameMask, String excludeNameMask )
throws KettleException {
List<RepositoryElementMetaInterface> list = new ArrayList<RepositoryElementMetaInterface>();
List<RepositoryElementMetaInterface> objects = new ArrayList<RepositoryElementMetaInterface>();
if ( meta.getObjectTypeSelection().areTransformationsSelected() ) {
objects.addAll( repository.getTransformationObjects( directory.getObjectId(), false ) );
}
if ( meta.getObjectTypeSelection().areJobsSelected() ) {
objects.addAll( repository.getJobObjects( directory.getObjectId(), false ) );
}
for ( RepositoryElementMetaInterface object : objects ) {
boolean add = false;
if ( Utils.isEmpty( nameMask ) || object.getName().matches( nameMask ) ) {View on GitHub (pinned to f3058517a1)