{"record":{"id":"a1d2eecac5443d38","repo":"pentaho/pentaho-kettle","slug":"writetolog-error-unabletoloadfromxml-label","errorCode":null,"errorMessage":"WriteToLog.Error.UnableToLoadFromXML.Label","messagePattern":"WriteToLog\\.Error\\.UnableToLoadFromXML\\.Label","errorType":"exception","errorClass":"KettleXMLException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/job/entries/writetolog/JobEntryWriteToLog.java","lineNumber":103,"sourceCode":"    retval.append( super.getXML() );\n    retval.append( \"      \" ).append( XMLHandler.addTagValue( \"logmessage\", logmessage ) );\n    retval.append( \"      \" ).append(\n      XMLHandler.addTagValue( \"loglevel\", ( getEntryLogLevel() == null ) ? null : getEntryLogLevel().getCode() ) );\n    retval.append( \"      \" ).append( XMLHandler.addTagValue( \"logsubject\", logsubject ) );\n\n    return retval.toString();\n  }\n\n  @Override\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      logmessage = XMLHandler.getTagValue( entrynode, \"logmessage\" );\n      entryLogLevel = LogLevel.getLogLevelForCode( XMLHandler.getTagValue( entrynode, \"loglevel\" ) );\n      logsubject = XMLHandler.getTagValue( entrynode, \"logsubject\" );\n    } catch ( Exception e ) {\n      throw new KettleXMLException( BaseMessages.getString( PKG, \"WriteToLog.Error.UnableToLoadFromXML.Label\" ), e );\n\n    }\n  }\n\n  @Override\n  public void loadRep( Repository rep, IMetaStore metaStore, ObjectId id_jobentry, List<DatabaseMeta> databases,\n    List<SlaveServer> slaveServers ) throws KettleException {\n    try {\n      logmessage = rep.getJobEntryAttributeString( id_jobentry, \"logmessage\" );\n      entryLogLevel = LogLevel.getLogLevelForCode( rep.getJobEntryAttributeString( id_jobentry, \"loglevel\" ) );\n      logsubject = rep.getJobEntryAttributeString( id_jobentry, \"logsubject\" );\n    } catch ( KettleDatabaseException dbe ) {\n      throw new KettleException( BaseMessages.getString( PKG, \"WriteToLog.Error.UnableToLoadFromRepository.Label\" )\n        + id_jobentry, dbe );\n\n    }\n  }\n","sourceCodeStart":85,"sourceCodeEnd":121,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/job/entries/writetolog/JobEntryWriteToLog.java#L85-L121","documentation":"JobEntryWriteToLog.loadXML() throws this KettleXMLException when the job entry's configuration cannot be read from its XML <entry> node. It wraps any exception from XMLHandler.getTagValue or LogLevel.getLogLevelForCode (e.g. malformed or missing XML elements, bad log-level code) into a localized message with the original exception as cause.","triggerScenarios":"Calling loadXML on a job entry XML node where the 'logmessage', 'loglevel', or 'logsubject' elements are unreadable/parsing fails (XMLHandler throws), or the 'loglevel' tag value causes LogLevel.getLogLevelForCode to fail, or super.loadXML itself throws.","commonSituations":"Hand-edited or truncated .kjb job files; XML produced by a newer Pentaho version being loaded by an older engine; corrupt export files; copy-pasted entry nodes missing expected child tags.","solutions":["Open the .kjb file in a text editor and verify the job entry node contains well-formed 'logmessage', 'loglevel', and 'logsubject' child tags","Check the cause exception (KettleXMLException.getCause()) to identify the exact parse failure","Re-export or re-save the job from Spoon so it writes a valid XML node","Upgrade/align the Pentaho Kettle engine version with the version that created the job file"],"exampleFix":"// before: broken XML node\n<entry name='Write to log'><loglevel>Z</loglevel></entry>\n// after: valid node\n<entry name='Write to log'><logmessage>Hello</logmessage><loglevel>Basic</loglevel><logsubject>Job</logsubject></entry>","handlingStrategy":"try-catch","validationCode":"// validate before loadXML\nNode entrynode = XMLHandler.getSubNode( jobNode, \"entry\" );\nif ( entrynode == null ) throw new KettleXMLException( \"Missing <entry> node\" );\nif ( XMLHandler.getTagValue( entrynode, \"loglevel\" ) == null ) throw new KettleXMLException( \"Missing loglevel tag\" );","typeGuard":"boolean isValidEntryNode( Node n ) {\n  return n != null && XMLHandler.getTagValue( n, \"loglevel\" ) != null\n    && XMLHandler.getTagValue( n, \"logmessage\" ) != null;\n}","tryCatchPattern":"try {\n  jobEntry.loadXML( entrynode, databases, slaveServers, rep, metaStore );\n} catch ( KettleXMLException e ) {\n  logError( \"WriteToLog entry XML load failed: \" + e.getCause(), e );\n  // fall back to defaults or abort transformation load\n}","preventionTips":["Never hand-edit .kjb files; edit in Spoon","Keep PDI engine version aligned with the tool that generated the job files","Back up job files before manual XML edits"],"tags":["xml","deserialization","pdi","job-entry"],"backgroundTag":"xml-deserialization-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"}