{"record":{"id":"153c2032652bdd03","repo":"pentaho/pentaho-kettle","slug":"mergejoinmeta-exception-unabletoloadstepinfo","errorCode":"MergeJoinMeta.Exception.UnableToLoadStepInfo","errorMessage":"MergeJoinMeta.Exception.UnableToLoadStepInfo","messagePattern":"MergeJoinMeta\\.Exception\\.UnableToLoadStepInfo","errorType":"exception","errorClass":"KettleXMLException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/trans/steps/mergejoin/MergeJoinMeta.java","lineNumber":207,"sourceCode":"\n      allocate( nrKeys1, nrKeys2 );\n\n      for ( int i = 0; i < nrKeys1; i++ ) {\n        Node keynode = XMLHandler.getSubNodeByNr( keysNode1, \"key\", i );\n        keyFields1[i] = XMLHandler.getNodeValue( keynode );\n      }\n\n      for ( int i = 0; i < nrKeys2; i++ ) {\n        Node keynode = XMLHandler.getSubNodeByNr( keysNode2, \"key\", i );\n        keyFields2[i] = XMLHandler.getNodeValue( keynode );\n      }\n\n      List<StreamInterface> infoStreams = getStepIOMeta().getInfoStreams();\n      infoStreams.get( 0 ).setSubject( XMLHandler.getTagValue( stepnode, \"step1\" ) );\n      infoStreams.get( 1 ).setSubject( XMLHandler.getTagValue( stepnode, \"step2\" ) );\n      joinType = XMLHandler.getTagValue( stepnode, \"join_type\" );\n    } catch ( Exception e ) {\n      throw new KettleXMLException(\n        BaseMessages.getString( PKG, \"MergeJoinMeta.Exception.UnableToLoadStepInfo\" ), e );\n    }\n  }\n\n  public void setDefault() {\n    joinType = join_types[0];\n    allocate( 0, 0 );\n  }\n\n  public void readRep( Repository rep, IMetaStore metaStore, ObjectId id_step, List<DatabaseMeta> databases ) throws KettleException {\n    try {\n      int nrKeys1 = rep.countNrStepAttributes( id_step, \"keys_1\" );\n      int nrKeys2 = rep.countNrStepAttributes( id_step, \"keys_2\" );\n\n      allocate( nrKeys1, nrKeys2 );\n\n      for ( int i = 0; i < nrKeys1; i++ ) {\n        keyFields1[i] = rep.getStepAttributeString( id_step, i, \"keys_1\" );","sourceCodeStart":189,"sourceCodeEnd":225,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/trans/steps/mergejoin/MergeJoinMeta.java#L189-L225","documentation":"Thrown by MergeJoinMeta.readData (called from loadXML) when parsing the step's XML node fails with any Exception. The step definition is loaded from a .ktr file; fields read are step1, step2 (input stream names) and join_type. The original exception is wrapped in a KettleXMLException.","triggerScenarios":"loadXML is called on a transformation file whose <merge_join> XML node is malformed or whose sub-elements make XMLHandler.getTagValue/getStepIOMeta().getInfoStreams() throw — e.g. corrupted .ktr XML, hand-edited XML, or an XML structure from an incompatible Pentaho/Kettle version.","commonSituations":"Manually editing a .ktr and breaking the step1/step2/join_type tags; opening a transformation saved by a newer Kettle version in an older one; truncated or SVN/git-merge-conflicted transformation files.","solutions":["Inspect the wrapped cause (KettleXMLException.getCause()) to find the exact XML parsing failure.","Open the .ktr in Spoon and re-save the Merge Join step to regenerate well-formed XML for the node.","Validate the XML file is well-formed (xmllint) and that <step1>, <step2>, <join_type> elements exist under the step node.","Restore the transformation from version control or a backup if the file was hand-edited or merge-conflicted."],"exampleFix":"// before (broken hand-edited XML)\n<join_type>INNER JOIM</join_type>\n// after\n<join_type>INNER</join_type>","handlingStrategy":"try-catch","validationCode":"// Validate the .ktr XML before loading\nDocument doc = XMLHandler.loadXMLFile(ktrFile);\nif (XMLHandler.getSubNode(doc, \"transformation\") == null) {\n  throw new IllegalArgumentException(\"Not a valid transformation file\");\n}","typeGuard":null,"tryCatchPattern":"try {\n  TransMeta tm = new TransMeta(ktrFile);\n} catch (KettleXMLException e) {\n  log.error(\"Failed to load merge join step XML: \" + e.getCause(), e);\n}","preventionTips":["Do not hand-edit .ktr XML; edit via Spoon.","Resolve git/SVN merge conflicts on .ktr files by regenerating them in Spoon.","Keep Kettle/Pentaho client and engine versions aligned.","Validate XML well-formedness before loading programmatically."],"tags":["kettle","xml-parsing","step-metadata","merge-join"],"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"}