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

  1. Restore the missing/renamed field in the upstream step
  2. Fix or define the variable used in the parameter field expression
  3. Remove the unused parameter from the XSLT entry configuration
  4. 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

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


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) arguments

View on GitHub (pinned to f3058517a1)