pentaho/pentaho-kettle · error · KettleStepException
Xslt.Exception.ParameterFieldMissing
Error message
Xslt.Exception.ParameterFieldMissing
What it means
Thrown by the XSLT step in processRow when a configured XSLT parameter has no source field: meta.getParameterField()[i] is empty/null after environment substitution. Each parameter must map both a parameter name and an incoming row field whose value is passed into the transformation. The message includes the parameter name and its zero-based index.
Solutions
- Open the XSLT step dialog and set the Field column for every parameter row
- If using variables in the Field column, ensure they resolve to a non-empty field name at runtime
- Remove parameter rows that are no longer needed instead of leaving the field blank
Example fix
// before
Parameters: [{ name: "custId", field: "" }]
// after
Parameters: [{ name: "custId", field: "customer_id" }] Defensive patterns
Strategy: validation
Validate before calling
// Before executing, verify each parameter row has a field
for (int i = 0; i < parameterName.length; i++) {
if (parameterField[i] == null || parameterField[i].trim().isEmpty()) {
throw new IllegalArgumentException("Parameter '" + parameterName[i] + "' has no source field");
}
} Try / catch
try {
transformation.execute(...);
} catch (KettleStepException e) {
if (e.getMessage().contains("ParameterFieldMissing")) {
// fix step parameter mapping and retry
}
} Prevention
- Fill both name and field columns for every XSLT parameter row
- Avoid variables in the Field column, or verify their resolution per environment
- Preview rows before running to confirm required fields exist
When it happens
Trigger: In the XSLT step's Parameters table, a row has a Parameter name but the Field column left blank (or resolves to empty after variable substitution).
Common situations: Adding a parameter name but forgetting to select the input field; a variable used in the Field column evaluates to empty; a partially configured step saved from an older transformation version.
Understand the failure class
Background: "missing required argument" and "the following required arguments were not provided": what required-argument errors mean and how to fix them — this error's family across 20 libraries.
Related errors
- Xslt.Exception.ErrorResultFieldMissing
- Xslt.Exception.ErrorXMLFieldMissing
- Xslt.Exception.ErrorXSLFileFieldMissing
- Xslt.Exception.ParameterFieldNotFound
- Calculator.Error.NoNameField
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/6b90fd6bf734de12.
Report an issue: GitHub.
Appendix: source
Thrown at plugins/xml/core/src/main/java/org/pentaho/di/trans/steps/xslt/Xslt.java:177
if ( nrOutputProps > 0 ) {
data.outputProperties = new Properties();
for ( int i = 0; i < nrOutputProps; i++ ) {
data.outputProperties.put( meta.getOutputPropertyName()[i], environmentSubstitute( meta
.getOutputPropertyValue()[i] ) );
}
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 firstView on GitHub (pinned to f3058517a1)