pentaho/pentaho-kettle · error · KettleException

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

Error message

Unable to load job entry of type 'xsdvalidator' from the repository for id_jobentry=<id_jobentry>

What it means

JobEntryXSDValidator.loadRep rethrows KettleException when reading the entry's attributes (xmlfilename, xsdfilename, allowExternalEntities) from the Pentaho repository fails for the given id_jobentry. The database-level KettleException cause is preserved.

Solutions

  1. Check the wrapped KettleException cause for the database error
  2. Verify repository database connectivity
  3. Confirm the r_jobentry_attribute rows exist for this id_jobentry
  4. Upgrade/repair the repository schema to match your PDI version
Defensive patterns

Strategy: try-catch

Try / catch

try {
  entry.loadRep( rep, metaStore, id_jobentry, databases, slaveServers );
} catch ( KettleException e ) {
  logError( "Repository load failed for id_jobentry=" + id_jobentry + ": " + e.getCause(), e );
  throw e;
}

Prevention

When it happens

Trigger: Loading the job entry from a repository where rep.getJobEntryAttributeString throws a KettleException (connection failure, missing rows, schema mismatch).

Common situations: Repository database temporarily unreachable; repository schema version mismatch; entry rows deleted directly in the database; corrupted repository record.

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

Appendix: source

Thrown at plugins/xml/core/src/main/java/org/pentaho/di/job/entries/xsdvalidator/JobEntryXSDValidator.java:132

      super.loadXML( entrynode, databases, slaveServers );
      xmlfilename = XMLHandler.getTagValue( entrynode, "xmlfilename" );
      xsdfilename = XMLHandler.getTagValue( entrynode, "xsdfilename" );
      allowExternalEntities = YES.equalsIgnoreCase( XMLHandler.getTagValue( entrynode, "allowExternalEntities" ) );

    } catch ( KettleXMLException xe ) {
      throw new KettleXMLException( "Unable to load job entry of type 'xsdvalidator' from XML node", xe );
    }
  }

  public void loadRep( Repository rep, IMetaStore metaStore, ObjectId id_jobentry, List<DatabaseMeta> databases,
      List<SlaveServer> slaveServers ) throws KettleException {
    try {
      xmlfilename = rep.getJobEntryAttributeString( id_jobentry, "xmlfilename" );
      xsdfilename = rep.getJobEntryAttributeString( id_jobentry, "xsdfilename" );
      allowExternalEntities =
        Boolean.parseBoolean( rep.getJobEntryAttributeString( id_jobentry, "allowExternalEntities" ) );
    } catch ( KettleException dbe ) {
      throw new KettleException( "Unable to load job entry of type 'xsdvalidator' 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(), "xmlfilename", xmlfilename );
      rep.saveJobEntryAttribute( id_job, getObjectId(), "xsdfilename", xsdfilename );
      rep.saveJobEntryAttribute( id_job, getObjectId(), "allowExternalEntities", allowExternalEntities );

    } catch ( KettleDatabaseException dbe ) {
      throw new KettleException( "Unable to save job entry of type 'xsdvalidator' to the repository for id_job="
          + id_job, dbe );
    }
  }

  public String getRealxmlfilename() {
    return environmentSubstitute( getxmlFilename() );

View on GitHub (pinned to f3058517a1)