pentaho/pentaho-kettle · error · KettleException

Unable to load job entry of type 'unzip' from the…

Error message

Unable to load job entry of type 'unzip' from the repository for id_jobentry=

What it means

JobEntryUnZip.loadRep() wraps a KettleException from repository attribute reads into a KettleException with message "Unable to load job entry of type 'unzip' from the repository for id_jobentry=" plus the id. It means the stored attributes of the unzip job entry could not be loaded from the repository.

Solutions

  1. Verify repository DB connectivity and re-open the job.
  2. Check R_JOBENTRY_ATTRIBUTE rows exist for the reported id_jobentry; re-save the entry from Spoon if missing.
  3. Run repository upgrade scripts for your Pentaho version.
  4. Load the job from a .kjb XML file instead to bypass the repository.

Example fix

// before: loading job straight from a broken repository
JobMeta job = new JobMeta(log, rep, id_job, metaStore);
// after: fall back to XML load on failure
JobMeta job;
try {
  job = new JobMeta(log, rep, id_job, metaStore);
} catch ( KettleException e ) {
  job = new JobMeta(log, jobFileUrl, metaStore); // load from .kjb fallback
}
Defensive patterns

Strategy: fallback

Validate before calling

// Check repository session and persisted id before loadRep
if ( !rep.isConnected() ) throw new KettleException("Repository not connected");
if ( jobEntry.getObjectId() == null ) throw new KettleException("Entry has no repository id");

Type guard

boolean repositoryLoadPossible(Repository rep, ObjectId id_jobentry) {
  return rep != null && rep.isConnected() && id_jobentry != null;
}

Try / catch

try {
  jobEntry.loadRep(rep, metaStore, id_jobentry, databases, slaveServers);
} catch ( KettleException e ) {
  logBasic("Repository load failed, falling back to XML: " + e.getMessage());
  jobEntry.loadXML(entrynode, databases, slaveServers, rep, metaStore); // fallback
}

Prevention

When it happens

Trigger: Calling loadRep(rep, metaStore, id_jobentry, ...) when the repository read of attributes such as 'iffileexists', 'create_move_to_directory' or 'setOriginalModificationDate' throws — DB unavailable, missing rows, or schema mismatch.

Common situations: Repository database outage during job load; rows deleted or never written for that id_jobentry; upgrading Pentaho against an old repository schema.

Understand the failure class

Background: Database query failed: Internal Server Error 500s wrapping SQL, Prisma, and connection failures — what to check first — this error's family across 16 libraries.

Related errors


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

Appendix: source

Thrown at engine/src/main/java/org/pentaho/di/job/entries/unzip/JobEntryUnZip.java:269

      isfromprevious = rep.getJobEntryAttributeBoolean( id_jobentry, "isfromprevious" );
      adddate = rep.getJobEntryAttributeBoolean( id_jobentry, "adddate" );
      addtime = rep.getJobEntryAttributeBoolean( id_jobentry, "addtime" );
      addOriginalTimestamp = rep.getJobEntryAttributeBoolean( id_jobentry, "addOriginalTimestamp" );
      SpecifyFormat = rep.getJobEntryAttributeBoolean( id_jobentry, "SpecifyFormat" );
      date_time_format = rep.getJobEntryAttributeString( id_jobentry, "date_time_format" );
      rootzip = rep.getJobEntryAttributeBoolean( id_jobentry, "rootzip" );
      createfolder = rep.getJobEntryAttributeBoolean( id_jobentry, "createfolder" );
      nr_limit = rep.getJobEntryAttributeString( id_jobentry, "nr_limit" );
      wildcardSource = rep.getJobEntryAttributeString( id_jobentry, "wildcardSource" );
      success_condition = rep.getJobEntryAttributeString( id_jobentry, "success_condition" );
      if ( Utils.isEmpty( success_condition ) ) {
        success_condition = SUCCESS_IF_NO_ERRORS;
      }
      iffileexist = getIfFileExistsInt( rep.getJobEntryAttributeString( id_jobentry, "iffileexists" ) );
      createMoveToDirectory = rep.getJobEntryAttributeBoolean( id_jobentry, "create_move_to_directory" );
      setOriginalModificationDate = rep.getJobEntryAttributeBoolean( id_jobentry, "setOriginalModificationDate" );
    } catch ( KettleException dbe ) {
      throw new KettleException( "Unable to load job entry of type 'unzip' from the repository for id_jobentry="
        + 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(), "afterunzip", afterunzip );
      rep.saveJobEntryAttribute( id_job, getObjectId(), "wildcard", wildcard );
      rep.saveJobEntryAttribute( id_job, getObjectId(), "wildcardexclude", wildcardexclude );
      rep.saveJobEntryAttribute( id_job, getObjectId(), "targetdirectory", 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(), "addtime", addtime );
      rep.saveJobEntryAttribute( id_job, getObjectId(), "adddate", adddate );
      rep.saveJobEntryAttribute( id_job, getObjectId(), "addOriginalTimestamp", addOriginalTimestamp );
      rep.saveJobEntryAttribute( id_job, getObjectId(), "SpecifyFormat", SpecifyFormat );

View on GitHub (pinned to f3058517a1)