pentaho/pentaho-kettle · error · KettleException
RssOutput.Log.FilenameEmpty
Error message
RssOutput.Log.FilenameEmpty
What it means
RssOutput checks whether the resolved output filename is empty (Utils.isEmpty) after either building it from settings or reading it from the filename field. If empty, it logs and throws a KettleException with 'RssOutput.Log.FilenameEmpty'.
Solutions
- Ensure every incoming row has a non-empty value for the filename field (filter or default nulls upstream).
- Verify any variables used in the filename are defined (kettle.properties or run configuration).
- Set a fallback constant filename in the step dialog if field values are unreliable.
Example fix
// before
String filename = row.getString("filename"); // may be null
// after
String filename = Utils.isEmpty(row.getString("filename")) ? "/tmp/output.rss" : row.getString("filename"); Defensive patterns
Strategy: validation
Validate before calling
Object v = row[filenameIdx];
if (v == null || v.toString().trim().isEmpty()) {
throw new KettleException("Filename value is empty on incoming row");
} Try / catch
if (Utils.isEmpty(data.filename)) { /* set fallback or filter row before RSS Output */ } Prevention
- Filter out rows with null/empty filename fields upstream
- Define all filename variables in kettle.properties
- Configure a default filename as fallback
When it happens
Trigger: Filename field in the incoming row is null or empty string, or built filename is blank (e.g. filename template resolves to empty), while 'filename in field' mode or variable-based filename yields nothing.
Common situations: Filename field value missing on a row (null cell upstream); variable ${...} in filename not set in that environment; running on an agent where the variable substitution fails.
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
- ExecProcess.ProcessEmpty
- ExecSQLRow.Log.EmptySQLFromFile
- PGPEncryptStream.Error.DataToEncryptEmpty
- ProcessFiles.Error.SourceFileEmpty
- ProcessFiles.Error.TargetFileEmpty
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/bfbb428a80797248.
Report an issue: GitHub.
Appendix: source
Thrown at plugins/rss/impl/src/main/java/org/pentaho/di/trans/steps/rssoutput/RssOutput.java:148
}
// get filename field index
data.indexOfFieldfilename = data.inputRowMeta.indexOfValue( meta.getFileNameField() );
if ( data.indexOfFieldfilename < 0 ) {
// The field is unreachable !
logError( BaseMessages.getString( PKG, "RssOutput.Log.ErrorFindingField", meta.getFileNameField() ) );
throw new KettleException( BaseMessages.getString( PKG, "RssOutput.Log.ErrorFindingField", meta
.getFileNameField() ) );
}
} else {
data.filename = buildFilename();
}
// Check if filename is empty..
if ( Utils.isEmpty( data.filename ) ) {
logError( BaseMessages.getString( PKG, "RssOutput.Log.FilenameEmpty" ) );
throw new KettleException( BaseMessages.getString( PKG, "RssOutput.Log.FilenameEmpty" ) );
}
// Do we need to create parent folder ?
if ( meta.isCreateParentFolder() ) {
// Check for parent folder
FileObject parentfolder = null;
try {
// Get parent folder
parentfolder = KettleVFS.getInstance( getTransMeta().getBowl() )
.getFileObject( data.filename, getTransMeta() ).getParent();
if ( !parentfolder.exists() ) {
if ( log.isDetailed() ) {
logDetailed( BaseMessages.getString( PKG, "RssOutput.Log.ParentFolderExists", parentfolder
.getName().toString() ) );
}
parentfolder.createFolder();
if ( log.isDetailed() ) {
logDetailed( BaseMessages.getString( PKG, "RssOutput.Log.CanNotCreateParentFolder", parentfolderView on GitHub (pinned to f3058517a1)