pentaho/pentaho-kettle · error · KettleException

RssOutput.Log.CanNotCreateParentFolder

Error message

RssOutput.Log.CanNotCreateParentFolder

What it means

When 'create parent folder' is enabled, RssOutput resolves the parent directory of the output file via VFS and creates it. If that creation throws, it logs and throws a KettleException with 'RssOutput.Log.CanNotCreateParentFolder' naming the parent folder.

Solutions

  1. Check OS-level permissions for the user running Pentaho on the target parent directory.
  2. Verify the output path is valid for the OS (no illegal characters, correct separators).
  3. Pre-create the directory manually if creation via VFS keeps failing, and uncheck 'create parent folder'.
  4. Confirm the VFS scheme/connection (e.g. SFTP credentials) is configured if writing to remote locations.

Example fix

// before
String output = "/data/rss/${FEED_NAME}/out.xml"; // dir not creatable
// after
String output = "/tmp/rss_output/out.xml"; // writable dir, or pre-create /data/rss/ with correct ownership
Defensive patterns

Strategy: validation

Validate before calling

File dir = new File(outputPath).getParentFile();
if (dir != null && !dir.exists() && !dir.mkdirs()) {
  throw new KettleException("Cannot create parent folder: " + dir);
}

Try / catch

try {
  parentFolder.createFolder();
} catch (FileSystemException e) {
  logError("Cannot create parent folder " + parentFolder + ": " + e.getMessage(), e);
}

Prevention

When it happens

Trigger: FileObject folder creation (folder.createFolder / VFS call) throws during processRow when meta.isCreateParentFolder() is true — path invalid, insufficient filesystem permissions, or unsupported URI scheme.

Common situations: Writing to a directory the Pentaho user cannot create (permission denied on Linux, read-only share); malformed path (illegal characters on Windows); VFS cannot resolve the scheme (sftp/other without credentials).

Understand the failure class

Background: mkdir permission denied (EACCES): failed to create directory errors explained — this error's family across 32 libraries.

Related errors


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

Appendix: source

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

          // 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
                .getName().toString() ) );
            }
          }
        } catch ( Exception e ) {
          // The field is unreachable !
          logError( BaseMessages.getString( PKG, "RssOutput.Log.CanNotCreateParentFolder", parentfolder
            .getName().toString() ) );
          throw new KettleException( BaseMessages.getString(
            PKG, "RssOutput.Log.CanNotCreateParentFolder", parentfolder.getName().toString() ) );

        } finally {
          if ( parentfolder != null ) {
            try {
              parentfolder.close();
            } catch ( Exception ex ) { /* Ignore */
            }
          }
        }
      }

      if ( !meta.isCustomRss() ) {
        // Let's check for mandatory fields ...
        if ( Utils.isEmpty( meta.getChannelTitle() ) ) {
          logError( BaseMessages.getString( PKG, "RssOutput.Log.ChannelTitleMissing" ) );
          setErrors( 1 );
          stopAll();

View on GitHub (pinned to f3058517a1)