pentaho/pentaho-kettle · error · KettleXMLException
Unable to load file exists job entry from XML node
Error message
Unable to load file exists job entry from XML node
What it means
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.
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
Example fix
// before // parsing a hand-edited node: <source_directory>x</sourcedir> // after // use the exact tag names the entry saves: <sourceDirectory>...</sourceDirectory>
Defensive patterns
Strategy: validation
Validate before calling
// validate the job XML before load
DocumentBuilderFactory f = DocumentBuilderFactory.newInstance();
Document doc = f.newDocumentBuilder().parse(jobXmlFile);
NodeList entries = doc.getElementsByTagName("entry");
if (entries.getLength() == 0) throw new IllegalArgumentException("No job entry nodes in XML"); Try / catch
try { jobEntry.loadXML(node, databases, slaveServers); } catch (KettleXMLException e) { logger.error("Failed to parse job entry XML", e); throw e; } Prevention
- 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
When it happens
Trigger: 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.
Common situations: Hand-edited or corrupted .kjb job files; XML saved by an incompatible Pentaho/Kettle version missing required child nodes; truncated file transfer.
Understand the failure class
Background: Schema validation failed / invalid input schema: payload rejected because its shape doesn't match the expected schema — this error's family across 28 libraries.
Related errors
- JobEntryZipFile.UnableLoadJobEntryXML
- Unable to load base info for job entry
- Unable to load job entry from XML node
- Unable to load job entry from XML node
- Unable to load job entry of type 'Msgbox Info' from XML node
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/f1ac11c64a38c36e.
Report an issue: GitHub.
Appendix: source
Thrown at plugins/dummy/core/src/main/java/org/pentaho/di/pdi/jobentry/dummy/JobEntryDummy.java:109
retval.append( super.getXML() );
retval.append( " " + XMLHandler.addTagValue( SOURCEDIRECTORY, sourceDirectory ) );
retval.append( " " + XMLHandler.addTagValue( TARGETDIRECTORY, targetDirectory ) );
retval.append( " " + XMLHandler.addTagValue( WILDCARD, wildcard ) );
return retval.toString();
}
@Override
public void loadXML( Node entrynode, List<DatabaseMeta> databases, List<SlaveServer> slaveServers, Repository rep ) throws KettleXMLException {
try {
super.loadXML( entrynode, databases, slaveServers );
sourceDirectory = XMLHandler.getTagValue( entrynode, SOURCEDIRECTORY );
targetDirectory = XMLHandler.getTagValue( entrynode, TARGETDIRECTORY );
wildcard = XMLHandler.getTagValue( entrynode, WILDCARD );
} catch ( KettleXMLException xe ) {
throw new KettleXMLException( "Unable to load file exists job entry from XML node",
xe );
}
}
@Override
public void loadRep( Repository rep, ObjectId id_jobentry, List<DatabaseMeta> databases, List<SlaveServer> slaveServers ) throws KettleException {
try {
super.loadRep( rep, id_jobentry, databases, slaveServers );
sourceDirectory = rep.getJobEntryAttributeString( id_jobentry, SOURCEDIRECTORY );
targetDirectory = rep.getJobEntryAttributeString( id_jobentry, TARGETDIRECTORY );
wildcard = rep.getJobEntryAttributeString( id_jobentry, WILDCARD );
} catch ( KettleException dbe ) {
throw new KettleException(
"Unable to load job entry for type file exists from the repository for id_jobentry="
+ id_jobentry, dbe );
}
}
View on GitHub (pinned to f3058517a1)