pentaho/pentaho-kettle · error · KettleException

Unable to get object information for object with id= +…

Error message

Unable to get object information for object with id= + objectId

What it means

KettleFileRepository.getObjectInformation() throws this KettleException when it cannot gather metadata (name, directory, last-modified time, type) for the repository object with the given ObjectId. Typically the underlying VFS FileObject cannot be resolved or read.

Solutions

  1. Inspect the cause to see which file path failed
  2. Verify the object file exists in the repository base directory
  3. Refresh the repository directory tree and re-resolve the ObjectId
  4. Check base_directory configuration and filesystem permissions

Example fix

// before
RepositoryObject info = repo.getObjectInformation(id, RepositoryObjectType.TRANSFORMATION); // throws if missing
// after
if (repo.exists(id)) { // or wrap in try-catch for KettleException
  RepositoryObject info = repo.getObjectInformation(id, RepositoryObjectType.TRANSFORMATION);
}
Defensive patterns

Strategy: try-catch

Validate before calling

if (!repo.exists(objectId)) {
  throw new IllegalStateException("Object missing: " + objectId);
}

Try / catch

try {
  RepositoryObject info = repo.getObjectInformation(id, RepositoryObjectType.JOB);
} catch (KettleException e) {
  log.error("Object info unavailable for " + id, e);
}

Prevention

When it happens

Trigger: Calling getObjectInformation(ObjectId, RepositoryObjectType) when the object's file does not exist under the resolved directory path, the directory id does not resolve, or reading content.lastModifiedTime fails.

Common situations: File deleted externally after being listed; typo'd or stale object id; repository base directory misconfigured so relative paths resolve incorrectly; also hit indirectly via loadJob()/loadTransformation() which call getObjectInformation first.

Understand the failure class

Background: "File not found" and ENOENT errors: why libraries can't find a file that should exist — this error's family across 50 libraries.

Related errors


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

Appendix: source

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

      FileName fname = fileObject.getName();
      String name = fname.getBaseName();
      if ( !Utils.isEmpty( fname.getExtension() ) && name.length() > fname.getExtension().length() ) {
        name = name.substring( 0, name.length() - fname.getExtension().length() - 1 );
      }

      String filePath = fileObject.getParent().getName().getPath();
      final FileObject baseDirObject = KettleVFS.getInstance( DefaultBowl.getInstance() )
        .getFileObject( repositoryMeta.getBaseDirectory() );
      final int baseDirObjectPathLength = baseDirObject.getName().getPath().length();
      final String dirPath =
        baseDirObjectPathLength <= filePath.length() ? filePath.substring( baseDirObjectPathLength ) : "/";
      RepositoryDirectoryInterface directory = loadRepositoryDirectoryTree().findDirectory( dirPath );
      Date lastModified = new Date( fileObject.getContent().getLastModifiedTime() );

      return new RepositoryObject( objectId, name, directory, "-", lastModified, objectType, "", false );

    } catch ( Exception e ) {
      throw new KettleException( "Unable to get object information for object with id=" + objectId, e );
    }
  }

  @Override
  public JobMeta loadJob( ObjectId idJob, String versionLabel ) throws KettleException {
    RepositoryObject jobInfo = getObjectInformation( idJob, RepositoryObjectType.JOB );
    return loadJob( jobInfo.getName(), jobInfo.getRepositoryDirectory(), null, versionLabel );
  }

  @Override
  public TransMeta loadTransformation( ObjectId idTransformation, String versionLabel ) throws KettleException {
    RepositoryObject jobInfo = getObjectInformation( idTransformation, RepositoryObjectType.TRANSFORMATION );
    return loadTransformation( jobInfo.getName(), jobInfo.getRepositoryDirectory(), null, true, versionLabel );
  }

  @Override
  public String getConnectMessage() {
    return null;

View on GitHub (pinned to f3058517a1)