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
- Open the step dialog and pick existing fields from the dropdown for every argument row.
- Restore the missing field upstream (add a Select values / renamed source column).
- Check for leading/trailing spaces in the field name configured in the dialog.
- 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
- Keep argument mappings in sync with upstream schema
- Use dropdown selection for fields
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
- HTTPPOST.Exception.ErrorFindingField
- HTTPPOST.Exception.CouldnotFindRequestEntityField
- HTTPPOST.Log.NoField
- AddSequence.Exception.NoSpecifiedMethod
- AutoDoc.Exception.FilenameFieldNotFound
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)