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

  1. Ensure the transformation is connected to a valid repository before running the step
  2. Verify the configured repository directory exists and is listable by the repository user
  3. Re-login/reconnect the repository session and retry
  4. 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

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


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)