{"record":{"id":"efce557bb1d2114c","repo":"pentaho/pentaho-kettle","slug":"unable-to-load-job-job-entry-from-xml-node","errorCode":null,"errorMessage":"Unable to load 'job' job entry from XML node","messagePattern":"Unable to load 'job' job entry from XML node","errorType":"exception","errorClass":"KettleXMLException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/job/entries/job/JobEntryJob.java","lineNumber":472,"sourceCode":"      }\n\n      Node parametersNode = XMLHandler.getSubNode( entrynode, \"parameters\" );\n\n      String passAll = XMLHandler.getTagValue( parametersNode, \"pass_all_parameters\" );\n      passingAllParameters = Utils.isEmpty( passAll ) || \"Y\".equalsIgnoreCase( passAll );\n\n      int nrParameters = XMLHandler.countNodes( parametersNode, \"parameter\" );\n      allocateParams( nrParameters );\n\n      for ( int i = 0; i < nrParameters; i++ ) {\n        Node knode = XMLHandler.getSubNodeByNr( parametersNode, \"parameter\", i );\n\n        parameters[i] = XMLHandler.getTagValue( knode, \"name\" );\n        parameterFieldNames[i] = XMLHandler.getTagValue( knode, \"stream_name\" );\n        parameterValues[i] = XMLHandler.getTagValue( knode, \"value\" );\n      }\n    } catch ( KettleXMLException xe ) {\n      throw new KettleXMLException( \"Unable to load 'job' job entry from XML node\", xe );\n    }\n  }\n\n  /**\n   * Load the jobentry from repository\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      String method = rep.getJobEntryAttributeString( id_jobentry, \"specification_method\" );\n      specificationMethod = ObjectLocationSpecificationMethod.getSpecificationMethodByCode( method );\n      String jobId = rep.getJobEntryAttributeString( id_jobentry, \"job_object_id\" );\n      jobObjectId = Utils.isEmpty( jobId ) ? null : new StringObjectId( jobId );\n      jobname = rep.getJobEntryAttributeString( id_jobentry, \"name\" );\n      directory = rep.getJobEntryAttributeString( id_jobentry, \"dir_path\" );\n      filename = rep.getJobEntryAttributeString( id_jobentry, \"file_name\" );\n","sourceCodeStart":454,"sourceCodeEnd":490,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/job/entries/job/JobEntryJob.java#L454-L490","documentation":"Thrown by JobEntryJob.loadXML when parsing the 'Job' job entry's XML node (including the parameters block with name/stream_name/value tags) fails with a KettleXMLException. The cause is chained. It means the nested Job entry could not be loaded from a .kjb XML document. This path is exercised by JobEntryJobTest's load tests (testNotConnectedLoad_*, testConnectedImport_*).","triggerScenarios":"Calling loadXML on JobEntryJob when XMLHandler navigation over the entry node (jobname, directory, filename, parameters sub-nodes) throws KettleXMLException — malformed XML or unexpected node structure in the .kjb file.","commonSituations":"Hand-edited or truncated .kjb files; parameter sub-nodes (<name>, <stream_name>, <value>) malformed after manual editing; version drift in the XML schema; encoding corruption after editing on another platform.","solutions":["Validate and repair the XML of the Job entry node, especially the <parameters> block.","Check the chained KettleXMLException message for the exact parse error location.","Re-export the job from Spoon to regenerate well-formed XML.","If migrating between Pentaho versions, re-create the Job entry in the target version's Spoon."],"exampleFix":"// before: malformed parameter node\n<parameters><name>PARAM1</name><stream_name>field1</parameters>\n// after\n<parameters>\n  <name>PARAM1</name>\n  <stream_name>field1</stream_name>\n  <value>abc</value>\n</parameters>","handlingStrategy":"validation","validationCode":"Document doc = XMLHandler.loadXMLFile(inputStream);\nif (doc == null) throw new KettleException(\"Not valid .kjb XML\");\nNode entry = XMLHandler.getSubNode(doc, \"entry\");\nif (entry == null) throw new KettleException(\"No <entry> node found for Job entry\");\nif (XMLHandler.getSubNode(entry, \"parameters\") == null) logBasic(\"Job entry has no parameters block\");","typeGuard":null,"tryCatchPattern":"try {\n  entry.loadXML(entryNode, databases, slaveServers, rep, metaStore);\n} catch (KettleXMLException e) {\n  logError(\"Job entry XML load failed: \" + e.getMessage());\n  // repair parameters block or re-export the job\n}","preventionTips":["Keep parameter sub-nodes (<name>/<stream_name>/<value>) well-formed.","Do not hand-edit .kjb files; use Spoon.","Validate job XML after scripted transformations.","Re-create Job entries when moving across Pentaho versions."],"tags":["kettle","xml","job-entry","parsing"],"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"}