pentaho/pentaho-kettle · error · KettleException

Unable to load job entry of type 'xslt' from the repository…

Error message

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

What it means

JobEntryXSLT.loadRep rethrows KettleException when reading the entry's attributes, including the indexed output_property_name/output_property_value rows, from the repository fails for the given id_jobentry.

Solutions

  1. Check the wrapped KettleException cause
  2. Verify repository database connectivity
  3. Confirm the numbered attribute rows exist for this id_jobentry
  4. Repair or upgrade the repository schema
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 an XSLT job entry from the repository where getJobEntryAttributeString throws KettleException (DB outage, missing rows, schema mismatch).

Common situations: Repository database unreachable; r_jobentry_attribute rows missing or corrupted; repository schema version drift between PDI versions.

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

Appendix: source

Thrown at plugins/xml/core/src/main/java/org/pentaho/di/job/entries/xslt/JobEntryXSLT.java:265

      xsltfactory = rep.getJobEntryAttributeString( id_jobentry, "xsltfactory" );
      if ( xsltfactory == null ) {
        xsltfactory = FACTORY_JAXP;
      }

      int nrparams = rep.countNrJobEntryAttributes( id_jobentry, "param_name" );
      int nroutputprops = rep.countNrJobEntryAttributes( id_jobentry, "output_property_name" );
      allocate( nrparams, nroutputprops );

      for ( int i = 0; i < nrparams; i++ ) {
        parameterField[i] = rep.getJobEntryAttributeString( id_jobentry, i, "param_field" );
        parameterName[i] = rep.getJobEntryAttributeString( id_jobentry, i, "param_name" );
      }
      for ( int i = 0; i < nroutputprops; i++ ) {
        outputPropertyName[i] = rep.getJobEntryAttributeString( id_jobentry, i, "output_property_name" );
        outputPropertyValue[i] = rep.getJobEntryAttributeString( id_jobentry, i, "output_property_value" );
      }
    } catch ( KettleException dbe ) {
      throw new KettleException( "Unable to load job entry of type 'xslt' 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(), "xslfilename", xslfilename );
      rep.saveJobEntryAttribute( id_job, getObjectId(), "outputfilename", outputfilename );
      rep.saveJobEntryAttribute( id_job, getObjectId(), "iffileexists", iffileexists );
      rep.saveJobEntryAttribute( id_job, getObjectId(), "addfiletoresult", addfiletoresult );
      rep.saveJobEntryAttribute( id_job, getObjectId(), "filenamesfromprevious", filenamesfromprevious );
      rep.saveJobEntryAttribute( id_job, getObjectId(), "xsltfactory", xsltfactory );

      for ( int i = 0; i < parameterName.length; i++ ) {
        rep.saveJobEntryAttribute( id_job, getObjectId(), i, "param_field", parameterField[i] );
        rep.saveJobEntryAttribute( id_job, getObjectId(), i, "param_name", parameterName[i] );
      }

View on GitHub (pinned to f3058517a1)