pentaho/pentaho-kettle · error · KettleXMLException
Unable to load job entry of type 'create folder' from XML…
Error message
Unable to load job entry of type 'create folder' from XML node
What it means
JobEntryCreateFolder.loadXML throws this KettleXMLException with a hard-coded message when the XML node for the 'create folder' job entry cannot be parsed. The original KettleXMLException is chained as cause. It indicates the 'foldername' or 'fail_of_folder_exists' settings could not be deserialized from the job XML.
Solutions
- Validate and repair the job XML so the entry node contains well-formed <foldername> and <fail_of_folder_exists> tags.
- Check getCause() of the thrown exception for the exact parser error.
- Recreate the entry in Spoon and re-save the job.
- Restore the .kjb from version control or backup if corrupted.
Defensive patterns
Strategy: try-catch
Validate before calling
if (entrynode == null || XMLHandler.getTagValue(entrynode, "foldername") == null) {
throw new IllegalArgumentException("create folder entry missing <foldername>");
} Try / catch
try {
jobEntry.loadXML(entrynode, databases, slaveServers);
} catch (KettleXMLException e) {
logError("Bad 'create folder' entry XML: " + e.getCause(), e);
// rebuild entry with defaults or fail the job load with a clear message
} Prevention
- Do not hand-edit job XML; use Spoon
- Validate XML well-formedness before loadXML
- Restore corrupted .kjb files from backups/version control
- Check the chained cause for the exact parser message
When it happens
Trigger: Calling loadXML on a 'create folder' entry node with malformed XML: unclosed tags, invalid characters, missing 'foldername'/'fail_of_folder_exists' elements, or an invalid entrynode passed in.
Common situations: Corrupted .kjb files from failed transfers or manual edits; XML produced by external tooling with wrong tag names; version skew between the tool that wrote the file and Pentaho reading it.
Related errors
- JobCopyFiles.Error.Exception.UnableLoadXML
- JobEntryCopyMoveResultFilenames.CanNotLoadFromXML
- JobEntryMSAccessBulkLoad.Meta.UnableLoadXML
- Unable to load job entry of type 'create file' from XML node
- CubeInputMeta.Exception.UnableToLoadStepInfo
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/c44a61d4d5ed635e.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/job/entries/createfolder/JobEntryCreateFolder.java:95
retval.append( super.getXML() );
retval.append( " " ).append( XMLHandler.addTagValue( "foldername", foldername ) );
retval.append( " " ).append( XMLHandler.addTagValue( "fail_of_folder_exists", failOfFolderExists ) );
if ( parentJobMeta != null ) {
parentJobMeta.getNamedClusterEmbedManager().registerUrl( foldername );
}
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 );
foldername = XMLHandler.getTagValue( entrynode, "foldername" );
failOfFolderExists = "Y".equalsIgnoreCase( XMLHandler.getTagValue( entrynode, "fail_of_folder_exists" ) );
} catch ( KettleXMLException xe ) {
throw new KettleXMLException( "Unable to load job entry of type 'create folder' from XML node", xe );
}
}
public void loadRep( Repository rep, IMetaStore metaStore, ObjectId id_jobentry, List<DatabaseMeta> databases,
List<SlaveServer> slaveServers ) throws KettleException {
try {
foldername = rep.getJobEntryAttributeString( id_jobentry, "foldername" );
failOfFolderExists = rep.getJobEntryAttributeBoolean( id_jobentry, "fail_of_folder_exists" );
} catch ( KettleException dbe ) {
throw new KettleException(
"Unable to load job entry of type 'create Folder' from the repository for id_jobentry=" + id_jobentry,
dbe );
}
}
public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_job ) throws KettleException {
try {
rep.saveJobEntryAttribute( id_job, getObjectId(), "foldername", foldername );View on GitHub (pinned to f3058517a1)