pentaho/pentaho-kettle · error · KettleXMLException
Error_0001
Error_0001
Error message
JobEntryDeleteFile.Error_0001_Unable_To_Load_Job_From_Xml_Node
What it means
JobEntryDeleteFile.loadXML throws this KettleXMLException (code Error_0001) when reading the delete-file entry's XML node fails — super.loadXML, the 'filename' tag, or the 'fail_if_file_not_exists' tag. It indicates the entry could not be deserialized from the .kjb document.
Solutions
- Validate the .kjb XML parses and the <entry> block contains <filename> and <fail_if_file_not_exists> tags
- Recreate the Delete file entry in Spoon and re-save
- Use xmllint or similar to find the malformed section
- Check the chained cause (xe) to see whether failure came from super.loadXML or a missing tag
Example fix
// before <entry> <name>Delete file</name> </entry> // after <entry> <name>Delete file</name> <filename>/tmp/old.log</filename> <fail_if_file_not_exists>N</fail_if_file_not_exists> </entry>
Defensive patterns
Strategy: validation
Validate before calling
// before loadXML
Node entrynode = XMLHandler.getSubNode(jobnode, "entry");
if (entrynode == null) throw new KettleXMLException("Missing <entry> node");
if (XMLHandler.getTagValue(entrynode, "filename") == null) {
throw new KettleXMLException("Missing <filename> in Delete file entry");
} Try / catch
try {
entry.loadXML(entrynode, databases, slaveServers, rep, metaStore);
} catch (KettleXMLException e) {
log.error("DeleteFile entry XML invalid (code Error_0001)", e.getCause());
// repair the <entry> node in the .kjb or recreate in Spoon
throw e;
} Prevention
- Validate .kjb XML structure before import
- Include <filename> and <fail_if_file_not_exists> in generated entry templates
- Avoid manual edits to job XML; use Spoon
- Keep job files under version control
When it happens
Trigger: loadXML with a malformed or missing entrynode, an XMLHandler error while fetching tags, or a KettleXMLException from super.loadXML.
Common situations: Truncated or hand-edited .kjb file; XML generated by a different Pentaho version missing expected tags; copy-paste of an incomplete <entry> block; file encoding corruption.
Related errors
- AnalyticQueryMeta.Exception.UnableToLoadStepInfoFromXML
- ERROR_0001
- Error loading transformation executor details from XML
- GetXMLData.Log.UnableCreateDocument (localized message)
- It was not possibke to load the Trim metadata from XML
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/771a280dd1aed60c.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/job/entries/deletefile/JobEntryDeleteFile.java:100
retval.append( super.getXML() );
retval.append( " " ).append( XMLHandler.addTagValue( "filename", filename ) );
retval.append( " " ).append( XMLHandler.addTagValue( "fail_if_file_not_exists", failIfFileNotExists ) );
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" );
failIfFileNotExists = "Y".equalsIgnoreCase( XMLHandler.getTagValue( entrynode, "fail_if_file_not_exists" ) );
} catch ( KettleXMLException xe ) {
throw new KettleXMLException( BaseMessages.getString(
PKG, "JobEntryDeleteFile.Error_0001_Unable_To_Load_Job_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" );
failIfFileNotExists = rep.getJobEntryAttributeBoolean( id_jobentry, "fail_if_file_not_exists" );
} catch ( KettleException dbe ) {
throw new KettleException( BaseMessages.getString(
PKG, "JobEntryDeleteFile.ERROR_0002_Unable_To_Load_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)