{"record":{"id":"a1603960d1e7bd33","repo":"pentaho/pentaho-kettle","slug":"unable-to-load-file-exists-job-entry-from-xml-node-a16039","errorCode":null,"errorMessage":"Unable to load file exists job entry from XML node","messagePattern":"Unable to load file exists job entry from XML node","errorType":"exception","errorClass":"KettleXMLException","httpStatus":null,"severity":"error","filePath":"plugins/palo/core/src/main/java/org/pentaho/di/job/entries/palo/JobEntryCubeCreate/PaloCubeCreate.java","lineNumber":112,"sourceCode":"\n  public void loadXML( Node entrynode, List<DatabaseMeta> databases, List<SlaveServer> slaveServers, Repository rep,\n      IMetaStore metaStore ) throws KettleXMLException {\n    try {\n      super.loadXML( entrynode, databases, slaveServers );\n\n      this.setDatabaseMeta( DatabaseMeta.findDatabase( databases, XMLHandler.getTagValue( entrynode, \"connection\" ) ) );\n      this.setCubeName( XMLHandler.getTagValue( entrynode, \"cubeName\" ) );\n\n      Node dimensionNode = XMLHandler.getSubNode( entrynode, \"dimensions\" );\n      int nrDimensions = XMLHandler.countNodes( dimensionNode, \"dimensionname\" );\n      for ( int i = 0; i < nrDimensions; i++ ) {\n        String dimensionName =\n            XMLHandler.getNodeValue( XMLHandler.getSubNodeByNr( dimensionNode, \"dimensionname\", i ) );\n        this.dimensionNames.add( dimensionName );\n      }\n\n    } catch ( KettleXMLException xe ) {\n      throw new KettleXMLException( \"Unable to load file exists job entry from XML node\", xe );\n    }\n  }\n\n  public void loadRep( Repository rep, IMetaStore metaStore, ObjectId id_jobentry, List<DatabaseMeta> databases,\n      List<SlaveServer> slaveServers ) throws KettleException {\n    try {\n      this.databaseMeta =\n          rep.loadDatabaseMetaFromJobEntryAttribute( id_jobentry, \"connection\", \"id_database\", databases );\n      this.setCubeName( rep.getStepAttributeString( id_jobentry, \"cubeName\" ) );\n\n      int nrFields = rep.countNrStepAttributes( id_jobentry, \"dimensionname\" );\n\n      for ( int i = 0; i < nrFields; i++ ) {\n        String dimensionName = rep.getStepAttributeString( id_jobentry, i, \"dimensionname\" );\n        this.dimensionNames.add( dimensionName );\n      }\n    } catch ( KettleException dbe ) {\n      throw new KettleException( \"Unable to load job entry for type file exists from the repository for id_jobentry=\"","sourceCodeStart":94,"sourceCodeEnd":130,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/plugins/palo/core/src/main/java/org/pentaho/di/job/entries/palo/JobEntryCubeCreate/PaloCubeCreate.java#L94-L130","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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"],"exampleFix":"// before: hand-edited XML missing dimension nodes\n// <dimension_names/>  (empty/corrupt)\n// after: regenerate via Spoon save\n// <fields><dimensionname>DIM1</dimensionname></fields>","handlingStrategy":"try-catch","validationCode":"// Sanity-check the XML node before loadXML:\norg.w3c.dom.Node entry = XMLHandler.getSubNode( jobnode, \"entry\" );\nif ( entry == null || XMLHandler.getSubNode( entry, \"cubeName\" ) == null ) {\n  throw new IllegalStateException( \"PaloCubeCreate entry XML incomplete\" );\n}","typeGuard":null,"tryCatchPattern":"try { entry.loadXML( node, databases, slaveServers ); } catch ( KettleXMLException e ) { log.error( \"Corrupt job XML for PaloCubeCreate: \" + e.getMessage(), e ); throw e; }","preventionTips":["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"],"tags":["kettle","pdi","xml","palo","job-entry"],"backgroundTag":"xml-parse-error","analyzedSha":"f3058517a153da500bf4551f46d79b91bf8ec552","analyzedAt":"2026-09-13T14:04:16.340Z","contentChangedAt":"2026-09-13T14:04:16.340Z","schemaVersion":2},"datasetVersion":"2026-09-20T23:17:15.980Z"}