{"record":{"id":"c44a61d4d5ed635e","repo":"pentaho/pentaho-kettle","slug":"unable-to-load-job-entry-of-type-create-folder-from-xml-node","errorCode":null,"errorMessage":"Unable to load job entry of type 'create folder' from XML node","messagePattern":"Unable to load job entry of type 'create folder' from XML node","errorType":"exception","errorClass":"KettleXMLException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/job/entries/createfolder/JobEntryCreateFolder.java","lineNumber":95,"sourceCode":"\n    retval.append( super.getXML() );\n    retval.append( \"      \" ).append( XMLHandler.addTagValue( \"foldername\", foldername ) );\n    retval.append( \"      \" ).append( XMLHandler.addTagValue( \"fail_of_folder_exists\", failOfFolderExists ) );\n    if ( parentJobMeta != null ) {\n      parentJobMeta.getNamedClusterEmbedManager().registerUrl( foldername );\n    }\n\n    return retval.toString();\n  }\n\n  public void loadXML( Node entrynode, List<DatabaseMeta> databases, List<SlaveServer> slaveServers,\n    Repository rep, IMetaStore metaStore ) throws KettleXMLException {\n    try {\n      super.loadXML( entrynode, databases, slaveServers );\n      foldername = XMLHandler.getTagValue( entrynode, \"foldername\" );\n      failOfFolderExists = \"Y\".equalsIgnoreCase( XMLHandler.getTagValue( entrynode, \"fail_of_folder_exists\" ) );\n    } catch ( KettleXMLException xe ) {\n      throw new KettleXMLException( \"Unable to load job entry of type 'create folder' from XML node\", xe );\n    }\n  }\n\n  public void loadRep( Repository rep, IMetaStore metaStore, ObjectId id_jobentry, List<DatabaseMeta> databases,\n    List<SlaveServer> slaveServers ) throws KettleException {\n    try {\n      foldername = rep.getJobEntryAttributeString( id_jobentry, \"foldername\" );\n      failOfFolderExists = rep.getJobEntryAttributeBoolean( id_jobentry, \"fail_of_folder_exists\" );\n    } catch ( KettleException dbe ) {\n      throw new KettleException(\n        \"Unable to load job entry of type 'create Folder' from the repository for id_jobentry=\" + id_jobentry,\n        dbe );\n    }\n  }\n\n  public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_job ) throws KettleException {\n    try {\n      rep.saveJobEntryAttribute( id_job, getObjectId(), \"foldername\", foldername );","sourceCodeStart":77,"sourceCodeEnd":113,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/job/entries/createfolder/JobEntryCreateFolder.java#L77-L113","documentation":"JobEntryCreateFolder.loadXML throws this KettleXMLException with a hard-coded message when the XML node for the 'create folder' job entry cannot be parsed. The original KettleXMLException is chained as cause. It indicates the 'foldername' or 'fail_of_folder_exists' settings could not be deserialized from the job XML.","triggerScenarios":"Calling loadXML on a 'create folder' entry node with malformed XML: unclosed tags, invalid characters, missing 'foldername'/'fail_of_folder_exists' elements, or an invalid entrynode passed in.","commonSituations":"Corrupted .kjb files from failed transfers or manual edits; XML produced by external tooling with wrong tag names; version skew between the tool that wrote the file and Pentaho reading it.","solutions":["Validate and repair the job XML so the entry node contains well-formed <foldername> and <fail_of_folder_exists> tags.","Check getCause() of the thrown exception for the exact parser error.","Recreate the entry in Spoon and re-save the job.","Restore the .kjb from version control or backup if corrupted."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"if (entrynode == null || XMLHandler.getTagValue(entrynode, \"foldername\") == null) {\n  throw new IllegalArgumentException(\"create folder entry missing <foldername>\");\n}","typeGuard":null,"tryCatchPattern":"try {\n  jobEntry.loadXML(entrynode, databases, slaveServers);\n} catch (KettleXMLException e) {\n  logError(\"Bad 'create folder' entry XML: \" + e.getCause(), e);\n  // rebuild entry with defaults or fail the job load with a clear message\n}","preventionTips":["Do not hand-edit job XML; use Spoon","Validate XML well-formedness before loadXML","Restore corrupted .kjb files from backups/version control","Check the chained cause for the exact parser message"],"tags":["pdi","kettle","xml-parse","job-entry"],"backgroundTag":"xml-parse-error","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"}