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
JobEntryFileExists.ERROR_0001_Cannot_Load_Job_Entry_From_Xml_Node
What it means
Thrown by JobEntryFileExists.loadXML when the 'file exists' job entry cannot be deserialized from its XML node. It wraps the KettleXMLException in a localized message. Failure means the entry's XML (base attributes or the <filename> tag) could not be read correctly.
Solutions
- Re-open/re-create the entry in Spoon to regenerate valid XML
- Ensure the entry node contains a <filename> child tag
- Inspect the wrapped KettleXMLException cause for the parse offset
- Regenerate or restore the .kjb from version control
Example fix
// before <entry name='Check file'/> // after <entry name='Check file'><filename>/data/input.csv</filename></entry>
Defensive patterns
Strategy: try-catch
Validate before calling
// Java: ensure filename tag exists before loading
if (XMLHandler.getSubNode(entrynode, "filename") == null) {
throw new IllegalArgumentException("fileexists entry missing <filename>");
} Try / catch
try {
jobEntry.loadXML(entrynode, databases, slaveServers, rep, metaStore);
} catch (KettleXMLException e) {
logError("Corrupt fileexists entry XML: " + e.getMessage(), e);
// skip entry or substitute defaults
} Prevention
- Edit job entries only through Spoon
- Validate .kjb XML well-formedness after external generation
- Pin Kettle versions across environments
- Restore from VCS instead of patching broken XML
When it happens
Trigger: Loading a .kjb whose <entry type='fileexists'> node is malformed, missing the <filename> child, or whose base loadXML (super) fails on corrupted name/description attributes.
Common situations: Truncated .kjb from an interrupted transfer; manually edited XML with wrong tag names; XML from an incompatible Kettle version.
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/42eac4297feef612.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/job/entries/fileexists/JobEntryFileExists.java:94
public String getXML() {
StringBuilder retval = new StringBuilder( 20 );
retval.append( super.getXML() );
retval.append( " " ).append( XMLHandler.addTagValue( "filename", filename ) );
if ( parentJobMeta != null ) {
parentJobMeta.getNamedClusterEmbedManager().registerUrl( filename );
}
return retval.toString();
}
public void loadXML( Node entrynode, List<DatabaseMeta> databases, List<SlaveServer> slaveServers,
Repository rep, IMetaStore metaStore ) throws KettleXMLException {
try {
super.loadXML( entrynode, databases, slaveServers );
filename = XMLHandler.getTagValue( entrynode, "filename" );
} catch ( KettleXMLException xe ) {
throw new KettleXMLException( BaseMessages.getString(
PKG, "JobEntryFileExists.ERROR_0001_Cannot_Load_Job_Entry_From_Xml_Node" ), xe );
}
}
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" );
} catch ( KettleException dbe ) {
throw new KettleException( BaseMessages.getString(
PKG, "JobEntryFileExists.ERROR_0002_Cannot_Load_Job_From_Repository", id_jobentry ), dbe );
}
}
public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_job ) throws KettleException {
try {
rep.saveJobEntryAttribute( id_job, getObjectId(), "filename", filename );
} catch ( KettleDatabaseException dbe ) {View on GitHub (pinned to f3058517a1)