pentaho/pentaho-kettle · error · KettleStepException
Xslt.Exception.ParameterFieldNotFound
Error message
Xslt.Exception.ParameterFieldNotFound
What it means
Thrown by the XSLT step in processRow when a configured parameter's Field value does not match any field in the incoming row stream: getInputRowMeta().indexOfValue(field) returns -1. The parameter name is included in the message. This is a row-metadata mismatch, not a config-parse failure.
Solutions
- Update the parameter's Field value in the XSLT step to a field present in the incoming stream
- Inspect the row layout with 'Preview' or a Dummy step to confirm actual field names
- Restore the upstream field (rename it back or re-add a Select values/Calculator step) if it should exist
Example fix
// before field: "custumer_id" // typo, not in stream // after field: "customer_id"
Defensive patterns
Strategy: validation
Validate before calling
// Verify mapped fields exist in the input stream metadata before the step
String[] mapped = { "customer_id" }; // fields used by XSLT parameters
for (String f : mapped) {
if (inputRowMeta.indexOfValue(f) < 0) {
throw new IllegalArgumentException("Field missing from stream: " + f);
}
} Try / catch
try {
transformation.execute(...);
} catch (KettleStepException e) {
if (e.getMessage().contains("ParameterFieldNotFound")) {
// realign upstream field names with parameter mappings
}
} Prevention
- Lock upstream field names before wiring downstream parameter mappings
- Use a 'Select values' step to rename fields explicitly and consistently
- Re-preview transformations after any upstream schema change
When it happens
Trigger: The Field column names a field absent from the row entering the XSLT step, typically because an upstream step was renamed, removed, or the field name has different casing/whitespace.
Common situations: Renaming an upstream field without updating the XSLT parameter mapping; reusing a transformation where the input layout changed; trailing spaces in the field name.
Understand the failure class
Background: Record Not Found Errors: "not found", RecordNotFound, and "was not found" — what they mean and how to fix them — this error's family across 28 libraries.
Related errors
- ColumnExists.Exception.CouldnotFindField
- MergeRows.Exception.UnableToFindFieldInReferenceStream
- NormaliserMeta.Exception.UnableToFindField
- PGPEncryptStream.Exception.CouldnotFindField
- WebServiceAvailable.Exception.CouldnotFindField
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/14880bbe96426d63.
Report an issue: GitHub.
Appendix: source
Thrown at plugins/xml/core/src/main/java/org/pentaho/di/trans/steps/xslt/Xslt.java:182
}
data.setOutputProperties = true;
}
// Check parameters
data.nrParams = meta.getParameterField() == null ? 0 : meta.getParameterField().length;
if ( data.nrParams > 0 ) {
data.indexOfParams = new int[data.nrParams];
data.nameOfParams = new String[data.nrParams];
for ( int i = 0; i < data.nrParams; i++ ) {
String name = environmentSubstitute( meta.getParameterName()[i] );
String field = environmentSubstitute( meta.getParameterField()[i] );
if ( Utils.isEmpty( field ) ) {
throw new KettleStepException( BaseMessages
.getString( PKG, "Xslt.Exception.ParameterFieldMissing", name, i ) );
}
data.indexOfParams[i] = getInputRowMeta().indexOfValue( field );
if ( data.indexOfParams[i] < 0 ) {
throw new KettleStepException( BaseMessages.getString( PKG, "Xslt.Exception.ParameterFieldNotFound", name ) );
}
data.nameOfParams[i] = name;
}
data.useParameters = true;
}
data.factory = TransformerFactory.newInstance();
if ( meta.getXSLFactory().equals( "SAXON" ) ) {
// Set the TransformerFactory to the SAXON implementation.
data.factory = new net.sf.saxon.TransformerFactoryImpl();
}
} // end if first
// Get the field value
String xmlValue = getInputRowMeta().getString( row, data.fieldposition );
if ( meta.useXSLField() ) {View on GitHub (pinned to f3058517a1)