pentaho/pentaho-kettle · error · KettleStepException

RssOutput.Meta.ErrorGettingFile

Error message

RssOutput.Meta.ErrorGettingFile

What it means

RssOutputMeta.getFilename() resolves the output file via KettleVFS and wraps any failure (invalid path, non-existent parent directory, filesystem errors) in a KettleStepException with the 'ErrorGettingFile' message including the configured file name. This runs during metadata validation (getFields/row layout), before rows are processed.

Solutions

  1. Verify the configured output file path exists / its parent directory is present on the machine running the transformation.
  2. Check that any ${variables} in the filename are defined in the transformation/job or passed via Kitchen -param.
  3. Use platform-correct absolute paths (KettleVFS resolves relative to the transformation location).
  4. Fix filesystem permissions or network share availability for the target directory.

Example fix

// before
meta.setFileName("${OUT_DIR}/feed.xml"); // OUT_DIR undefined
// after
meta.setFileName("/data/rss/feed.xml"); // or define OUT_DIR as a parameter
Defensive patterns

Strategy: try-catch

Validate before calling

// Validate the resolved output path before running the transformation:
String resolved = space.environmentSubstitute(meta.getFileName());
File parent = new File(resolved).getAbsoluteFile().getParentFile();
if (parent == null || !parent.isDirectory()) {
    throw new IllegalStateException("Output directory does not exist: " + parent);
}

Try / catch

try {
    transformation.execute();
} catch (KettleStepException e) {
    if (e.getMessage().contains("ErrorGettingFile")) {
        log.error("Cannot resolve RSS output file path: " + e.getMessage());
    }
}

Prevention

When it happens

Trigger: KettleVFS.getFileObject(space.environmentSubstitute(getFileName())) throws — the configured output filename cannot be resolved or opened through VFS (bad path, unresolved variable, unsupported protocol, IO error).

Common situations: Output directory does not exist on the execution host; ${Internal.Transformation.Filename.Directory} or custom variables unresolved when running via Kitchen; file path uses Windows-style separators on Linux; permissions or an unreachable network share.

Understand the failure class

Background: "File not found" and ENOENT errors: why libraries can't find a file that should exist — this error's family across 50 libraries.

Related errors


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

Appendix: source

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

      for ( int part = 0; part < parts; part++ ) {
        retval[i] = buildFilename( bowl, space, copy );
        i++;
      }
    }
    if ( i < nr ) {
      retval[i] = "...";
    }

    return retval;
  }

  private String getFilename( Bowl bowl, VariableSpace space ) throws KettleStepException {
    FileObject file = null;
    try {
      file = KettleVFS.getInstance( bowl ).getFileObject( space.environmentSubstitute( getFileName() ) );
      return KettleVFS.getFilename( file );
    } catch ( Exception e ) {
      throw new KettleStepException( BaseMessages
        .getString( PKG, "RssOutput.Meta.ErrorGettingFile", getFileName() ), e );
    } finally {
      if ( file != null ) {
        try {
          file.close();
        } catch ( Exception e ) { /* Ignore */
        }
      }
    }
  }

  public String buildFilename( Bowl bowl, VariableSpace space, int stepnr ) throws KettleStepException {

    SimpleDateFormat daf = new SimpleDateFormat();

    // Replace possible environment variables...
    String retval = getFilename( bowl, space );

View on GitHub (pinned to f3058517a1)