{"record":{"id":"1de5ebbec4e67dfb","repo":"pentaho/pentaho-kettle","slug":"error-0001-cannot-load-job-entry-from-xml-node-1de5eb","errorCode":"ERROR_0001_Cannot_Load_Job_Entry_From_Xml_Node","errorMessage":"JobEntryWebServiceAvailable.ERROR_0001_Cannot_Load_Job_Entry_From_Xml_Node","messagePattern":"JobEntryWebServiceAvailable\\.ERROR_0001_Cannot_Load_Job_Entry_From_Xml_Node","errorType":"error_code","errorClass":"KettleXMLException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/job/entries/webserviceavailable/JobEntryWebServiceAvailable.java","lineNumber":88,"sourceCode":"  public String getXML() {\n    StringBuilder retval = new StringBuilder( 50 );\n\n    retval.append( super.getXML() );\n    retval.append( \"      \" ).append( XMLHandler.addTagValue( \"url\", url ) );\n    retval.append( \"      \" ).append( XMLHandler.addTagValue( \"connectTimeOut\", connectTimeOut ) );\n    retval.append( \"      \" ).append( XMLHandler.addTagValue( \"readTimeOut\", readTimeOut ) );\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      url = XMLHandler.getTagValue( entrynode, \"url\" );\n      connectTimeOut = XMLHandler.getTagValue( entrynode, \"connectTimeOut\" );\n      readTimeOut = XMLHandler.getTagValue( entrynode, \"readTimeOut\" );\n    } catch ( KettleXMLException xe ) {\n      throw new KettleXMLException( BaseMessages.getString(\n        PKG, \"JobEntryWebServiceAvailable.ERROR_0001_Cannot_Load_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      url = rep.getJobEntryAttributeString( id_jobentry, \"url\" );\n      connectTimeOut = rep.getJobEntryAttributeString( id_jobentry, \"connectTimeOut\" );\n      readTimeOut = rep.getJobEntryAttributeString( id_jobentry, \"readTimeOut\" );\n    } catch ( KettleException dbe ) {\n      throw new KettleException( BaseMessages.getString(\n        PKG, \"JobEntryWebServiceAvailable.ERROR_0002_Cannot_Load_Job_From_Repository\", \"\" + id_jobentry ), dbe );\n    }\n  }\n\n  public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_job ) throws KettleException {\n    try {","sourceCodeStart":70,"sourceCodeEnd":106,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/job/entries/webserviceavailable/JobEntryWebServiceAvailable.java#L70-L106","documentation":"KettleXMLException (code ERROR_0001) thrown by JobEntryWebServiceAvailable.loadXML when parsing the job entry's XML node fails with a KettleXMLException. It indicates the 'web service available' entry could not be loaded from the .kjb XML. The original parse error is preserved as the cause.","triggerScenarios":"Calling loadXML with a malformed or unexpected XML node — missing required tags, invalid XML characters, or a corrupted .kjb file — where XMLHandler.getTagValue or super.loadXML throws KettleXMLException.","commonSituations":"Hand-edited kjb files; XML truncated by a failed transfer/checkout; wrong file passed to loadXML; encoding issues after editing XML in a non-UTF-8 editor.","solutions":["Validate the .kjb XML is well-formed (xmllint or an XML editor)","Restore the job file from version control or backup","Recreate the 'Check webservice availability' job entry in Spoon","Check the cause chain for the exact parse offset/character error"],"exampleFix":"// before\nentry.loadXML(entrynode, databases, slaveServers); // throws\n// after\ntry {\n  entry.loadXML(entrynode, databases, slaveServers);\n} catch (KettleXMLException e) {\n  logError(\"Bad XML for web-service-available entry: \" + e.getCause(), e);\n}","handlingStrategy":"try-catch","validationCode":"// before loadXML\nDocument doc = XMLHandler.loadXMLFile(inputStream);\nif (doc == null || XMLHandler.getSubNode(doc, \"entry\") == null) {\n  throw new IllegalArgumentException(\"not a valid job entry XML node\");\n}","typeGuard":null,"tryCatchPattern":"try {\n  entry.loadXML(entrynode, databases, slaveServers);\n} catch (KettleXMLException e) {\n  logError(\"XML load failed: \" + e.getCause(), e);\n  // restore from backup or recreate entry\n}","preventionTips":["Never hand-edit kjb XML without validating afterwards","Validate XML with a linter/xmllint in CI for generated jobs","Store job files in version control","Watch encoding (UTF-8) when transferring job files between systems"],"tags":["kettle","xml","job-entry","parse"],"backgroundTag":"json-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"}