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

  1. Open the .kjb file in a text editor and inspect the PaloCubeCreate entry XML for missing 'dimensionname' or other tags
  2. Re-create the job entry in Spoon and re-enter the cube/dimension names, then save
  3. Restore the job file from backup or version control
  4. 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

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


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)