pentaho/pentaho-kettle · error · KettleException

LDAPOutputMeta.Exception.ErrorReadingRepository

LDAPOutputMeta.Exception.ErrorReadingRepository

Error message

LDAPOutputMeta.Exception.ErrorReadingRepository

What it means

LDAPOutputMeta.readRep wraps repository deserialization in try/catch and rethrows any failure as KettleException with Exception.ErrorReadingRepository. It indicates an error while reading the step's attributes from the Pentaho repository database.

Solutions

  1. Verify the repository connection (test login, network, DB up)
  2. Re-save the step in Spoon to rewrite its repository attributes
  3. Check repository schema version matches your Pentaho version and run upgrade scripts if needed
  4. Re-enter the LDAP Output settings if specific attributes are corrupted

Example fix

// before
rep.getStepAttributeString(id_step, "trustStorePassword") // throws: repo down
// after: ensure connection first
if (rep.connect(...)) { rep.getStepAttributeString(id_step, "trustStorePassword"); }
Defensive patterns

Strategy: try-catch

Validate before calling

// Verify repository reachability before loading metadata
if (!rep.testConnection().isSuccess()) {
  throw new KettleException("Repository unavailable: " + rep.testConnection().getError());
}

Try / catch

try {
  stepMeta.readRep(rep, metaStore, idStep, databases);
} catch (KettleException e) {
  logError("Failed reading LDAP Output metadata from repository: " + e.getMessage(), e);
  // retry connection or rebuild the step
}

Prevention

When it happens

Trigger: Loading an LDAP Output step's settings via rep.getStepAttributeString/getStepAttributeBoolean when the repository connection fails, the step row is missing, or a stored value (e.g. encrypted trustStorePassword) cannot be decrypted.

Common situations: Repository database unreachable or dropped mid-load; step metadata deleted/renamed in the repository; corrupted stored password from a different encryption setup; repository schema mismatch after Pentaho upgrade.

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

Appendix: source

Thrown at plugins/ldap/impl/src/main/java/org/pentaho/di/trans/steps/ldapoutput/LDAPOutputMeta.java:817

      deleteRDN = rep.getStepAttributeBoolean( id_step, "deleteRDN" );

      int nrFields = rep.countNrStepAttributes( id_step, "field_name" );
      allocate( nrFields );

      for ( int i = 0; i < nrFields; i++ ) {
        updateLookup[i] = rep.getStepAttributeString( id_step, i, "field_name" );
        updateStream[i] = rep.getStepAttributeString( id_step, i, "field_attribut" );
        update[i] = Boolean.valueOf( rep.getStepAttributeBoolean( id_step, i, "value_update", true ) );
      }
      protocol = rep.getStepAttributeString( id_step, "protocol" );
      trustStorePath = rep.getStepAttributeString( id_step, "trustStorePath" );
      trustStorePassword =
        Encr.decryptPasswordOptionallyEncrypted( rep.getStepAttributeString( id_step, "trustStorePassword" ) );
      trustAllCertificates = rep.getStepAttributeBoolean( id_step, "trustAllCertificates" );
      useCertificate = rep.getStepAttributeBoolean( id_step, "useCertificate" );

    } catch ( Exception e ) {
      throw new KettleException(
        BaseMessages.getString( PKG, "LDAPOutputMeta.Exception.ErrorReadingRepository" ), e );
    }
  }

  public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_transformation, ObjectId id_step ) throws KettleException {
    try {
      rep.saveStepAttribute( id_transformation, id_step, "useauthentication", useAuthentication );
      rep.saveStepAttribute( id_transformation, id_step, "host", Host );
      rep.saveStepAttribute( id_transformation, id_step, "username", userName );
      rep.saveStepAttribute( id_transformation, id_step, "password", Encr
        .encryptPasswordIfNotUsingVariables( password ) );

      rep.saveStepAttribute( id_transformation, id_step, "port", port );
      rep.saveStepAttribute( id_transformation, id_step, "dnFieldName", dnFieldName );
      rep.saveStepAttribute( id_transformation, id_step, "failIfNotExist", failIfNotExist );
      rep.saveStepAttribute( id_transformation, id_step, "operationType", getOperationTypeCode( operationType ) );
      rep.saveStepAttribute( id_transformation, id_step, "multivaluedseparator", multiValuedSeparator );
      rep.saveStepAttribute( id_transformation, id_step, "searchBase", searchBase );

View on GitHub (pinned to f3058517a1)