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

  1. Check the exact field name in the step dialog against the output fields of the previous step (use 'Show input fields').
  2. Fix the upstream step (Select values / rename) so the URL field exists with the exact name.
  3. Correct case-sensitive spelling of the field name.
  4. 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

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


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)