{"record":{"id":"aa14a1776de2ed42","repo":"pentaho/pentaho-kettle","slug":"jobentryconnectedtorepository-meta-unabletoloadfromxml","errorCode":null,"errorMessage":"JobEntryConnectedToRepository.Meta.UnableToLoadFromXML","messagePattern":"JobEntryConnectedToRepository\\.Meta\\.UnableToLoadFromXML","errorType":"exception","errorClass":"KettleXMLException","httpStatus":null,"severity":"error","filePath":"plugins/connected-to-repository/impl/src/main/java/org/pentaho/di/job/entries/connectedtorepository/JobEntryConnectedToRepository.java","lineNumber":125,"sourceCode":"    retval.append( \"      \" ).append( XMLHandler.addTagValue( \"isspecificuser\", isspecificuser ) );\n    retval.append( \"      \" ).append( XMLHandler.addTagValue( \"username\", username ) );\n\n    retval.append( super.getXML() );\n\n    return retval.toString();\n  }\n\n  public void loadXML( Node entrynode, List<DatabaseMeta> databases, List<SlaveServer> slaveServers,\n    Repository rep, IMetaStore metaStore ) throws KettleXMLException {\n    try {\n      super.loadXML( entrynode, databases, slaveServers );\n      isspecificrep = \"Y\".equalsIgnoreCase( XMLHandler.getTagValue( entrynode, \"isspecificrep\" ) );\n      repname = XMLHandler.getTagValue( entrynode, \"repname\" );\n      isspecificuser = \"Y\".equalsIgnoreCase( XMLHandler.getTagValue( entrynode, \"isspecificuser\" ) );\n      username = XMLHandler.getTagValue( entrynode, \"username\" );\n\n    } catch ( Exception e ) {\n      throw new KettleXMLException( BaseMessages.getString(\n        PKG, \"JobEntryConnectedToRepository.Meta.UnableToLoadFromXML\" ), 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      isspecificrep = rep.getJobEntryAttributeBoolean( id_jobentry, \"isspecificrep\" );\n      repname = rep.getJobEntryAttributeString( id_jobentry, \"repname\" );\n      isspecificuser = rep.getJobEntryAttributeBoolean( id_jobentry, \"isspecificuser\" );\n      username = rep.getJobEntryAttributeString( id_jobentry, \"username\" );\n\n    } catch ( KettleDatabaseException dbe ) {\n      throw new KettleException( BaseMessages.getString(\n        PKG, \"JobEntryConnectedToRepository.Meta.UnableToLoadFromRep\" )\n        + id_jobentry, dbe );\n\n    }","sourceCodeStart":107,"sourceCodeEnd":143,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/plugins/connected-to-repository/impl/src/main/java/org/pentaho/di/job/entries/connectedtorepository/JobEntryConnectedToRepository.java#L107-L143","documentation":"JobEntryConnectedToRepository.loadXML wraps any exception while parsing the job entry's XML node (<isspecificrep>, <repname>, <isspecificuser>, <username> tags) into a KettleXMLException whose message is the localized key 'JobEntryConnectedToRepository.Meta.UnableToLoadFromXML'. It means the job entry could not be deserialized from the .kjb XML.","triggerScenarios":"Calling loadXML (during job file load) on a node with malformed or missing child tags, or when XMLHandler.getTagValue throws on a corrupt/invalid XML document.","commonSituations":"Hand-edited or truncated .kjb file; job saved by an incompatible plugin/server version with changed tag names; XML encoding corruption during file transfer.","solutions":["Open the .kjb in a text editor and verify the <entry type='CONNECTED_TO_REPOSITORY'> node contains isspecificrep, repname, isspecificuser, username tags","Restore the job file from backup or version control","Recreate the job entry in Spoon and re-save the job","Check the wrapped cause exception in the log for the precise parse error"],"exampleFix":"// before (corrupt job XML)\n<entry><isspecificrep>Y</isspecificrep></entry> <!-- repname/username tags missing or malformed -->\n// after\n<entry>\n  <isspecificrep>Y</isspecificrep>\n  <repname>myRepo</repname>\n  <isspecificuser>Y</isspecificuser>\n  <username>admin</username>\n</entry>","handlingStrategy":"try-catch","validationCode":"// validate the .kjb entry node before load\nNode entry = XMLHandler.getSubNode( jobNode, \"entry\" );\nfor ( String tag : new String[]{ \"isspecificrep\", \"repname\", \"isspecificuser\", \"username\" } ) {\n  if ( XMLHandler.getTagValue( entry, tag ) == null ) {\n    throw new ValidationException( \"Missing tag: \" + tag );\n  }\n}","typeGuard":null,"tryCatchPattern":"try {\n  entry.loadXML( node, databases, slaveServers, rep, metaStore );\n} catch ( KettleXMLException e ) {\n  logError( \"Corrupt job entry XML: \" + e.getMessage(), e );\n  // recreate entry or restore file from backup\n}","preventionTips":["Never hand-edit .kjb files without validating XML afterward","Keep plugin versions consistent between save and load environments","Store job files in version control for easy restore","Validate XML well-formedness before loading"],"tags":["xml","job-entry","deserialization","kettle"],"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"}