pentaho/pentaho-kettle · error · KettleXMLException

JobEntryDeleteResultFilenames.CanNotLoadFromRep

Error message

JobEntryDeleteResultFilenames.CanNotLoadFromRep

What it means

Thrown when reading a 'Delete Result Filenames' job entry's attributes (foldername, wildcard settings) from the repository fails. loadRep() catches the KettleException from the repository getters and rethrows as KettleXMLException with the entry id and the DB error message. Despite the XML exception type, the failure is repository/database related.

Solutions

  1. Check dbe.getMessage() in the thrown error for the underlying repository problem
  2. Restore database connectivity and retry the job load
  3. Verify the repository schema is current (run upgrade scripts)
  4. Re-save the entry from Spoon to rebuild its attribute rows

Example fix

// before
entry.loadRep(rep, metaStore, idJobEntry, databases, slaveServers); // throws KettleXMLException on DB error
// after
try {
  entry.loadRep(rep, metaStore, idJobEntry, databases, slaveServers);
} catch (KettleXMLException e) {
  logError("Repo load failed for id " + idJobEntry + ": " + e.getMessage());
  throw e;
}
Defensive patterns

Strategy: try-catch

Validate before calling

if (rep instanceof KettleDatabaseRepository
    && !((KettleDatabaseRepository) rep).isConnected()) {
  throw new IllegalStateException("Connect repository before loadRep");
}

Try / catch

try {
  entry.loadRep(rep, metaStore, idJobEntry, databases, slaveServers);
} catch (KettleXMLException e) {
  // note: DB failure is wrapped in KettleXMLException here
  logError("Repo load failed id=" + idJobEntry + ": " + e.getMessage());
  throw e;
}

Prevention

When it happens

Trigger: Calling loadRep() while loading a job from a database repository when any rep.getJobEntryAttribute*() call throws: connection failure, missing table, or repository-level error.

Common situations: Repository DB unreachable mid-load; schema version mismatch after upgrade; orphaned/missing attribute rows; insufficient SELECT permissions on r_jobentry_attribute.

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/faaa8feee9451f9e. Report an issue: GitHub.

Appendix: source

Thrown at engine/src/main/java/org/pentaho/di/job/entries/deleteresultfilenames/JobEntryDeleteResultFilenames.java:115

      specifywildcard = "Y".equalsIgnoreCase( XMLHandler.getTagValue( entrynode, "specify_wildcard" ) );
      wildcard = XMLHandler.getTagValue( entrynode, "wildcard" );
      wildcardexclude = XMLHandler.getTagValue( entrynode, "wildcardexclude" );

    } catch ( KettleXMLException xe ) {
      throw new KettleXMLException( BaseMessages.getString(
        PKG, "JobEntryDeleteResultFilenames.CanNotLoadFromXML", xe.getMessage() ) );
    }
  }

  public void loadRep( Repository rep, IMetaStore metaStore, ObjectId id_jobentry, List<DatabaseMeta> databases,
    List<SlaveServer> slaveServers ) throws KettleException {
    try {
      foldername = rep.getJobEntryAttributeString( id_jobentry, "foldername" );
      specifywildcard = rep.getJobEntryAttributeBoolean( id_jobentry, "specify_wildcard" );
      wildcard = rep.getJobEntryAttributeString( id_jobentry, "wildcard" );
      wildcardexclude = rep.getJobEntryAttributeString( id_jobentry, "wildcardexclude" );
    } catch ( KettleException dbe ) {
      throw new KettleXMLException( BaseMessages.getString(
        PKG, "JobEntryDeleteResultFilenames.CanNotLoadFromRep", "" + id_jobentry, dbe.getMessage() ) );
    }
  }

  public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_job ) throws KettleException {
    try {
      rep.saveJobEntryAttribute( id_job, getObjectId(), "foldername", foldername );
      rep.saveJobEntryAttribute( id_job, getObjectId(), "specify_wildcard", specifywildcard );
      rep.saveJobEntryAttribute( id_job, getObjectId(), "wildcard", wildcard );
      rep.saveJobEntryAttribute( id_job, getObjectId(), "wildcardexclude", wildcardexclude );
    } catch ( KettleDatabaseException dbe ) {
      throw new KettleXMLException( BaseMessages.getString(
        PKG, "JobEntryDeleteResultFilenames.CanNotSaveToRep", "" + id_job, dbe.getMessage() ) );
    }
  }

  public void setSpecifyWildcard( boolean specifywildcard ) {
    this.specifywildcard = specifywildcard;

View on GitHub (pinned to f3058517a1)