pentaho/pentaho-kettle · error · KettleXMLException
ERROR_0001_Cannot_Load_Job_Entry_From_Xml_Node
ERROR_0001_Cannot_Load_Job_Entry_From_Xml_Node
Error message
JobEntryFilesExist.ERROR_0001_Cannot_Load_Job_Entry_From_Xml_Node
What it means
Thrown by JobEntryFilesExist.loadXML when the 'files exist' job entry cannot be deserialized from its XML node. Unlike some siblings it appends xe.getMessage() to the localized message but does NOT chain the cause, so the original stack is lost. It indicates the entry's field list XML could not be parsed.
Solutions
- Re-create the entry in Spoon to regenerate correct fields XML
- Ensure the node has <fields><field><name>...</name></field>...</fields> structure
- Note the message contains xe.getMessage() — use it to locate the parse problem
- Restore the .kjb from a known-good copy
Example fix
// before (missing fields wrapper) <entry name='FilesExist'><name>a.txt</name></entry> // after <entry name='FilesExist'><fields><field><name>a.txt</name></field></fields></entry>
Defensive patterns
Strategy: validation
Validate before calling
// Java: check fields structure before loading
Node fields = XMLHandler.getSubNode(entrynode, "fields");
if (fields == null || XMLHandler.countNodes(fields, "field") == 0) {
throw new IllegalArgumentException("filesexist entry missing <fields>/<field><name>");
} Try / catch
try {
jobEntry.loadXML(entrynode, databases, slaveServers, rep, metaStore);
} catch (KettleXMLException e) {
logError("Corrupt filesexist entry XML: " + e.getMessage());
// note: cause is not chained here; rely on getMessage()
} Prevention
- Never generate entry XML without the <fields> wrapper
- Keep each argument in its own <field><name> element
- Diff .kjb changes in VCS to catch structural edits
- Test-load generated jobs before deploying
When it happens
Trigger: Loading a .kjb whose <entry type='filesexist'> node has a malformed or missing <fields> section with <field><name> children, or whose base attributes fail to parse.
Common situations: Hand-edited .kjb with wrong field structure; XML truncated mid-fields; version drift changing the entry's XML layout.
Related errors
- ERROR_0001_Cannot_Load_Job_Entry_From_Xml_Node
- ERROR_0001_Cannot_Load_Job_Entry_From_Xml_Node
- ERROR_0001_Unable_To_Load_From_Xml_Node
- JobEntryAbort.UnableToLoadFromXml.Label
- JobEntryAddResultFilenames.UnableToLoadFromXml
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/f2b1dd7e7db7b4b2.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/job/entries/filesexist/JobEntryFilesExist.java:124
try {
super.loadXML( entrynode, databases, slaveServers );
filename = XMLHandler.getTagValue( entrynode, "filename" );
Node fields = XMLHandler.getSubNode( entrynode, "fields" );
// How many field arguments?
int nrFields = XMLHandler.countNodes( fields, "field" );
allocate( nrFields );
// Read them all...
for ( int i = 0; i < nrFields; i++ ) {
Node fnode = XMLHandler.getSubNodeByNr( fields, "field", i );
arguments[i] = XMLHandler.getTagValue( fnode, "name" );
}
} catch ( KettleXMLException xe ) {
throw new KettleXMLException( BaseMessages.getString(
PKG, "JobEntryFilesExist.ERROR_0001_Cannot_Load_Job_Entry_From_Xml_Node", xe.getMessage() ) );
}
}
public void loadRep( Repository rep, IMetaStore metaStore, ObjectId id_jobentry, List<DatabaseMeta> databases,
List<SlaveServer> slaveServers ) throws KettleException {
try {
filename = rep.getJobEntryAttributeString( id_jobentry, "filename" );
// How many arguments?
int argnr = rep.countNrJobEntryAttributes( id_jobentry, "name" );
allocate( argnr );
// Read them all...
for ( int a = 0; a < argnr; a++ ) {
arguments[a] = rep.getJobEntryAttributeString( id_jobentry, a, "name" );
}
} catch ( KettleException dbe ) {View on GitHub (pinned to f3058517a1)