pentaho/pentaho-kettle · error · KettleException

Unexpected error reading step information from the…

Error message

Unexpected error reading step information from the repository

What it means

AddXMLMeta.readRep loads the step's settings from a repository (database) by calling rep.getStepAttributeInteger/Boolean/String. Any repository exception (connection failure, missing attributes, schema problems) is wrapped in a KettleException with this fixed message; the cause carries repository detail.

Solutions

  1. Check repository DB connectivity and re-open the transformation
  2. Verify r_step_attribute rows for the step id exist and are intact
  3. Re-save the step in Spoon to rewrite its repository attributes
  4. Check PDI version compatibility with the repository schema

Example fix

// before
KettleException ke; logError(ke.getMessage());
// after
logError("Repository read failed", ke); logError("Cause:", ke.getCause()); // then re-save the step
Defensive patterns

Strategy: try-catch

Validate before calling

if (!repository.connect(login, password)) failFast("Repository connection unavailable before loading steps");

Try / catch

try { meta.readRep(repo, metaStore, idStep, databases); }
catch (KettleException e) {
  logError("Repository read failed for step " + idStep, e.getCause());
}

Prevention

When it happens

Trigger: readRep queries step attributes for id_step and the repository layer throws — e.g. the r_step_attribute rows are missing/corrupt or the repository connection breaks mid-read.

Common situations: Repository database upgraded/downgraded across PDI versions; interrupted metadata save leaving partial attribute rows; network/DB outage during transformation load.

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

Appendix: source

Thrown at plugins/xml/core/src/main/java/org/pentaho/di/trans/steps/addxml/AddXMLMeta.java:302

      for ( int i = 0; i < nrfields; i++ ) {
        outputFields[i] = new XMLField();

        outputFields[i].setFieldName( rep.getStepAttributeString( id_step, i, "field_name" ) );
        outputFields[i].setElementName( rep.getStepAttributeString( id_step, i, "field_element" ) );
        outputFields[i].setType( rep.getStepAttributeString( id_step, i, "field_type" ) );
        outputFields[i].setFormat( rep.getStepAttributeString( id_step, i, "field_format" ) );
        outputFields[i].setCurrencySymbol( rep.getStepAttributeString( id_step, i, "field_currency" ) );
        outputFields[i].setDecimalSymbol( rep.getStepAttributeString( id_step, i, "field_decimal" ) );
        outputFields[i].setGroupingSymbol( rep.getStepAttributeString( id_step, i, "field_group" ) );
        outputFields[i].setNullString( rep.getStepAttributeString( id_step, i, "field_nullif" ) );
        outputFields[i].setLength( (int) rep.getStepAttributeInteger( id_step, i, "field_length" ) );
        outputFields[i].setPrecision( (int) rep.getStepAttributeInteger( id_step, i, "field_precision" ) );
        outputFields[i].setAttribute( rep.getStepAttributeBoolean( id_step, i, "field_attribute" ) );
        outputFields[i].setAttributeParentName( rep.getStepAttributeString( id_step, i, "field_attributeName" ) );
      }
    } catch ( Exception e ) {
      throw new KettleException( "Unexpected error reading step information from the repository", e );
    }
  }

  public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_transformation, ObjectId id_step )
    throws KettleException {
    try {
      rep.saveStepAttribute( id_transformation, id_step, "encoding", encoding );
      rep.saveStepAttribute( id_transformation, id_step, "valueName", valueName );
      rep.saveStepAttribute( id_transformation, id_step, "xml_repeat_element", rootNode );
      rep.saveStepAttribute( id_transformation, id_step, "omitXMLheader", omitXMLheader );
      rep.saveStepAttribute( id_transformation, id_step, "omitNullValues", omitNullValues );

      for ( int i = 0; i < outputFields.length; i++ ) {
        XMLField field = outputFields[i];

        rep.saveStepAttribute( id_transformation, id_step, i, "field_name", field.getFieldName() );
        rep.saveStepAttribute( id_transformation, id_step, i, "field_element", field.getElementName() );
        rep.saveStepAttribute( id_transformation, id_step, i, "field_type", field.getTypeDesc() );

View on GitHub (pinned to f3058517a1)