pentaho/pentaho-kettle · error · KettleException

LDAPOutputUpdateDialog.FieldsMissing.DialogMessage

LDAPOutputUpdateDialog.FieldsMissing.DialogMessage

Error message

LDAPOutputUpdateDialog.FieldsMissing.DialogMessage

What it means

Thrown in LDAPOutput.processRows when the update lookup field list (the LDAP attributes to write) is empty — data.nrfields == 0. The LDAP Output step requires at least one field/attribute mapping to perform insert/update/upsert operations, so an empty mapping is a hard configuration error.

Solutions

  1. Open the LDAP Output step dialog and add at least one Field/Atribute mapping row in the update lookup table
  2. Enable 'Dynamic fields' (update lookup from stream field) if mappings should come from an incoming field
  3. Verify the operation type — some operations require field mappings; switch to an operation that fits an empty mapping if intentional
  4. Re-run the transformation after saving the step with a non-empty field grid

Example fix

// before (empty mapping)
Update lookup fields: (none)
// after
Update lookup fields: cn <- firstname ; sn <- lastname
Defensive patterns

Strategy: validation

Validate before calling

// Before running, check the step's mapping is non-empty
LDAPOutputMeta meta = (LDAPOutputMeta) stepMeta.getStepMetaInterface();
if (meta.getUpdateLookup() == null || meta.getUpdateLookup().length == 0) {
  throw new IllegalStateException("LDAP Output: no update lookup fields configured");
}

Try / catch

try {
  runTransformation();
} catch (KettleException e) {
  if (e.getMessage().contains("FieldsMissing")) {
    throw new IllegalStateException("LDAP Output mapping grid is empty; open the dialog and add field mappings");
  }
  throw e;
}

Prevention

When it happens

Trigger: processRow starts, meta.getUpdateLookup().length == 0: the 'Lookup fields' / update mapping grid in the LDAP Output dialog has no rows while the operation type requires field mappings.

Common situations: User configured LDAP Output (insert/update/delete mode) but left the fields table empty; a transformation was copied and the field grid was lost; dynamic fields feature (use field names from stream) unchecked with no static mappings defined.

Understand the failure class

Background: "must not be empty", "cannot be empty" — required-field validation errors across open-source libraries — this error's family across 41 libraries.

Related errors


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

Appendix: source

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

    // Grab a row and also wait for a row to be finished.
    Object[] outputRowData = getRow();

    if ( outputRowData == null ) {
      setOutputDone();
      return false;
    }
    if ( first ) {
      first = false;

      if ( meta.getOperationType() != LDAPOutputMeta.OPERATION_TYPE_DELETE
        && meta.getOperationType() != LDAPOutputMeta.OPERATION_TYPE_RENAME ) {

        // get total fields in the grid
        data.nrfields = meta.getUpdateLookup().length;

        // Check if field list is filled
        if ( data.nrfields == 0 ) {
          throw new KettleException( BaseMessages.getString(
            PKG, "LDAPOutputUpdateDialog.FieldsMissing.DialogMessage" ) );
        }

        // Take care of variable
        data.fieldsAttribute = new String[data.nrfields];
        // Build the mapping of input position to field name
        data.fieldStream = new int[data.nrfields];

        // Fields to update
        List<Integer> fieldsToUpdateInStreaml = new ArrayList<Integer>();
        List<String> fieldsToUpdateAttributel = new ArrayList<String>();

        for ( int i = 0; i < data.nrfields; i++ ) {

          data.fieldStream[i] =
            getInputRowMeta().indexOfValue( environmentSubstitute( meta.getUpdateStream()[i] ) );
          if ( data.fieldStream[i] < 0 ) {
            throw new KettleException( "Field ["

View on GitHub (pinned to f3058517a1)