pentaho/pentaho-kettle · error · KettleXMLException
Unable to load file exists job entry from XML node
Error message
Unable to load file exists job entry from XML node
What it means
Thrown by PaloCubeCreate.loadXML() when parsing the job entry's XML node raises a KettleXMLException. The entry wraps and rethrows with this message. Note the message text is a copy-paste bug: it mentions 'file exists' even though this is the Palo 'Create cube' job entry.
Solutions
- Open the .kjb file in a text editor and inspect the PaloCubeCreate entry XML for missing 'dimensionname' or other tags
- Re-create the job entry in Spoon and re-enter the cube/dimension names, then save
- Restore the job file from backup or version control
- Verify the job file loads in the same PDI version that produced it
Example fix
// before: hand-edited XML missing dimension nodes // <dimension_names/> (empty/corrupt) // after: regenerate via Spoon save // <fields><dimensionname>DIM1</dimensionname></fields>
Defensive patterns
Strategy: try-catch
Validate before calling
// Sanity-check the XML node before loadXML:
org.w3c.dom.Node entry = XMLHandler.getSubNode( jobnode, "entry" );
if ( entry == null || XMLHandler.getSubNode( entry, "cubeName" ) == null ) {
throw new IllegalStateException( "PaloCubeCreate entry XML incomplete" );
} Try / catch
try { entry.loadXML( node, databases, slaveServers ); } catch ( KettleXMLException e ) { log.error( "Corrupt job XML for PaloCubeCreate: " + e.getMessage(), e ); throw e; } Prevention
- Do not hand-edit .kjb files; edit in Spoon
- Keep job files under version control for recovery
- Validate XML after merging or migrating between PDI versions
When it happens
Trigger: JobEntryCubeCreate.loadXML is given a malformed or unexpected entrynode XML: missing/damaged dimensionname sub-nodes or other required tags, so XMLHandler calls fail and the KettleXMLException is wrapped.
Common situations: Hand-editing or truncating a .kjb job file; version migration producing XML the loader cannot parse; corrupted repository export; merging job files causing duplicate or missing nodes.
Related errors
- Unable to load file exists job entry from XML node
- Unable to load job entry for type file exists from the…
- Unable to load job entry for type file exists from the…
- Unable to load job entry of type 'Msgbox Info' from XML node
- ColumnExistsMeta.Exception.UnableToReadStepInfo
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/a1603960d1e7bd33.
Report an issue: GitHub.
Appendix: source
Thrown at plugins/palo/core/src/main/java/org/pentaho/di/job/entries/palo/JobEntryCubeCreate/PaloCubeCreate.java:112
public void loadXML( Node entrynode, List<DatabaseMeta> databases, List<SlaveServer> slaveServers, Repository rep,
IMetaStore metaStore ) throws KettleXMLException {
try {
super.loadXML( entrynode, databases, slaveServers );
this.setDatabaseMeta( DatabaseMeta.findDatabase( databases, XMLHandler.getTagValue( entrynode, "connection" ) ) );
this.setCubeName( XMLHandler.getTagValue( entrynode, "cubeName" ) );
Node dimensionNode = XMLHandler.getSubNode( entrynode, "dimensions" );
int nrDimensions = XMLHandler.countNodes( dimensionNode, "dimensionname" );
for ( int i = 0; i < nrDimensions; i++ ) {
String dimensionName =
XMLHandler.getNodeValue( XMLHandler.getSubNodeByNr( dimensionNode, "dimensionname", i ) );
this.dimensionNames.add( dimensionName );
}
} catch ( KettleXMLException xe ) {
throw new KettleXMLException( "Unable to load file exists 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 {
this.databaseMeta =
rep.loadDatabaseMetaFromJobEntryAttribute( id_jobentry, "connection", "id_database", databases );
this.setCubeName( rep.getStepAttributeString( id_jobentry, "cubeName" ) );
int nrFields = rep.countNrStepAttributes( id_jobentry, "dimensionname" );
for ( int i = 0; i < nrFields; i++ ) {
String dimensionName = rep.getStepAttributeString( id_jobentry, i, "dimensionname" );
this.dimensionNames.add( dimensionName );
}
} catch ( KettleException dbe ) {
throw new KettleException( "Unable to load job entry for type file exists from the repository for id_jobentry="View on GitHub (pinned to f3058517a1)