{"record":{"id":"2b3e4b069ed3bbda","repo":"pentaho/pentaho-kettle","slug":"jobentrycolumnsexist-meta-unableloadxml","errorCode":null,"errorMessage":"JobEntryColumnsExist.Meta.UnableLoadXml","messagePattern":"JobEntryColumnsExist\\.Meta\\.UnableLoadXml","errorType":"exception","errorClass":"KettleXMLException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/job/entries/columnsexist/JobEntryColumnsExist.java","lineNumber":132,"sourceCode":"      schemaname = XMLHandler.getTagValue( entrynode, \"schemaname\" );\n\n      String dbname = XMLHandler.getTagValue( entrynode, \"connection\" );\n      connection = DatabaseMeta.findDatabase( databases, dbname );\n\n      Node fields = XMLHandler.getSubNode( entrynode, \"fields\" );\n\n      // How many field arguments?\n      int nrFields = XMLHandler.countNodes( fields, \"field\" );\n      allocate( nrFields );\n\n      // Read them all...\n      for ( int i = 0; i < nrFields; i++ ) {\n        Node fnode = XMLHandler.getSubNodeByNr( fields, \"field\", i );\n        arguments[i] = XMLHandler.getTagValue( fnode, \"name\" );\n      }\n\n    } catch ( KettleException e ) {\n      throw new KettleXMLException( BaseMessages.getString( PKG, \"JobEntryColumnsExist.Meta.UnableLoadXml\" ), e );\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      tablename = rep.getJobEntryAttributeString( id_jobentry, \"tablename\" );\n      schemaname = rep.getJobEntryAttributeString( id_jobentry, \"schemaname\" );\n\n      connection = rep.loadDatabaseMetaFromJobEntryAttribute( id_jobentry, \"connection\", \"id_database\", databases );\n\n      // How many arguments?\n      int argnr = rep.countNrJobEntryAttributes( id_jobentry, \"name\" );\n      arguments = new String[argnr];\n\n      // Read them all...\n      for ( int a = 0; a < argnr; a++ ) {\n        arguments[a] = rep.getJobEntryAttributeString( id_jobentry, a, \"name\" );","sourceCodeStart":114,"sourceCodeEnd":150,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/job/entries/columnsexist/JobEntryColumnsExist.java#L114-L150","documentation":"JobEntryColumnsExist.loadXML wraps any KettleException thrown while decoding the entry's XML (count of fields and per-field 'name' tags) into this KettleXMLException. It means the 'Columns exist in a table' entry's XML fragment could not be parsed into its arguments array.","triggerScenarios":"Calling loadXML when XMLHandler calls for the <fields>/<field> nodes or 'name' tags fail — missing fields node, wrong structure, or a throwing XMLHandler operation.","commonSituations":"Job file edited by hand removing <fields>; entry XML copied from a different entry type; export/import across PDI versions with changed layout; truncated file.","solutions":["Inspect the entry XML: it must contain <fields> with <field><name>…</name></field> children","Recreate the 'Columns exist in a table' entry in Spoon and re-save","Load the job in the PDI version that produced it, then re-export","Check the chained exception for the exact failing XMLHandler call"],"exampleFix":"// before\n<connection/><schema/><table/> <!-- <fields> block accidentally deleted -->\n// after\n<connection/><schema/><table/><fields><field><name>id</name></field><field><name>amount</name></field></fields>","handlingStrategy":"try-catch","validationCode":"org.w3c.dom.Node fields = XMLHandler.getSubNode(entryNode, \"fields\");\nif (fields == null) throw new IllegalArgumentException(\"ColumnsExist entry XML missing <fields>\");","typeGuard":null,"tryCatchPattern":"try {\n  entry.loadXML(entryNode, databases, slaveServers, metaStore);\n} catch (KettleXMLException e) {\n  log.error(\"Cannot parse ColumnsExist entry XML: \" + e.getCause(), e);\n}","preventionTips":["Recreate rather than patch entries when XML layout questions arise","Keep job files under version control to diff/detect broken fragments","Avoid mixing entry XML across different job entry types"],"tags":["xml","job-entry","kettle","deserialization"],"backgroundTag":"json-unmarshal-failed","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"}