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
- Open the LDAP Output step dialog and add at least one Field/Atribute mapping row in the update lookup table
- Enable 'Dynamic fields' (update lookup from stream field) if mappings should come from an incoming field
- Verify the operation type — some operations require field mappings; switch to an operation that fits an empty mapping if intentional
- 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
- Always fill at least one Field/Attribute mapping row after adding the step
- Use 'Get Fields' to populate mappings automatically
- Re-check settings after copying transformations between projects
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
- Field [ ] couldn't be found in the input stream!
- LDAPInput.Error.DynamicFilterFieldMissing
- LDAPInput.Error.DynamicSearchFieldMissing
- LDAPOutput.Error.DNFieldMissing
- LDAPOutput.Error.NewDNFieldMissing
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)