{"record":{"id":"219a9ce1173e5858","repo":"pentaho/pentaho-kettle","slug":"databasejoinmeta-exception-unabletoloadstepinfo","errorCode":null,"errorMessage":"DatabaseJoinMeta.Exception.UnableToLoadStepInfo","messagePattern":"DatabaseJoinMeta\\.Exception\\.UnableToLoadStepInfo","errorType":"exception","errorClass":"KettleXMLException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/trans/steps/databasejoin/DatabaseJoinMeta.java","lineNumber":233,"sourceCode":"      databaseMeta = DatabaseMeta.findDatabase( databases, con );\n      sql = XMLHandler.getTagValue( stepnode, \"sql\" );\n      outerJoin = \"Y\".equalsIgnoreCase( XMLHandler.getTagValue( stepnode, \"outer_join\" ) );\n      replacevars = \"Y\".equalsIgnoreCase( XMLHandler.getTagValue( stepnode, \"replace_vars\" ) );\n      rowLimit = Const.toInt( XMLHandler.getTagValue( stepnode, \"rowlimit\" ), 0 );\n\n      Node param = XMLHandler.getSubNode( stepnode, \"parameter\" );\n      int nrparam = XMLHandler.countNodes( param, \"field\" );\n\n      allocate( nrparam );\n\n      for ( int i = 0; i < nrparam; i++ ) {\n        Node pnode = XMLHandler.getSubNodeByNr( param, \"field\", i );\n        parameterField[i] = XMLHandler.getTagValue( pnode, \"name\" );\n        String ptype = XMLHandler.getTagValue( pnode, \"type\" );\n        parameterType[i] = ValueMetaFactory.getIdForValueMeta( ptype );\n      }\n    } catch ( Exception e ) {\n      throw new KettleXMLException( BaseMessages\n        .getString( PKG, \"DatabaseJoinMeta.Exception.UnableToLoadStepInfo\" ), e );\n    }\n  }\n\n  @Override\n  public void setDefault() {\n    databaseMeta = null;\n    rowLimit = 0;\n    sql = \"\";\n    outerJoin = false;\n    parameterField = null;\n    parameterType = null;\n    outerJoin = false;\n    replacevars = false;\n\n    int nrparam = 0;\n\n    allocate( nrparam );","sourceCodeStart":215,"sourceCodeEnd":251,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/trans/steps/databasejoin/DatabaseJoinMeta.java#L215-L251","documentation":"DatabaseJoinMeta.readData(), called from loadXML while deserializing the step from a .ktr, wraps any parsing exception in KettleXMLException 'DatabaseJoinMeta.Exception.UnableToLoadStepInfo'. It means the step's XML (SQL, parameter fields/types) could not be read, so the step cannot be loaded into the transformation graph.","triggerScenarios":"Loading a transformation via TransMeta(filename) / XMLHandler when the <field> subnodes are malformed, a type value cannot be resolved by ValueMetaFactory.getIdForValueMeta, or required nodes (connection, sql, parameter fields) are missing/null causing NPE/parse errors.","commonSituations":"Hand-edited or truncated ktr files; transformations from a newer Pentaho version with unsupported value-type names; XML corruption during version control merges or download.","solutions":["Inspect the chained cause e for the exact XML parse/type-resolution failure.","Open the ktr in the Pentaho version that produced it, or upgrade Spoon to that version.","Fix the XML: ensure each parameter <field> has a valid <name> and a known <type>.","Validate the ktr is well-formed XML (xmllint) and not truncated by git/merge tools."],"exampleFix":"// before: invalid value type in XML\n<field><name>p1</name><type>NVARCHAR</type></field>\n// after\n<field><name>p1</name><type>String</type></field>","handlingStrategy":"try-catch","validationCode":"Document doc = XMLHandler.loadXMLFile(ktrFile);\nif (doc == null) throw new IllegalArgumentException(\"ktr is not valid XML: \" + ktrFile);\nif (XMLHandler.getSubNode(doc, \"transformation\") == null) throw new IllegalArgumentException(\"Missing <transformation> root\");","typeGuard":null,"tryCatchPattern":"try { transMeta = new TransMeta(ktrFile, metaStore); }\ncatch (KettleXMLException e) {\n  if (e.getMessage().contains(\"UnableToLoadStepInfo\")) {\n    log.error(\"DatabaseJoin step XML corrupt\", e.getCause());\n  }\n}","preventionTips":["Validate ktr XML after manual edits or git merges","Load/save transformations with the same Pentaho version","Keep ktr files out of lossy merge workflows (prefer committed binaries without hand edits)"],"tags":["kettle","xml","step-metadata"],"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"}