pentaho/pentaho-kettle · error · KettleStepException

HTTPPOST.Exception.CouldnotFindField

Error message

HTTPPOST.Exception.CouldnotFindField

What it means

One of the configured argument (body/header parameter) field names is not present in the incoming stream. processRow throws a KettleStepException with 'HTTPPOST.Exception.CouldnotFindField' naming meta.getArgumentField()[i].

Solutions

  1. Open the step dialog and pick existing fields from the dropdown for every argument row.
  2. Restore the missing field upstream (add a Select values / renamed source column).
  3. Check for leading/trailing spaces in the field name configured in the dialog.
  4. Align the upstream step's output fields with what the HTTP POST step expects.

Example fix

// before (dialog config)
argumentField[0]="cust_id"; // no longer in stream
// after
argumentField[0]="customer_id"; // renamed field now used
Defensive patterns

Strategy: validation

Validate before calling

RowMetaInterface in = transMeta.getPrevStepFields(stepName);
for (String f : meta.getArgumentField())
  if (f != null && in.indexOfValue(f) < 0)
    throw new KettleException("Argument field missing: " + f);

Prevention

When it happens

Trigger: processRow loops over nrargs argument entries; data.inputRowMeta.indexOfValue(meta.getArgumentField()[i]) returns -1 at line 414, throwing KettleStepException before processing rows.

Common situations: Field feeding a POST parameter was deleted or renamed upstream; a transformation was re-used with a different input layout; field name with surrounding whitespace; case mismatch between dialog and stream.

Understand the failure class

Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — 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/3eb5c99d405eb30c. Report an issue: GitHub.

Appendix: source

Thrown at engine/src/main/java/org/pentaho/di/trans/steps/httppost/HTTPPOST.java:414

            data.useHeaderParameters = true; // at least one header parameter
            nrheader++;
          } else {
            data.useBodyParameters = true; // at least one body parameter
            nrbody++;
          }
        }
        data.header_parameters_nrs = new int[ nrheader ];
        data.headerParameters = new NameValuePair[ nrheader ];
        data.body_parameters_nrs = new int[ nrbody ];
        data.bodyParameters = new NameValuePair[ nrbody ];
        int posHeader = 0;
        int posBody = 0;
        for ( int i = 0; i < nrargs; i++ ) {
          int fieldIndex = data.inputRowMeta.indexOfValue( meta.getArgumentField()[ i ] );
          if ( fieldIndex < 0 ) {
            logError( BaseMessages.getString( PKG, "HTTPPOST.Log.ErrorFindingField" ) + meta.getArgumentField()[ i ]
              + "]" );
            throw new KettleStepException( BaseMessages.getString( PKG, "HTTPPOST.Exception.CouldnotFindField", meta
              .getArgumentField()[ i ] ) );
          }
          if ( meta.getArgumentHeader()[ i ] ) {
            data.header_parameters_nrs[ posHeader ] = fieldIndex;
            data.headerParameters[ posHeader ] =
              new BasicNameValuePair( environmentSubstitute( meta.getArgumentParameter()[ i ] ), data.outputRowMeta
                .getString( r, data.header_parameters_nrs[ posHeader ] ) );
            posHeader++;
            if ( CONTENT_TYPE.equalsIgnoreCase( meta.getArgumentParameter()[ i ] ) ) {
              data.contentTypeHeaderOverwrite = true; // Content-type will be overwritten
            }
          } else {
            data.body_parameters_nrs[ posBody ] = fieldIndex;
            data.bodyParameters[ posBody ] =
              new BasicNameValuePair( environmentSubstitute( meta.getArgumentParameter()[ i ] ), data.outputRowMeta
                .getString( r, data.body_parameters_nrs[ posBody ] ) );
            posBody++;
          }

View on GitHub (pinned to f3058517a1)