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
- Open the RSS Output dialog's custom channel fields table and remove or correct the missing field named in the exception message.
- Use 'Get Fields' to repopulate the custom field list from the actual input stream.
- Add the missing column upstream (Select Values / rename) so the configured custom field exists.
- 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
- Regenerate the custom field list with 'Get Fields' after any upstream change
- Keep custom channel fields in sync with the actual source schema
- Avoid hand-editing the ktr XML for custom field lists
- Run a dry-run in a dev environment with production-like schema
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
- Error adding item to feed
- RssOutput.Log.GeoPointLatEmpty
- RssOutput.Log.GeoPointLongEmpty
- RssOutput.Meta.ErrorGettingFile
- Unable to load step info from XML
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)