pentaho/pentaho-kettle · error · KettleException

HTTPPOST.Exception.ErrorFindingField

Error message

HTTPPOST.Exception.ErrorFindingField

What it means

Thrown when 'URL is in a field?' is enabled and the configured URL field name cannot be found in the incoming row. data.inputRowMeta.indexOfValue() returns -1, so processRow raises a KettleException with 'HTTPPOST.Exception.ErrorFindingField' naming the field.

Solutions

  1. Verify the incoming row layout (right-click the hop / 'Show input fields') and set 'URL field name' to an existing field.
  2. Correct the field name casing — lookups are exact matches.
  3. Reconnect/reorder upstream steps so the field actually reaches the HTTP POST step.
  4. Use Fieldname selection from the dropdown in the step dialog rather than typing the name.

Example fix

// before
urlField="url_adress"; // typo, field does not exist
// after
urlField="url_address"; // matches the actual incoming field name
Defensive patterns

Strategy: validation

Validate before calling

RowMetaInterface in = transMeta.getPrevStepFields(stepName);
if (in.indexOfValue(meta.getUrlField()) < 0)
  throw new KettleException("URL field not in stream: " + meta.getUrlField());

Prevention

When it happens

Trigger: processRow executes with isUrlInField true; environmentSubstitute(meta.getUrlField()) resolved, but indexOfValue on the input row meta returns < 0 at line 379.

Common situations: Upstream step renamed or removed the URL column; field name case mismatch; environment variable substitution changed the expected name; step connected to a different stream than designed.

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/6f52d79ead71aa5a. Report an issue: GitHub.

Appendix: source

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

      data.inputRowMeta = getInputRowMeta();
      data.outputRowMeta = getInputRowMeta().clone();
      meta.getFields( getTransMeta().getBowl(), data.outputRowMeta, getStepname(), null, null, this, repository,
        metaStore );

      if ( meta.isUrlInField() ) {
        if ( Utils.isEmpty( meta.getUrlField() ) ) {
          logError( BaseMessages.getString( PKG, "HTTPPOST.Log.NoField" ) );
          throw new KettleException( BaseMessages.getString( PKG, "HTTPPOST.Log.NoField" ) );
        }

        // cache the position of the field
        if ( data.indexOfUrlField < 0 ) {
          String realUrlfieldName = environmentSubstitute( meta.getUrlField() );
          data.indexOfUrlField = data.inputRowMeta.indexOfValue( ( realUrlfieldName ) );
          if ( data.indexOfUrlField < 0 ) {
            // The field is unreachable !
            logError( BaseMessages.getString( PKG, "HTTPPOST.Log.ErrorFindingField", realUrlfieldName ) );
            throw new KettleException( BaseMessages.getString( PKG, "HTTPPOST.Exception.ErrorFindingField",
              realUrlfieldName ) );
          }
        }
      } else {
        data.realUrl = environmentSubstitute( meta.getUrl() );
      }
      // set body parameters
      int nrargs = meta.getArgumentField().length;
      if ( nrargs > 0 ) {
        data.useBodyParameters = false;
        data.useHeaderParameters = false;
        data.contentTypeHeaderOverwrite = false;
        int nrheader = 0;
        int nrbody = 0;
        for ( int i = 0; i < nrargs; i++ ) {  // split into body / header
          if ( meta.getArgumentHeader()[ i ] ) {
            data.useHeaderParameters = true; // at least one header parameter
            nrheader++;

View on GitHub (pinned to f3058517a1)