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
JobEntryTalendJobExec.ERROR_0001_Cannot_Load_Job_Entry_From_Xml_Node
What it means
JobEntryTalendJobExec.loadXML first calls super.loadXML and then reads the filename and class_name tags; any KettleXMLException encountered is rethrown as a KettleXMLException with the code-tagged message 'JobEntryTalendJobExec.ERROR_0001_Cannot_Load_Job_Entry_From_Xml_Node' and the original as cause. It signals the Talend job executor entry could not be rebuilt from its XML node.
Solutions
- Validate the <entry> node in the .kjb contains well-formed <filename> and <class_name> tags
- Restore the job file from a known-good copy (git history, backup)
- Open and re-save the job in a matching Pentaho/Spoon version
- Read the chained cause (xe) to pinpoint whether super.loadXML or the tag reads failed
Example fix
// before: truncated node in .kjb <filename>talend_job</filename> <!-- class_name tag missing / file truncated --> // after <filename>/jobs/myJob.jar</filename> <class_name>myjob.MyJob</class_name>
Defensive patterns
Strategy: try-catch
Validate before calling
// Java: check required tags exist before loadXML
if (XMLHandler.getTagValue(entrynode, "filename") == null) {
throw new KettleXMLException("TalendJobExec entry missing <filename> tag");
} Type guard
if (entrynode != null && XMLHandler.getNodeByTag(entrynode, "filename") != null) { /* safe */ } Try / catch
try {
entry.loadXML(entrynode, databases, slaveServers, rep, metaStore);
} catch (KettleXMLException e) {
logError("ERROR_0001: " + e.getCause(), e);
// restore job file from backup or recreate the entry in Spoon
} Prevention
- Never hand-edit .kjb XML without validating afterwards
- Store job files in git and check diffs on merge conflicts
- Match Pentaho versions between export and import
- Inspect the chained cause to identify which tag read failed
When it happens
Trigger: Calling loadXML on a job entry node when the parent JobEntryBase.loadXML fails or XMLHandler.getTagValue throws due to malformed/unexpected XML content for filename or class_name.
Common situations: Hand-edited or corrupted .kjb files; missing nested tags after a partial file write or bad merge in version control; a job exported by a newer Pentaho version and loaded by an older one with a different XML layout.
Related errors
- e.toString()
- ERROR_0002_Cannot_Load_Job_From_Repository
- FuzzyMatchMeta.Exception.UnableToLoadStepInfoFromXML
- GetXMLData.Error.UnableReadFile (localized message)
- GetXMLDataMeta.Exception.ErrorLoadingXML (localized message…
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/3b807ff36aebcc39.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/job/entries/talendjobexec/JobEntryTalendJobExec.java:105
public String getXML() {
StringBuilder retval = new StringBuilder( 50 );
retval.append( super.getXML() );
retval.append( " " ).append( XMLHandler.addTagValue( "filename", filename ) );
retval.append( " " ).append( XMLHandler.addTagValue( "class_name", className ) );
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" );
className = XMLHandler.getTagValue( entrynode, "class_name" );
} catch ( KettleXMLException xe ) {
throw new KettleXMLException( BaseMessages.getString(
PKG, "JobEntryTalendJobExec.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" );
className = rep.getJobEntryAttributeString( id_jobentry, "class_name" );
} catch ( KettleException dbe ) {
throw new KettleException( BaseMessages.getString(
PKG, "JobEntryTalendJobExec.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 );View on GitHub (pinned to f3058517a1)