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

  1. Ensure every incoming row has a non-empty value for the filename field (filter or default nulls upstream).
  2. Verify any variables used in the filename are defined (kettle.properties or run configuration).
  3. 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

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


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", parentfolder

View on GitHub (pinned to f3058517a1)