{"record":{"id":"a2837078b031304c","repo":"pentaho/pentaho-kettle","slug":"unable-to-load-job-entry-of-type-syslog-from-xml-node","errorCode":null,"errorMessage":"Unable to load job entry of type 'Syslog' from XML node","messagePattern":"Unable to load job entry of type 'Syslog' from XML node","errorType":"exception","errorClass":"KettleXMLException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/job/entries/syslog/JobEntrySyslog.java","lineNumber":111,"sourceCode":"\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      port = XMLHandler.getTagValue( entrynode, \"port\" );\n      serverName = XMLHandler.getTagValue( entrynode, \"servername\" );\n      facility = XMLHandler.getTagValue( entrynode, \"facility\" );\n      priority = XMLHandler.getTagValue( entrynode, \"priority\" );\n      message = XMLHandler.getTagValue( entrynode, \"message\" );\n      datePattern = XMLHandler.getTagValue( entrynode, \"datePattern\" );\n      addTimestamp = \"Y\".equalsIgnoreCase( XMLHandler.getTagValue( entrynode, \"addTimestamp\" ) );\n      addHostname = \"Y\".equalsIgnoreCase( XMLHandler.getTagValue( entrynode, \"addHostname\" ) );\n\n    } catch ( KettleXMLException xe ) {\n      throw new KettleXMLException( \"Unable to load job entry of type 'Syslog' 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      port = rep.getJobEntryAttributeString( id_jobentry, \"port\" );\n      serverName = rep.getJobEntryAttributeString( id_jobentry, \"servername\" );\n      facility = rep.getJobEntryAttributeString( id_jobentry, \"facility\" );\n      priority = rep.getJobEntryAttributeString( id_jobentry, \"priority\" );\n      message = rep.getJobEntryAttributeString( id_jobentry, \"message\" );\n      datePattern = rep.getJobEntryAttributeString( id_jobentry, \"datePattern\" );\n      addTimestamp = rep.getJobEntryAttributeBoolean( id_jobentry, \"addTimestamp\" );\n      addHostname = rep.getJobEntryAttributeBoolean( id_jobentry, \"addHostname\" );\n\n    } catch ( KettleException dbe ) {\n      throw new KettleException( \"Unable to load job entry of type 'Syslog' from the repository for id_jobentry=\"\n        + id_jobentry, dbe );","sourceCodeStart":93,"sourceCodeEnd":129,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/job/entries/syslog/JobEntrySyslog.java#L93-L129","documentation":"KettleXMLException thrown by JobEntrySyslog.loadXML when parsing a 'Syslog' job entry's XML node fails with a KettleXMLException. The entry reads tags serverName, port, message, datePattern, addTimestamp, addHostname; any parse failure is wrapped with this message.","triggerScenarios":"Calling loadXML with a malformed or missing Syslog entry node: XMLHandler.getTagValue throwing due to broken markup, or downstream parsing of values (e.g. port) throwing KettleXMLException.","commonSituations":"Hand-edited .kjb XML with invalid characters in the message/datePattern values; truncated file; cross-version XML incompatibility.","solutions":["Fix malformed XML around the Syslog entry node (validate with an XML tool).","Verify expected tags exist (serverName, port, message, datePattern, addTimestamp, addHostname).","Re-export/re-save the job from Spoon to produce well-formed XML.","Check the wrapped KettleXMLException cause for the exact parse error."],"exampleFix":"// before\nNode entry = XMLHandler.getSubNode(jobNode, \"entry\");\nsyslogEntry.loadXML(entry, databases, slaveServers, rep, metaStore);\n// after\nNode entry = XMLHandler.getSubNode(jobNode, \"entry\");\nif (entry == null || XMLHandler.getTagValue(entry, \"serverName\") == null) {\n  throw new KettleXMLException(\"Syslog entry node missing or incomplete\");\n}\nsyslogEntry.loadXML(entry, databases, slaveServers, rep, metaStore);","handlingStrategy":"validation","validationCode":"Node entry = XMLHandler.getSubNode(jobNode, \"entry\");\nif (entry == null || XMLHandler.getTagValue(entry, \"serverName\") == null || XMLHandler.getTagValue(entry, \"port\") == null) {\n  throw new KettleXMLException(\"Syslog entry node incomplete: serverName and port are required\");\n}\n","typeGuard":"boolean isCompleteSyslogEntry(Node n) {\n  return n != null\n    && XMLHandler.getTagValue(n, \"serverName\") != null\n    && XMLHandler.getTagValue(n, \"port\") != null;\n}","tryCatchPattern":"try {\n  syslogEntry.loadXML(entrynode, databases, slaveServers, rep, metaStore);\n} catch (KettleXMLException e) {\n  logError(\"Malformed Syslog entry XML: \" + e.getCause(), e);\n}","preventionTips":["Validate .kjb XML before loading jobs generated externally","Avoid special characters in message/datePattern values without proper escaping","Re-export jobs from the same PDI version that will load them"],"tags":["xml","pdi","job-entry","parse","syslog"],"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"}