{"record":{"id":"f1ac11c64a38c36e","repo":"pentaho/pentaho-kettle","slug":"unable-to-load-file-exists-job-entry-from-xml-node","errorCode":null,"errorMessage":"Unable to load file exists job entry from XML node","messagePattern":"Unable to load file exists job entry from XML node","errorType":"exception","errorClass":"KettleXMLException","httpStatus":null,"severity":"error","filePath":"plugins/dummy/core/src/main/java/org/pentaho/di/pdi/jobentry/dummy/JobEntryDummy.java","lineNumber":109,"sourceCode":"\n    retval.append( super.getXML() );\n\n    retval.append( \"      \" + XMLHandler.addTagValue( SOURCEDIRECTORY, sourceDirectory ) );\n    retval.append( \"      \" + XMLHandler.addTagValue( TARGETDIRECTORY, targetDirectory ) );\n    retval.append( \"      \" + XMLHandler.addTagValue( WILDCARD, wildcard ) );\n\n    return retval.toString();\n  }\n\n  @Override\n  public void loadXML( Node entrynode, List<DatabaseMeta> databases, List<SlaveServer> slaveServers, Repository rep ) throws KettleXMLException {\n    try {\n      super.loadXML( entrynode, databases, slaveServers );\n      sourceDirectory = XMLHandler.getTagValue( entrynode, SOURCEDIRECTORY );\n      targetDirectory = XMLHandler.getTagValue( entrynode, TARGETDIRECTORY );\n      wildcard = XMLHandler.getTagValue( entrynode, WILDCARD );\n    } catch ( KettleXMLException xe ) {\n      throw new KettleXMLException( \"Unable to load file exists job entry from XML node\",\n          xe );\n    }\n  }\n\n  @Override\n  public void loadRep( Repository rep, ObjectId id_jobentry, List<DatabaseMeta> databases, List<SlaveServer> slaveServers ) throws KettleException {\n    try {\n      super.loadRep( rep, id_jobentry, databases, slaveServers );\n      sourceDirectory = rep.getJobEntryAttributeString( id_jobentry, SOURCEDIRECTORY );\n      targetDirectory = rep.getJobEntryAttributeString( id_jobentry, TARGETDIRECTORY );\n      wildcard = rep.getJobEntryAttributeString( id_jobentry, WILDCARD );\n    } catch ( KettleException dbe ) {\n      throw new KettleException(\n          \"Unable to load job entry for type file exists from the repository for id_jobentry=\"\n              + id_jobentry, dbe );\n    }\n  }\n","sourceCodeStart":91,"sourceCodeEnd":127,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/plugins/dummy/core/src/main/java/org/pentaho/di/pdi/jobentry/dummy/JobEntryDummy.java#L91-L127","documentation":"JobEntryDummy wraps the 'File Exists' job entry and loads its settings (source directory, target directory, wildcard) from a job's XML definition via loadXML. If XMLHandler parsing or the super.loadXML call fails, it rethrows as a KettleXMLException with this message. It indicates the job entry's XML node could not be parsed into the entry's settings.","triggerScenarios":"Calling loadXML on a job entry node whose XML is malformed or missing expected structure, causing super.loadXML or XMLHandler.getTagValue to throw a KettleXMLException.","commonSituations":"Hand-edited or corrupted .kjb job files; XML saved by an incompatible Pentaho/Kettle version missing required child nodes; truncated file transfer.","solutions":["Open the .kjb file and validate the XML; fix malformed tags around the 'file exists' entry","Recreate the File Exists job entry in Spoon and re-save the job","Check that the file was created by a compatible Kettle/PDI version and re-export if not","Inspect the cause (xe) in the stack trace to find the exact parsing failure"],"exampleFix":"// before\n// parsing a hand-edited node: <source_directory>x</sourcedir>\n// after\n// use the exact tag names the entry saves: <sourceDirectory>...</sourceDirectory>","handlingStrategy":"validation","validationCode":"// validate the job XML before load\nDocumentBuilderFactory f = DocumentBuilderFactory.newInstance();\nDocument doc = f.newDocumentBuilder().parse(jobXmlFile);\nNodeList entries = doc.getElementsByTagName(\"entry\");\nif (entries.getLength() == 0) throw new IllegalArgumentException(\"No job entry nodes in XML\");","typeGuard":null,"tryCatchPattern":"try { jobEntry.loadXML(node, databases, slaveServers); } catch (KettleXMLException e) { logger.error(\"Failed to parse job entry XML\", e); throw e; }","preventionTips":["Never hand-edit .kjb files; edit via Spoon","Keep PDI client and repository/plugin versions in sync","Version-control job files and validate XML before deploy"],"tags":["xml","pdi","job-entry","deserialization"],"backgroundTag":"schema-validation-failed","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"}