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
- Verify the configured output file path exists / its parent directory is present on the machine running the transformation.
- Check that any ${variables} in the filename are defined in the transformation/job or passed via Kitchen -param.
- Use platform-correct absolute paths (KettleVFS resolves relative to the transformation location).
- 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
- Pre-create output directories on every execution host
- Define all filename variables as transformation/job parameters with defaults
- Use forward slashes and absolute paths for cross-platform runs
- Check share/permission access for the service account running Kitchen
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
- ConnectionFileObject.PVFSRoot.UnsupportedOperation
- ConnectionFileObject.UndefinedConnection
- Error adding item to feed
- Error opening file [" + data.filename + "]!
- ExcelInputLog.ImageFileNotExists
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)