{"record":{"id":"56c2ef202cc557b3","repo":"pentaho/pentaho-kettle","slug":"rssoutput-log-cannotcreateparentfolder","errorCode":null,"errorMessage":"RssOutput.Log.CanNotCreateParentFolder","messagePattern":"RssOutput\\.Log\\.CanNotCreateParentFolder","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"plugins/rss/impl/src/main/java/org/pentaho/di/trans/steps/rssoutput/RssOutput.java","lineNumber":174,"sourceCode":"          // Get parent folder\n          parentfolder = KettleVFS.getInstance( getTransMeta().getBowl() )\n            .getFileObject( data.filename, getTransMeta() ).getParent();\n          if ( !parentfolder.exists() ) {\n            if ( log.isDetailed() ) {\n              logDetailed( BaseMessages.getString( PKG, \"RssOutput.Log.ParentFolderExists\", parentfolder\n                .getName().toString() ) );\n            }\n            parentfolder.createFolder();\n            if ( log.isDetailed() ) {\n              logDetailed( BaseMessages.getString( PKG, \"RssOutput.Log.CanNotCreateParentFolder\", parentfolder\n                .getName().toString() ) );\n            }\n          }\n        } catch ( Exception e ) {\n          // The field is unreachable !\n          logError( BaseMessages.getString( PKG, \"RssOutput.Log.CanNotCreateParentFolder\", parentfolder\n            .getName().toString() ) );\n          throw new KettleException( BaseMessages.getString(\n            PKG, \"RssOutput.Log.CanNotCreateParentFolder\", parentfolder.getName().toString() ) );\n\n        } finally {\n          if ( parentfolder != null ) {\n            try {\n              parentfolder.close();\n            } catch ( Exception ex ) { /* Ignore */\n            }\n          }\n        }\n      }\n\n      if ( !meta.isCustomRss() ) {\n        // Let's check for mandatory fields ...\n        if ( Utils.isEmpty( meta.getChannelTitle() ) ) {\n          logError( BaseMessages.getString( PKG, \"RssOutput.Log.ChannelTitleMissing\" ) );\n          setErrors( 1 );\n          stopAll();","sourceCodeStart":156,"sourceCodeEnd":192,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/plugins/rss/impl/src/main/java/org/pentaho/di/trans/steps/rssoutput/RssOutput.java#L156-L192","documentation":"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.","triggerScenarios":"FileObject folder creation (folder.createFolder / VFS call) throws during processRow when meta.isCreateParentFolder() is true — path invalid, insufficient filesystem permissions, or unsupported URI scheme.","commonSituations":"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).","solutions":["Check OS-level permissions for the user running Pentaho on the target parent directory.","Verify the output path is valid for the OS (no illegal characters, correct separators).","Pre-create the directory manually if creation via VFS keeps failing, and uncheck 'create parent folder'.","Confirm the VFS scheme/connection (e.g. SFTP credentials) is configured if writing to remote locations."],"exampleFix":"// before\nString output = \"/data/rss/${FEED_NAME}/out.xml\"; // dir not creatable\n// after\nString output = \"/tmp/rss_output/out.xml\"; // writable dir, or pre-create /data/rss/ with correct ownership","handlingStrategy":"validation","validationCode":"File dir = new File(outputPath).getParentFile();\nif (dir != null && !dir.exists() && !dir.mkdirs()) {\n  throw new KettleException(\"Cannot create parent folder: \" + dir);\n}","typeGuard":null,"tryCatchPattern":"try {\n  parentFolder.createFolder();\n} catch (FileSystemException e) {\n  logError(\"Cannot create parent folder \" + parentFolder + \": \" + e.getMessage(), e);\n}","preventionTips":["Run Pentaho as a user with write access to the target directory","Validate output paths for OS-legal characters","Pre-create directories in deployment scripts"],"tags":["kettle","rss-output","filesystem","mkdir","permissions"],"backgroundTag":"mkdir-permission-denied","analyzedSha":"f3058517a153da500bf4551f46d79b91bf8ec552","analyzedAt":"2026-09-13T14:04:16.340Z","contentChangedAt":"2026-09-13T14:04:16.340Z","schemaVersion":2},"datasetVersion":"2026-09-20T23:17:15.980Z"}