pentaho/pentaho-kettle · error · KettleStepException

RssOutput.Exception.FieldRequired

Error message

RssOutput.Exception.FieldRequired

What it means

In custom RSS mode, the RSS Output step validates every configured custom channel field against the input row metadata. If any custom channel field cannot be found (indexOfValue < 0), it throws KettleStepException with the 'FieldRequired' message naming the missing field, aborting the transformation.

Solutions

  1. Open the RSS Output dialog's custom channel fields table and remove or correct the missing field named in the exception message.
  2. Use 'Get Fields' to repopulate the custom field list from the actual input stream.
  3. Add the missing column upstream (Select Values / rename) so the configured custom field exists.
  4. Re-check after changing the input step, since the custom field list is not auto-synced.

Example fix

// before
meta.setChannelCustomFields(new String[] { "title", "channel_extra" }); // channel_extra missing
// after
meta.setChannelCustomFields(new String[] { "title", "channel_description" });
Defensive patterns

Strategy: validation

Validate before calling

// Ensure every configured custom channel field exists before execution
for (String f : configuredCustomChannelFields) {
    if (inputRowMeta.indexOfValue(f) < 0) {
        throw new IllegalStateException("Custom channel field not in stream: " + f);
    }
}

Try / catch

try {
    transformation.execute();
} catch (KettleStepException e) {
    if (e.getMessage().contains("FieldRequired")) {
        String missing = extractFieldName(e.getMessage());
        // remove or remap `missing` in the step config and retry
    }
}

Prevention

When it happens

Trigger: Custom RSS is enabled and one of meta.getChannelCustomFields()[i] does not exist in data.inputRowMeta during processRow setup.

Common situations: Custom channel fields list contains stale names after upstream schema changes; user typed field names manually instead of selecting them; transformation reused with a different data source that lacks those columns.

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/223891b1c3b5d3bd. Report an issue: GitHub.

Appendix: source

Thrown at plugins/rss/impl/src/main/java/org/pentaho/di/trans/steps/rssoutput/RssOutput.java:441

        // Item author field ...
        if ( !Utils.isEmpty( meta.getItemAuthor() ) ) {
          data.indexOfFielditemauthor = data.inputRowMeta.indexOfValue( meta.getItemAuthor() );
          if ( data.indexOfFielditemauthor < 0 ) {
            // The field is unreachable !
            logError( BaseMessages.getString( PKG, "RssOutput.Log.ErrorFindingField", meta.getItemAuthor() ) );
            throw new KettleException( BaseMessages.getString( PKG, "RssOutput.Log.ErrorFindingField", meta
              .getItemAuthor() ) );
          }
        }
      } else {
        // Custom RSS
        // Check Custom channel fields
        data.customchannels = new int[meta.getChannelCustomFields().length];
        for ( int i = 0; i < meta.getChannelCustomFields().length; i++ ) {
          data.customchannels[i] = data.inputRowMeta.indexOfValue( meta.getChannelCustomFields()[i] );
          if ( data.customchannels[i] < 0 ) { // couldn't find field!

            throw new KettleStepException( BaseMessages.getString( PKG, "RssOutput.Exception.FieldRequired", meta
              .getChannelCustomFields()[i] ) );
          }
        }
        // Check Custom channel fields
        data.customitems = new int[meta.getItemCustomFields().length];
        for ( int i = 0; i < meta.getItemCustomFields().length; i++ ) {
          data.customitems[i] = data.inputRowMeta.indexOfValue( meta.getItemCustomFields()[i] );
          if ( data.customitems[i] < 0 ) { // couldn't find field!

            throw new KettleStepException( BaseMessages.getString( PKG, "RssOutput.Exception.FieldRequired", meta
              .getItemCustomFields()[i] ) );
          }
        }
        // Prepare Output RSS Custom document
        data.document = DocumentHelper.createDocument();
        data.rssElement = data.document.addElement( "rss" );
        data.rssElement.addAttribute( "version", "2.0" );
        // add namespaces here ...

View on GitHub (pinned to f3058517a1)