{"record":{"id":"09ecfa6bf0da9a11","repo":"pentaho/pentaho-kettle","slug":"jobentrydelay-unabletoloadfromxml-label","errorCode":null,"errorMessage":"JobEntryDelay.UnableToLoadFromXml.Label","messagePattern":"JobEntryDelay\\.UnableToLoadFromXml\\.Label","errorType":"exception","errorClass":"KettleXMLException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/job/entries/delay/JobEntryDelay.java","lineNumber":89,"sourceCode":"  public String getXML() {\n    StringBuilder retval = new StringBuilder( 200 );\n\n    retval.append( super.getXML() );\n    retval.append( \"      \" ).append( XMLHandler.addTagValue( \"maximumTimeout\", maximumTimeout ) );\n    retval.append( \"      \" ).append( XMLHandler.addTagValue( \"scaletime\", scaleTime ) );\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      maximumTimeout = XMLHandler.getTagValue( entrynode, \"maximumTimeout\" );\n      scaleTime = Integer.parseInt( XMLHandler.getTagValue( entrynode, \"scaletime\" ) );\n    } catch ( Exception e ) {\n      throw new KettleXMLException( BaseMessages.getString( PKG, \"JobEntryDelay.UnableToLoadFromXml.Label\" ), e );\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      maximumTimeout = rep.getJobEntryAttributeString( id_jobentry, \"maximumTimeout\" );\n      scaleTime = (int) rep.getJobEntryAttributeInteger( id_jobentry, \"scaletime\" );\n    } catch ( KettleDatabaseException dbe ) {\n      throw new KettleException( BaseMessages.getString( PKG, \"JobEntryDelay.UnableToLoadFromRepo.Label\" )\n        + id_jobentry, dbe );\n    }\n  }\n\n  //\n  // Save the attributes of this job entry\n  //","sourceCodeStart":71,"sourceCodeEnd":107,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/job/entries/delay/JobEntryDelay.java#L71-L107","documentation":"JobEntryDelay.loadXML throws this localized KettleXMLException when any exception occurs while parsing the job entry's XML node, including reading maximumTimeout/scaletime tags. Integer.parseInt of a missing or non-numeric scaletime value is a common trigger (NumberFormatException is caught here). It means the delay entry could not be deserialized from a .kjb file.","triggerScenarios":"loadXML called with an entrynode whose 'maximumTimeout' or 'scaletime' tag is absent, empty, or non-numeric; or the entry node itself is malformed (XMLHandler failure in super.loadXML).","commonSituations":"Hand-edited or truncated .kjb file; a job XML produced by a different tool/version omitting scaletime; copy-pasting an XML fragment into a job file; encoding corruption.","solutions":["Open the .kjb in a text editor and ensure <maximumTimeout> and <scaletime> tags exist with valid values (scaletime must parse as int)","Re-create the Delay job entry in Spoon and re-save the job","Validate the whole XML file parses (e.g. xmllint) to rule out truncation","Check the chained cause 'e' to see whether it is NumberFormatException vs an XML parse error"],"exampleFix":"// before\n<scaletime></scaletime>\n// after\n<scaletime>2</scaletime> <!-- e.g. with scaletype minute -->","handlingStrategy":"validation","validationCode":"Node tag = XMLHandler.getTagValue(...) == null ? null : node;\n// validate before loadXML\nString scale = XMLHandler.getTagValue(entrynode, \"scaletime\");\nif (scale != null && !scale.matches(\"\\\\d+\")) {\n  throw new KettleXMLException(\"scaletime must be an integer, got: \" + scale);\n}","typeGuard":null,"tryCatchPattern":"try {\n  entry.loadXML(entrynode, databases, slaveServers, rep, metaStore);\n} catch (KettleXMLException e) {\n  log.error(\"Delay entry XML invalid\", e.getCause());\n  if (e.getCause() instanceof NumberFormatException) {\n    // fix <scaletime>/<maximumTimeout> values in the .kjb and reload\n  }\n  throw e;\n}","preventionTips":["Never hand-edit .kjb files without validating afterwards","Keep scaletime numeric and maximumTimeout present in XML templates","Validate XML files with a parser before importing","Version-control job files so corruption is detectable"],"tags":["kettle","xml","parsing"],"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"}