pentaho/pentaho-kettle · error · KettleStepException
Xslt.Exception.ParameterFieldMissing (localized message…
Error message
Xslt.Exception.ParameterFieldMissing (localized message with param name and index)
What it means
During execute(), if XSLT parameters are configured but the field supplying a parameter's value is empty or missing, the step throws KettleStepException with the localized message Xslt.Exception.ParameterFieldMissing, parameterized with the parameter name and its index. XSLT transformation cannot proceed without all declared parameter values.
Solutions
- Restore the missing/renamed field in the upstream step
- Fix or define the variable used in the parameter field expression
- Remove the unused parameter from the XSLT entry configuration
- Add a 'Field exists' / value check before the entry
Example fix
// before: parameter field cleared after upstream rename parameterField[0] = "oldFieldName"; // after: point at the renamed field parameterField[0] = "newFieldName";
Defensive patterns
Strategy: validation
Validate before calling
for ( int i = 0; i < entry.getParameterField().length; i++ ) {
String field = entry.getParameterField()[i];
if ( field == null || field.trim().isEmpty() || !inputRowMeta.indexOfValue( field ).isEmpty() ) {
// ok
} else {
throw new IllegalStateException( "Parameter field missing: " + field );
}
} Try / catch
try {
entry.execute( result, 0 );
} catch ( KettleStepException e ) {
logError( "XSLT parameter configuration error: " + e.getMessage(), e );
result.setResult( false );
} Prevention
- Confirm parameter field names against the upstream row layout
- Resolve all variables used in field expressions before execution
- Remove unused parameters from the entry
- Add upstream field-existence checks
When it happens
Trigger: nrParams > 0 and environmentSubstitute(getParameterField()[i]) returns empty for some parameter i in the loop.
Common situations: Upstream step renamed or dropped the field feeding the parameter; variable used in the field name is undefined; copy of job edited so parameter field was cleared.
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
- MailValidator.Error.FilenameFieldMissing
- MailValidator.Error.ResultFieldNameMissing
- Xslt.Exception.ErrorResultFieldMissing
- Xslt.Exception.ErrorXMLFieldMissing
- Xslt.Exception.ErrorXSLFileFieldMissing
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/22b3dc587e4f6489.
Report an issue: GitHub.
Appendix: source
Thrown at plugins/xml/core/src/main/java/org/pentaho/di/job/entries/xslt/JobEntryXSLT.java:345
int nrOutputProps = getOutputPropertyName() == null ? 0 : getOutputPropertyName().length;
if ( nrOutputProps > 0 ) {
outputProperties = new Properties();
for ( int i = 0; i < nrOutputProps; i++ ) {
outputProperties.put( getOutputPropertyName()[i], environmentSubstitute( getOutputPropertyValue()[i] ) );
}
setOutputProperties = true;
}
// Check parameters
nrParams = getParameterField() == null ? 0 : getParameterField().length;
if ( nrParams > 0 ) {
nameOfParams = new String[nrParams];
valueOfParams = new String[nrParams];
for ( int i = 0; i < nrParams; i++ ) {
String name = environmentSubstitute( getParameterName()[i] );
String value = environmentSubstitute( getParameterField()[i] );
if ( Utils.isEmpty( value ) ) {
throw new KettleStepException( BaseMessages.getString( PKG, "Xslt.Exception.ParameterFieldMissing", name, i ) );
}
nameOfParams[i] = name;
valueOfParams[i] = value;
}
useParameters = true;
}
List<RowMetaAndData> rows = result.getRows();
if ( isFilenamesFromPrevious() ) {
if ( log.isDetailed() ) {
logDetailed( BaseMessages.getString( PKG, "JobEntryXSLT.Log.ArgFromPrevious.Found", ( rows != null ? rows
.size() : 0 )
+ "" ) );
}
}
if ( isFilenamesFromPrevious() && rows != null ) {
// Copy the input row to the (command line) argumentsView on GitHub (pinned to f3058517a1)