{"record":{"id":"dcf98ff0c4377c96","repo":"pentaho/pentaho-kettle","slug":"unable-to-load-job-entry-of-type-table-exists-from-xml-node","errorCode":null,"errorMessage":"Unable to load job entry of type 'table exists' from XML node","messagePattern":"Unable to load job entry of type 'table exists' from XML node","errorType":"exception","errorClass":"KettleXMLException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/job/entries/mysqlbulkfile/JobEntryMysqlBulkFile.java","lineNumber":147,"sourceCode":"    try {\n      super.loadXML( entrynode, databases, slaveServers );\n      schemaname = XMLHandler.getTagValue( entrynode, \"schemaname\" );\n      tablename = XMLHandler.getTagValue( entrynode, \"tablename\" );\n      filename = XMLHandler.getTagValue( entrynode, \"filename\" );\n      separator = XMLHandler.getTagValue( entrynode, \"separator\" );\n      enclosed = XMLHandler.getTagValue( entrynode, \"enclosed\" );\n      lineterminated = XMLHandler.getTagValue( entrynode, \"lineterminated\" );\n      limitlines = XMLHandler.getTagValue( entrynode, \"limitlines\" );\n      listcolumn = XMLHandler.getTagValue( entrynode, \"listcolumn\" );\n      highpriority = \"Y\".equalsIgnoreCase( XMLHandler.getTagValue( entrynode, \"highpriority\" ) );\n      optionenclosed = \"Y\".equalsIgnoreCase( XMLHandler.getTagValue( entrynode, \"optionenclosed\" ) );\n      outdumpvalue = Const.toInt( XMLHandler.getTagValue( entrynode, \"outdumpvalue\" ), -1 );\n      iffileexists = Const.toInt( XMLHandler.getTagValue( entrynode, \"iffileexists\" ), -1 );\n      String dbname = XMLHandler.getTagValue( entrynode, \"connection\" );\n      connection = DatabaseMeta.findDatabase( databases, dbname );\n      addfiletoresult = \"Y\".equalsIgnoreCase( XMLHandler.getTagValue( entrynode, \"addfiletoresult\" ) );\n    } catch ( KettleException e ) {\n      throw new KettleXMLException( \"Unable to load job entry of type 'table exists' from XML node\", 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      schemaname = rep.getJobEntryAttributeString( id_jobentry, \"schemaname\" );\n      tablename = rep.getJobEntryAttributeString( id_jobentry, \"tablename\" );\n      filename = rep.getJobEntryAttributeString( id_jobentry, \"filename\" );\n      separator = rep.getJobEntryAttributeString( id_jobentry, \"separator\" );\n      enclosed = rep.getJobEntryAttributeString( id_jobentry, \"enclosed\" );\n      lineterminated = rep.getJobEntryAttributeString( id_jobentry, \"lineterminated\" );\n      limitlines = rep.getJobEntryAttributeString( id_jobentry, \"limitlines\" );\n      listcolumn = rep.getJobEntryAttributeString( id_jobentry, \"listcolumn\" );\n      highpriority = rep.getJobEntryAttributeBoolean( id_jobentry, \"highpriority\" );\n      optionenclosed = rep.getJobEntryAttributeBoolean( id_jobentry, \"optionenclosed\" );\n\n      outdumpvalue = (int) rep.getJobEntryAttributeInteger( id_jobentry, \"outdumpvalue\" );","sourceCodeStart":129,"sourceCodeEnd":165,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/job/entries/mysqlbulkfile/JobEntryMysqlBulkFile.java#L129-L165","documentation":"KettleXMLException thrown by JobEntryMysqlBulkFile.loadXML() when parsing the XML node for this job entry (historically labeled 'table exists') fails. The message string is a copy-paste leftover; it is actually the MySQL bulk-file (export table to file) entry. It means the XML could not be read into entry fields.","triggerScenarios":"Loading a .kjb containing this entry when XMLHandler.getTagValue throws or DatabaseMeta.findDatabase fails — wrong/missing tags (schemaname, tablename, filename, outdumpvalue, iffileexists, connection, addfiletoresult) or null entrynode.","commonSituations":"Truncated or hand-edited .kjb; file generated by a different Pentaho version with renamed tags; the named connection is not present in the databases list.","solutions":["Inspect the XML node for the entry and restore missing/mistyped tags (e.g. correct <connection> name).","Regenerate the entry in Spoon to produce valid XML.","Add the referenced shared connection to the job's database metadata list.","Align Kettle versions between file producer and consumer."],"exampleFix":"// before\n<connction>MySQL-Local</connction>\n// after\n<connection>MySQL-Local</connection>","handlingStrategy":"try-catch","validationCode":"// before load\nif ( entrynode == null ) throw new KettleXMLException( \"null entry node for MySQL bulk file entry\" );\nif ( XMLHandler.getTagValue( entrynode, \"connection\" ) == null ) throw new KettleXMLException( \"missing <connection> tag\" );","typeGuard":"boolean ok = (entrynode != null && XMLHandler.getTagValue( entrynode, \"addfiletoresult\" ) != null);","tryCatchPattern":"try { jobEntry.loadXML( entrynode, databases, metaStore ); } catch ( KettleXMLException e ) { logError( \"Cannot parse entry XML: \" + e.getMessage(), e ); }","preventionTips":["Edit jobs in Spoon, not by hand in the XML","Keep Kettle versions consistent","Ensure named connections exist in the databases list","Validate XML before loading"],"tags":["kettle","xml","job-entry","mysql","deserialization"],"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"}