pentaho/pentaho-kettle · error · KettleStepException

There is no name specified for validator field #

Error message

There is no name specified for validator field #

What it means

Configuration validation in Validator.processRow: a validation entry in the list has no field name set (empty FieldName), so the step cannot resolve an input field index for it. The message appends the offending entry's sequence number.

Solutions

  1. Open the Validator step and fill in the field name for the listed validation #.
  2. Remove the empty validation entry if it was added accidentally.
  3. If constructing validations in code, call setFieldName() with a non-empty value before running.
  4. Validate metadata programmatically: iterate getValidations() and reject empty fieldName entries before execution.

Example fix

// before
Validation v = new Validation();
meta.getValidations().add(v);
// after
Validation v = new Validation();
v.setFieldName("email");
if (Utils.isEmpty(v.getFieldName())) throw new IllegalArgumentException("fieldName required");
meta.getValidations().add(v);
Defensive patterns

Strategy: validation

Validate before calling

// Before execution
meta.getValidations().stream()
  .filter(v -> Utils.isEmpty(v.getFieldName()))
  .findFirst()
  .ifPresent(v -> { throw new IllegalStateException("Validator has a validation with no field name"); });

Try / catch

try {
  trans.startThreads();
} catch (KettleStepException e) {
  if (e.getMessage().startsWith("There is no name specified for validator field")) {
    int idx = Integer.parseInt(e.getMessage().replaceAll(".*#(\\d+)", "$1"));
    logError("Validation #" + idx + " missing field name");
  }
}

Prevention

When it happens

Trigger: processRow loop over meta.getValidations(); Utils.isEmpty(field.getFieldName()) is true for validation i, so the step throws instead of doing an index lookup.

Common situations: A validation row added in the dialog but never assigned a field; settings imported/copied with blank field names; programmatic construction of Validation objects without setFieldName.

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

Appendix: source

Thrown at engine/src/main/java/org/pentaho/di/trans/steps/validator/Validator.java:106

      }

      data.fieldIndexes = new int[ meta.getValidations().size() ];

      // Calculate the indexes of the values and arguments in the target data or temporary data
      // We do this in advance to save time later on.
      //
      for ( int i = 0; i < meta.getValidations().size(); i++ ) {
        Validation field = meta.getValidations().get( i );

        if ( !Utils.isEmpty( field.getFieldName() ) ) {
          data.fieldIndexes[ i ] = getInputRowMeta().indexOfValue( field.getFieldName() );
          if ( data.fieldIndexes[ i ] < 0 ) {
            // Nope: throw an exception
            throw new KettleStepException( "Unable to find the specified fieldname '"
              + field.getFieldName() + "' for validation#" + ( i + 1 ) );
          }
        } else {
          throw new KettleStepException( "There is no name specified for validator field #" + ( i + 1 ) );
        }
      }
    } else {
      // Read the row AFTER the info rows
      // That way the info-rowsets are out of the way
      //
      r = getRow(); // get row, set busy!
      if ( r == null ) { // no more input to be expected...

        setOutputDone();
        return false;
      }
    }

    if ( log.isRowLevel() ) {
      logRowlevel( "Read row #" + getLinesRead() + " : " + getInputRowMeta().getString( r ) );
    }

View on GitHub (pinned to f3058517a1)