pentaho/pentaho-kettle · error · KettleException

RssInput.Log.UrlFieldNameMissing

RssInput.Log.UrlFieldNameMissing

Error message

RssInput.Log.UrlFieldNameMissing

What it means

RssInput.readNextUrl logs and throws a KettleException when the URL field name configured for the step is empty. The step needs a stream field containing the feed URL to fetch; without a field name it cannot proceed.

Solutions

  1. Open the RSS Input step and select the input field that contains the feed URL
  2. Ensure the upstream step provides a URL column
  3. Re-enter step settings if they were lost during copy/paste

Example fix

// before
urlFieldname = "";
// after
urlFieldname = "feed_url";
Defensive patterns

Strategy: validation

Validate before calling

if (urlFieldname == null || urlFieldname.trim().isEmpty()) {
  throw new KettleException("URL field name must be set in RSS Input step");
}

Try / catch

try { processRow(); } catch (KettleException e) {
  logError("RSS Input configuration error: " + e.getMessage());
  setErrors(1);
}

Prevention

When it happens

Trigger: The 'URL fieldname' setting in the RSS Input step dialog is blank (meta.getUrlFieldname() is null or empty).

Common situations: Step configured without selecting the URL column; dialog setting lost after copying a step between transformations; XML config missing the url field tag.

Understand the failure class

Background: "must not be empty", "cannot be empty" — required-field validation errors across open-source libraries — this error's family across 41 libraries.

Related errors


AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13). Data as JSON: /api/errors/f2f620ad8dfff108. Report an issue: GitHub.

Appendix: source

Thrown at plugins/rss/impl/src/main/java/org/pentaho/di/trans/steps/rssinput/RssInput.java:120

        return false;
      }
      if ( first ) {
        first = false;
        data.inputRowMeta = getInputRowMeta();
        data.outputRowMeta = data.inputRowMeta.clone();
        meta.getFields( getTransMeta().getBowl(), data.outputRowMeta, getStepname(), null, null, this, repository,
          metaStore );

        // Get total previous fields
        data.totalpreviousfields = data.inputRowMeta.size();

        // Create convert meta-data objects that will contain Date & Number formatters
        data.convertRowMeta = data.outputRowMeta.cloneToType( ValueMetaInterface.TYPE_STRING );

        // Check is URL field is provided
        if ( Utils.isEmpty( meta.getUrlFieldname() ) ) {
          logError( BaseMessages.getString( PKG, "RssInput.Log.UrlFieldNameMissing" ) );
          throw new KettleException( BaseMessages.getString( PKG, "RssInput.Log.UrlFieldNameMissing" ) );
        }

        // cache the position of the field
        if ( data.indexOfUrlField < 0 ) {
          data.indexOfUrlField = data.inputRowMeta.indexOfValue( meta.getUrlFieldname() );
          if ( data.indexOfUrlField < 0 ) {
            // The field is unreachable !
            logError( BaseMessages.getString( PKG, "RssInput.Log.ErrorFindingField" )
              + "[" + meta.getUrlFieldname() + "]" );
            throw new KettleException( BaseMessages.getString( PKG, "RssInput.Exception.ErrorFindingField", meta
              .getUrlFieldname() ) );
          }
        }

      }
      // get URL field value
      data.currenturl = data.inputRowMeta.getString( data.readrow, data.indexOfUrlField );

View on GitHub (pinned to f3058517a1)