pentaho/pentaho-kettle · error · KettleException
Unable to load job from path [" + absPath + "]
Error message
Unable to load job from path [" + absPath + "]
What it means
Catch-all wrapper in PurRepository.loadJob(jobname, ...): any non-KettleException during job load (path lookup, file/version read, JobMeta build, JobMetaLoaded extension point) is re-thrown as a KettleException with the absPath in the message and the original exception as cause.
Solutions
- Check e.getCause() to identify the underlying failure
- Verify repository connectivity and re-authenticate
- Open the job in Spoon to validate the stored content is not corrupt
- Fix or disable JobMetaLoaded extension-point plugins
Example fix
// before
} catch ( Exception e ) {
throw new KettleException( "Unable to load job from path [" + absPath + "]", e );
}
// after
} catch ( Exception e ) {
log.error("Job load failed: " + absPath + ", root cause: " + e.getCause(), e);
throw new KettleException( "Unable to load job from path [" + absPath + "]", e );
} Defensive patterns
Strategy: try-catch
Validate before calling
if (!repo.isConnected()) repo.connect("user", "pass");
if (!repo.exists(jobPath, RepositoryObjectType.JOB)) {
throw new KettleException("Missing job: " + jobPath);
} Try / catch
try {
return repo.loadJob(path, dir, null, null);
} catch (KettleException e) {
log.error("Job load failed for " + path + ", cause=" + e.getCause(), e);
throw e;
} Prevention
- Always inspect the wrapped cause exception
- Verify connectivity before load operations
- Open the job in Spoon to rule out corruption
- Audit JobMetaLoaded extension-point plugins
When it happens
Trigger: Repository connection failure, getDataAtVersionForRead error, buildJobMeta failure on corrupt content, or a JobMetaLoaded extension point throwing during loadJob(String path,...).
Common situations: BI server unreachable mid-load; corrupt job XML; plugin extension point throwing; ACL errors surfaced as generic exceptions; null revision data for the requested version.
Understand the failure class
Background: "failed to read file", EACCES, ENOENT and "could not read <path>" errors: when a program can't read a file from disk — this error's family across 49 libraries.
Related errors
- Unable to load job with id [" + idJob + "]
- PurRepository.ERROR_0003_JOB_NOT_FOUND
- Unable to load transformation from path [" + absPath + "]
- Unable to load transformation with id [" + idTransformation…
- Could not retrieve version history of object with path
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/bba04ec23cf5b6d4.
Report an issue: GitHub.
Appendix: source
Thrown at plugins/pur/core/src/main/java/org/pentaho/di/repository/pur/PurRepository.java:2610
ObjectRevision revision = null;
try {
file = pur.getFile( absPath );
if ( versionId != null ) {
// need to go back to server to get versioned info
file = pur.getFileAtVersion( file.getId(), versionId );
}
data = pur.getDataAtVersionForRead( file.getId(), versionId, NodeRepositoryFileData.class );
} finally {
readWriteLock.readLock().unlock();
}
revision = getObjectRevision( new StringObjectId( file.getId().toString() ), versionId );
JobMeta jobMeta = buildJobMeta( file, parentDir, data, revision, parent );
ExtensionPointHandler.callExtensionPoint( log, KettleExtensionPoint.JobMetaLoaded.id, jobMeta );
return jobMeta;
} catch ( Exception e ) {
throw new KettleException( "Unable to load job from path [" + absPath + "]", e );
}
}
private JobMeta buildJobMeta( final RepositoryFile file, final RepositoryDirectoryInterface parentDir,
final NodeRepositoryFileData data, final ObjectRevision revision,
final VariableSpace parent )
throws KettleException {
JobMeta jobMeta = new JobMeta( parent );
jobMeta.setName( file.getTitle() );
jobMeta.setFilename( file.getPath() );
jobMeta.setDescription( file.getDescription() );
jobMeta.setObjectId( new StringObjectId( file.getId().toString() ) );
jobMeta.setObjectRevision( revision );
jobMeta.setRepository( this );
jobMeta.setRepositoryDirectory( parentDir );
jobMeta.setMetaStore( MetaStoreConst.getDefaultMetastore() );
ExtensionPointHandler.callExtensionPoint( log, KettleExtensionPoint.JobSharedObjectsLoaded.id, jobMeta );
jobDelegate.dataNodeToElement( data.getNode(), jobMeta );View on GitHub (pinned to f3058517a1)