pentaho/pentaho-kettle · error · KettleException
HTTP.Exception.ErrorFindingField
HTTP.Exception.ErrorFindingField
Error message
HTTP.Exception.ErrorFindingField
What it means
The HTTP step looks up the configured URL field name in the incoming row metadata, and the field does not exist in the input stream. processRow logs 'HTTP.Log.ErrorFindingField' and throws KettleException 'HTTP.Exception.ErrorFindingField' with the field name.
Solutions
- Check the exact field name in the step dialog against the output fields of the previous step (use 'Show input fields').
- Fix the upstream step (Select values / rename) so the URL field exists with the exact name.
- Correct case-sensitive spelling of the field name.
- Reconnect the hop to the intended source stream.
Example fix
// before meta.setUrlField( "Url" ); // input stream has column 'url' // after meta.setUrlField( "url" ); // exact match with upstream field name
Defensive patterns
Strategy: validation
Validate before calling
// before executing the step, confirm the field exists in the input metadata
if ( meta.isUrlInField() && inputRowMeta.indexOfValue( environmentSubstitute( meta.getUrlField() ) ) < 0 ) {
throw new IllegalArgumentException( "URL field not found in input: " + meta.getUrlField() );
} Try / catch
try { processRow(); } catch ( KettleException e ) { if ( e.getMessage().contains( "ErrorFindingField" ) ) { logError( "Fix field mapping in HTTP step: " + e.getMessage() ); } throw e; } Prevention
- Use Spoon's field preview on the previous step to confirm exact field names
- Avoid renaming upstream fields without updating downstream HTTP step settings
- Keep field names case-consistent across the transformation
When it happens
Trigger: data.indexOfUrlField remains < 0 after getInputRowMeta().indexOfValue(realUrlfieldName) — the 'URL field name' configured in the step matches no column in the incoming row stream.
Common situations: Upstream step renamed or removed the URL column; case mismatch in field name; wrong transformation wiring so a different stream reaches the HTTP step; variable substitution changing the expected 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
- AutoDoc.Exception.FilenameFieldNotFound
- AutoDoc.Exception.FileTypeFieldNotFound
- DynamicSQLRow.Exception.FieldNotFound
- GetTableNames.Exception.CouldnotFindField
- HTTP.Exception.CouldnotFindField
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/4e0727c82eedc420.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/trans/steps/http/HTTP.java:312
data.outputRowMeta = getInputRowMeta().clone();
data.inputRowMeta = getInputRowMeta();
meta.getFields( getTransMeta().getBowl(), data.outputRowMeta, getStepname(), null, null, this, repository,
metaStore );
if ( meta.isUrlInField() ) {
if ( Utils.isEmpty( meta.getUrlField() ) ) {
logError( BaseMessages.getString( PKG, "HTTP.Log.NoField" ) );
throw new KettleException( BaseMessages.getString( PKG, "HTTP.Log.NoField" ) );
}
// cache the position of the field
if ( data.indexOfUrlField < 0 ) {
String realUrlfieldName = environmentSubstitute( meta.getUrlField() );
data.indexOfUrlField = getInputRowMeta().indexOfValue( realUrlfieldName );
if ( data.indexOfUrlField < 0 ) {
// The field is unreachable !
logError( BaseMessages.getString( PKG, "HTTP.Log.ErrorFindingField", realUrlfieldName ) );
throw new KettleException( BaseMessages.getString( PKG, "HTTP.Exception.ErrorFindingField",
realUrlfieldName ) );
}
}
} else {
data.realUrl = environmentSubstitute( meta.getUrl() );
}
// check for headers
int nrHeaders = meta.getHeaderField().length;
if ( nrHeaders > 0 ) {
data.useHeaderParameters = true;
}
data.header_parameters_nrs = new int[ nrHeaders ];
data.headerParameters = new NameValuePair[ nrHeaders ];
// get the headers
for ( int i = 0; i < nrHeaders; i++ ) {View on GitHub (pinned to f3058517a1)