pentaho/pentaho-kettle · error · KettleException

LDAPInputMeta.Exception.ErrorSavingToRepository

LDAPInputMeta.Exception.ErrorSavingToRepository

Error message

LDAPInputMeta.Exception.ErrorSavingToRepository

What it means

This KettleException is thrown by LDAPInputMeta.saveRep() when saving any of the LDAP Input step's attributes to the Pentaho repository fails. The repository layer (rep.saveStepAttribute) signals a persistence problem (connection, schema, or constraint issue) and this wraps it with the step id for context. It indicates the transformation could not be persisted, not that the LDAP step itself is misconfigured.

Solutions

  1. Check the underlying cause exception (getCause) for the repository/database error and fix that first
  2. Verify the repository database is reachable and credentials/permissions allow writes
  3. Run the repository upgrade scripts so the schema matches the Pentaho version
  4. Save the transformation as a file (.ktr) as a workaround while repairing the repository

Example fix

// before
try { transMeta.saveRep(rep, repoDirectory, transName, desc); } catch (KettleException e) { /* check cause */ }
// after
try {
  transMeta.saveRep(rep, repoDirectory, transName, desc);
} catch (KettleException e) {
  Throwable cause = e.getCause();
  log.logError("Repository save failed (check DB connectivity/schema): " + cause, cause);
  throw e;
}
Defensive patterns

Strategy: try-catch

Validate before calling

// Before saving: verify repository connectivity
if (rep == null || !rep.isConnected()) { throw new IllegalStateException("Repository not connected"); }

Try / catch

try {
  transMeta.saveRep(rep, dir, name, desc);
} catch (KettleException e) {
  Throwable cause = e.getCause();
  log.error("LDAP Input step could not be saved (step id " + e.getMessage() + ")", cause);
  // inspect cause: DB connectivity / schema / permissions
}

Prevention

When it happens

Trigger: Any Exception from rep.saveStepAttribute(...) while persisting LDAP Input fields: trim type codes, repeat flags, search scope, or connection attributes during saveRep with a repository-backed transformation.

Common situations: Repository database is down or connection dropped mid-save; repository schema is outdated (missing kettle attribute tables/columns); repository user lacks INSERT/UPDATE permissions; saving an oversized value exceeding a column length.

Related errors


AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13). Data as JSON: /api/errors/6e6c894dd8f9c8a0. Report an issue: GitHub.

Appendix: source

Thrown at plugins/ldap/impl/src/main/java/org/pentaho/di/trans/steps/ldapinput/LDAPInputMeta.java:905

        rep.saveStepAttribute( id_transformation, id_step, i, "field_name", field.getName() );
        rep.saveStepAttribute( id_transformation, id_step, i, "field_attribute", field.getAttribute() );
        rep.saveStepAttribute( id_transformation, id_step, i, "field_attribute_fetch_as", field
          .getFetchAttributeAsCode() );
        rep.saveStepAttribute( id_transformation, id_step, i, "sorted_key", field.isSortedKey() );
        rep.saveStepAttribute( id_transformation, id_step, i, "field_type", field.getTypeDesc() );
        rep.saveStepAttribute( id_transformation, id_step, i, "field_format", field.getFormat() );
        rep.saveStepAttribute( id_transformation, id_step, i, "field_currency", field.getCurrencySymbol() );
        rep.saveStepAttribute( id_transformation, id_step, i, "field_decimal", field.getDecimalSymbol() );
        rep.saveStepAttribute( id_transformation, id_step, i, "field_group", field.getGroupSymbol() );
        rep.saveStepAttribute( id_transformation, id_step, i, "field_length", field.getLength() );
        rep.saveStepAttribute( id_transformation, id_step, i, "field_precision", field.getPrecision() );
        rep.saveStepAttribute( id_transformation, id_step, i, "field_trim_type", field.getTrimTypeCode() );
        rep.saveStepAttribute( id_transformation, id_step, i, "field_repeat", field.isRepeated() );

      }
      rep.saveStepAttribute( id_transformation, id_step, "searchScope", getSearchScopeCode( searchScope ) );
    } catch ( Exception e ) {
      throw new KettleException( BaseMessages.getString(
        PKG, "LDAPInputMeta.Exception.ErrorSavingToRepository", "" + id_step ), e );
    }
  }

  @Override
  public void check( List<CheckResultInterface> remarks, TransMeta transMeta, StepMeta stepMeta,
    RowMetaInterface prev, String[] input, String[] output, RowMetaInterface info, VariableSpace space,
    Repository repository, IMetaStore metaStore ) {

    CheckResult cr;

    // Check output fields
    if ( inputFields.length == 0 ) {
      cr =
        new CheckResult( CheckResult.TYPE_RESULT_ERROR, BaseMessages.getString(
          PKG, "LDAPInputMeta.CheckResult.NoOutputFields" ), stepMeta );
    } else {
      cr =

View on GitHub (pinned to f3058517a1)