pentaho/pentaho-kettle · error · KettleException
JobEntryZipFile.UnableLoadJobEntryRep
Error message
JobEntryZipFile.UnableLoadJobEntryRep
What it means
JobEntryZipFile.loadRep() throws this KettleException when reading the zip job entry's attributes from the repository fails. The message includes the job entry id and the original KettleException (typically KettleDatabaseException) as cause.
Solutions
- Verify repository DB connectivity and that id_jobentry exists in r_jobentry_attribute
- Check the cause exception for the underlying SQL/database error
- Run repository upgrade scripts for your PDI version
- Re-save the job entry in Spoon to repopulate missing attribute rows
Example fix
// before: loading a deleted entry
jobEntry.loadRep( rep, metaStore, deletedId, databases, slaveServers );
// after: verify existence first
if ( rep.getJobEntry( id_jobentry ) == null ) { throw new KettleException( "Job entry not found" ); }
jobEntry.loadRep( rep, metaStore, id_jobentry, databases, slaveServers ); Defensive patterns
Strategy: try-catch
Validate before calling
// verify entry exists before loadRep ObjectId id = rep.findJobEntryId( entryName, idJob ); if ( id == null ) throw new KettleException( "Job entry not found in repository" );
Try / catch
try {
jobEntry.loadRep( rep, metaStore, id_jobentry, databases, slaveServers );
} catch ( KettleException e ) {
logError( "Failed to load zip entry from repo " + id_jobentry + ": " + e.getCause() );
// retry after reconnect for transient DB errors
} Prevention
- Reconnect to the repository after long-running operations
- Run schema migration scripts on upgrade
- Confirm ids exist before loading (no stale references)
When it happens
Trigger: Calling loadRep against an unavailable/corrupt repository, an invalid id_jobentry, or when rep.getJobEntryAttributeString/Boolean throws a KettleDatabaseException for attributes like 'SpecifyFormat', 'date_time_format', 'stored_source_path_depth'.
Common situations: Repository DB connectivity loss; schema drift after PDI upgrade (missing r_jobentry_attribute columns/rows); loading a deleted entry id; DB permission changes.
Related errors
- Edi2Xml.Exception.UnableToSaveStepInfoToRepository
- error reading step with id_step=
- JobEntryZipFile.UnableSaveJobEntryRep
- ScriptMeta.Exception.UnableToSaveStepInfo
- ScriptMeta.Exception.UnexpectedErrorInReadingStepInfo
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/89a19c1ea6416f03.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/job/entries/zipfile/JobEntryZipFile.java:216
compressionRate = (int) rep.getJobEntryAttributeInteger( id_jobentry, "compressionrate" );
ifZipFileExists = (int) rep.getJobEntryAttributeInteger( id_jobentry, "ifzipfileexists" );
afterZip = (int) rep.getJobEntryAttributeInteger( id_jobentry, "afterzip" );
wildCard = rep.getJobEntryAttributeString( id_jobentry, "wildcard" );
excludeWildCard = rep.getJobEntryAttributeString( id_jobentry, "wildcardexclude" );
sourceDirectory = rep.getJobEntryAttributeString( id_jobentry, "sourcedirectory" );
movetoDirectory = rep.getJobEntryAttributeString( id_jobentry, "movetodirectory" );
addFileToResult = rep.getJobEntryAttributeBoolean( id_jobentry, "addfiletoresult" );
isFromPrevious = rep.getJobEntryAttributeBoolean( id_jobentry, "isfromprevious" );
createParentFolder = rep.getJobEntryAttributeBoolean( id_jobentry, "createparentfolder" );
addDate = rep.getJobEntryAttributeBoolean( id_jobentry, "adddate" );
addTime = rep.getJobEntryAttributeBoolean( id_jobentry, "addtime" );
specifyFormat = rep.getJobEntryAttributeBoolean( id_jobentry, "SpecifyFormat" );
dateTimeFormat = rep.getJobEntryAttributeString( id_jobentry, "date_time_format" );
createMoveToDirectory = rep.getJobEntryAttributeBoolean( id_jobentry, "createMoveToDirectory" );
includingSubFolders = rep.getJobEntryAttributeBoolean( id_jobentry, "include_subfolders" );
storedSourcePathDepth = rep.getJobEntryAttributeString( id_jobentry, "stored_source_path_depth" );
} catch ( KettleException dbe ) {
throw new KettleException( BaseMessages.getString( PKG, "JobEntryZipFile.UnableLoadJobEntryRep", ""
+ id_jobentry ), dbe );
}
}
public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_job ) throws KettleException {
try {
rep.saveJobEntryAttribute( id_job, getObjectId(), "zipfilename", zipFilename );
rep.saveJobEntryAttribute( id_job, getObjectId(), "compressionrate", compressionRate );
rep.saveJobEntryAttribute( id_job, getObjectId(), "ifzipfileexists", ifZipFileExists );
rep.saveJobEntryAttribute( id_job, getObjectId(), "afterzip", afterZip );
rep.saveJobEntryAttribute( id_job, getObjectId(), "wildcard", wildCard );
rep.saveJobEntryAttribute( id_job, getObjectId(), "wildcardexclude", excludeWildCard );
rep.saveJobEntryAttribute( id_job, getObjectId(), "sourcedirectory", sourceDirectory );
rep.saveJobEntryAttribute( id_job, getObjectId(), "movetodirectory", movetoDirectory );
rep.saveJobEntryAttribute( id_job, getObjectId(), "addfiletoresult", addFileToResult );
rep.saveJobEntryAttribute( id_job, getObjectId(), "isfromprevious", isFromPrevious );
rep.saveJobEntryAttribute( id_job, getObjectId(), "createparentfolder", createParentFolder );
rep.saveJobEntryAttribute( id_job, getObjectId(), "addtime", addTime );View on GitHub (pinned to f3058517a1)