{"record":{"id":"30d0e2e82ad3458c","repo":"pentaho/pentaho-kettle","slug":"unable-to-load-job-entry-of-type-create-file-from-xml-node-30d0e2","errorCode":null,"errorMessage":"Unable to load job entry of type 'create file' from XML node","messagePattern":"Unable to load job entry of type 'create file' from XML node","errorType":"exception","errorClass":"KettleXMLException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/job/entries/writetofile/JobEntryWriteToFile.java","lineNumber":112,"sourceCode":"    retval.append( \"      \" ).append( XMLHandler.addTagValue( \"encoding\", encoding ) );\n    if ( parentJobMeta != null ) {\n      parentJobMeta.getNamedClusterEmbedManager().registerUrl( filename );\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      filename = XMLHandler.getTagValue( entrynode, \"filename\" );\n      createParentFolder = \"Y\".equalsIgnoreCase( XMLHandler.getTagValue( entrynode, \"createParentFolder\" ) );\n      appendFile = \"Y\".equalsIgnoreCase( XMLHandler.getTagValue( entrynode, \"appendFile\" ) );\n      content = XMLHandler.getTagValue( entrynode, \"content\" );\n      encoding = XMLHandler.getTagValue( entrynode, \"encoding\" );\n    } catch ( KettleXMLException xe ) {\n      throw new KettleXMLException( \"Unable to load job entry of type 'create file' 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      filename = rep.getJobEntryAttributeString( id_jobentry, \"filename\" );\n      createParentFolder = rep.getJobEntryAttributeBoolean( id_jobentry, \"createParentFolder\" );\n      appendFile = rep.getJobEntryAttributeBoolean( id_jobentry, \"appendFile\" );\n      content = rep.getJobEntryAttributeString( id_jobentry, \"content\" );\n      encoding = rep.getJobEntryAttributeString( id_jobentry, \"encoding\" );\n    } catch ( KettleException dbe ) {\n      throw new KettleException(\n        \"Unable to load job entry of type 'create file' from the repository for id_jobentry=\" + id_jobentry, dbe );\n    }\n  }\n\n  public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_job ) throws KettleException {","sourceCodeStart":94,"sourceCodeEnd":130,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/job/entries/writetofile/JobEntryWriteToFile.java#L94-L130","documentation":"KettleXMLException thrown by JobEntryWriteToFile.loadXML when parsing the 'create file' (Write To File) job entry's XML node fails. The message is legacy ('create file') but the entry is the Write to File entry; the parse exception is chained as the cause.","triggerScenarios":"Calling loadXML on a node where XMLHandler.getTagValue fails — malformed XML, missing tags, or invalid characters in filename/content/encoding fields.","commonSituations":"Corrupted or hand-edited kjb files; XML truncated in transit; encoding mismatches when the content contains special characters.","solutions":["Validate the job XML is well-formed","Restore the kjb from backup/version control","Recreate the Write to File job entry in Spoon","Inspect the chained KettleXMLException for the exact parse failure"],"exampleFix":"// before\nentry.loadXML(entrynode, databases, slaveServers); // throws\n// after\ntry {\n  entry.loadXML(entrynode, databases, slaveServers);\n} catch (KettleXMLException e) {\n  logError(\"Bad XML for write-to-file entry: \" + e.getCause(), e);\n}","handlingStrategy":"try-catch","validationCode":"Document doc = XMLHandler.loadXMLFile(inputStream);\nif (doc == null) throw new IllegalArgumentException(\"invalid job XML\");","typeGuard":null,"tryCatchPattern":"try {\n  entry.loadXML(entrynode, databases, slaveServers);\n} catch (KettleXMLException e) {\n  logError(\"XML load failed for write-to-file entry: \" + e.getCause(), e);\n}","preventionTips":["Validate kjb XML well-formedness after any manual edit","Keep job files in version control for easy restore","Use UTF-8 encoding consistently for job files"],"tags":["kettle","xml","job-entry","parse"],"backgroundTag":"json-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"}