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
- Open the Validator step and fill in the field name for the listed validation #.
- Remove the empty validation entry if it was added accidentally.
- If constructing validations in code, call setFieldName() with a non-empty value before running.
- 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
- Never add empty validation rows in the dialog
- Validate step metadata programmatically before running
- When generating validations in code, always setFieldName first
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
- There is no valid source field specified for the allowed…
- Caught a number format exception converting minimum length…
- There is no valid source step specified for the allowed…
- Unable to find the specified fieldname '
- A connection of type PALO is expected
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)