pentaho/pentaho-kettle · error · KettleException

XsltMeta.Exception.UnexpectedErrorInReadingStepInfo

Error message

XsltMeta.Exception.UnexpectedErrorInReadingStepInfo

What it means

Thrown by XsltMeta.readRep when an exception occurs while reading the step's settings from a repository database. All getStepAttributeString/int calls are wrapped and rethrown as a KettleException. Indicates the persisted step attributes in the repository are unreadable or inconsistent.

Solutions

  1. Check the cause exception for the underlying repository/DB error and fix connectivity or schema issues
  2. Run the repository upgrade/repair tooling for your Pentaho version
  3. Re-save the step (open and OK the dialog) to rewrite its attributes, or recreate the step
  4. Restore affected repository tables from backup
Defensive patterns

Strategy: try-catch

Try / catch

try {
    StepMetaInterface meta = stepMeta.getStepMetaInterface();
    meta.readRep(rep, metaStore, idStep, databases);
} catch (KettleException e) {
    log.error("Repository read failed for step: " + e.getMessage(), e.getCause());
    // verify repository connectivity/schema before retry
}

Prevention

When it happens

Trigger: Repository connection/schema issues during readRep: missing r_step_attribute rows, database errors, null values where numeric parse expected, or repository metadata corruption for this step's id.

Common situations: Repository schema version mismatch after a Pentaho upgrade; interrupted repository save left partial attributes; DB connectivity failures mid-read; manually editing repository tables.

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

Appendix: source

Thrown at plugins/xml/core/src/main/java/org/pentaho/di/trans/steps/xslt/XsltMeta.java:375

      } else {
        xslFieldIsAFile = "true".equalsIgnoreCase( isAfile );
      }
      xslFactory = rep.getStepAttributeString( id_step, "xslfactory" );

      int nrparams = rep.countNrStepAttributes( id_step, "param_name" );
      int nroutputprops = rep.countNrStepAttributes( id_step, "output_property_name" );
      allocate( nrparams, nroutputprops );

      for ( int i = 0; i < nrparams; i++ ) {
        parameterField[i] = rep.getStepAttributeString( id_step, i, "param_field" );
        parameterName[i] = rep.getStepAttributeString( id_step, i, "param_name" );
      }
      for ( int i = 0; i < nroutputprops; i++ ) {
        outputPropertyName[i] = rep.getStepAttributeString( id_step, i, "output_property_name" );
        outputPropertyValue[i] = rep.getStepAttributeString( id_step, i, "output_property_value" );
      }
    } catch ( Exception e ) {
      throw new KettleException( BaseMessages.getString( PKG, "XsltMeta.Exception.UnexpectedErrorInReadingStepInfo" ),
          e );
    }
  }

  public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_transformation, ObjectId id_step )
    throws KettleException {
    try {
      rep.saveStepAttribute( id_transformation, id_step, "xslfilename", xslFilename );
      rep.saveStepAttribute( id_transformation, id_step, "fieldname", fieldName );
      rep.saveStepAttribute( id_transformation, id_step, "resultfieldname", resultFieldname );

      rep.saveStepAttribute( id_transformation, id_step, "xslfilefield", xslFileField );

      rep.saveStepAttribute( id_transformation, id_step, "xslfilefielduse", xslFileFieldUse );
      rep.saveStepAttribute( id_transformation, id_step, "xslfieldisafile", xslFieldIsAFile );

      rep.saveStepAttribute( id_transformation, id_step, "xslfactory", xslFactory );

View on GitHub (pinned to f3058517a1)