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

  1. Update the parameter's Field value in the XSLT step to a field present in the incoming stream
  2. Inspect the row layout with 'Preview' or a Dummy step to confirm actual field names
  3. 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

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


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)