{"record":{"id":"9e1c941fab821c9e","repo":"pentaho/pentaho-kettle","slug":"flattenermeta-exception-unabletoloadstepinfofromxml","errorCode":"FlattenerMeta.Exception.UnableToLoadStepInfoFromXML","errorMessage":"FlattenerMeta.Exception.UnableToLoadStepInfoFromXML","messagePattern":"FlattenerMeta\\.Exception\\.UnableToLoadStepInfoFromXML","errorType":"exception","errorClass":"KettleXMLException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/trans/steps/flattener/FlattenerMeta.java","lineNumber":141,"sourceCode":"      throw new KettleStepException( BaseMessages.getString( PKG, \"FlattenerMeta.Exception.FlattenFieldRequired\" ) );\n    }\n  }\n\n  private void readData( Node stepnode ) throws KettleXMLException {\n    try {\n      fieldName = XMLHandler.getTagValue( stepnode, \"field_name\" );\n\n      Node fields = XMLHandler.getSubNode( stepnode, \"fields\" );\n      int nrfields = XMLHandler.countNodes( fields, \"field\" );\n\n      allocate( nrfields );\n\n      for ( int i = 0; i < nrfields; i++ ) {\n        Node fnode = XMLHandler.getSubNodeByNr( fields, \"field\", i );\n        targetField[i] = XMLHandler.getTagValue( fnode, \"name\" );\n      }\n    } catch ( Exception e ) {\n      throw new KettleXMLException( BaseMessages.getString(\n        PKG, \"FlattenerMeta.Exception.UnableToLoadStepInfoFromXML\" ), e );\n    }\n  }\n\n  public String getXML() {\n    StringBuilder retval = new StringBuilder();\n\n    retval.append( \"      \" + XMLHandler.addTagValue( \"field_name\", fieldName ) );\n\n    retval.append( \"      <fields>\" + Const.CR );\n    for ( int i = 0; i < targetField.length; i++ ) {\n      retval.append( \"        <field>\" + Const.CR );\n      retval.append( \"          \" + XMLHandler.addTagValue( \"name\", targetField[i] ) );\n      retval.append( \"          </field>\" + Const.CR );\n    }\n    retval.append( \"        </fields>\" + Const.CR );\n\n    return retval.toString();","sourceCodeStart":123,"sourceCodeEnd":159,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/trans/steps/flattener/FlattenerMeta.java#L123-L159","documentation":"FlattenerMeta.readData (called by loadXML) wraps any exception while parsing the Flattener step's XML (<field_name> and the <fields>/<field>/<name> entries) in a KettleXMLException with this localized message, chaining the parse error.","triggerScenarios":"loadXML on a FlattenerMeta when the step node is missing expected tags, or a <field> subnode is malformed, causing XMLHandler calls or the array fill to fail.","commonSituations":"Hand-edited .ktr files; truncated transformation XML; version drift where the step XML layout differs between PDI releases; clipboard corruption when pasting steps.","solutions":["Validate the Flattener step's XML block in the .ktr (field_name plus fields/field/name nodes)","Check the chained cause for the exact failing tag","Recreate the step in Spoon and re-save to regenerate valid XML","Normalize PDI versions between file producer and consumer"],"exampleFix":"// before\nNode fnode = XMLHandler.getSubNodeByNr( fields, \"field\", i ); // null-safe gap -> NPE on getTagValue\n// after\nNode fnode = XMLHandler.getSubNodeByNr( fields, \"field\", i );\nif ( fnode == null ) { continue; }\ntargetField[i] = XMLHandler.getTagValue( fnode, \"name\" );","handlingStrategy":"try-catch","validationCode":"// validate Flattener XML before load\nif ( XMLHandler.getTagValue( stepnode, \"field_name\" ) == null ) {\n  throw new IllegalArgumentException( \"Flattener XML missing field_name tag\" );\n}","typeGuard":null,"tryCatchPattern":"try {\n  transMeta = new TransMeta( inputStream, provider, true, variables, listener );\n} catch ( KettleXMLException e ) {\n  logError( \"Flattener XML load failed: \" + e.getCause(), e );\n}","preventionTips":["Edit step XML only through Spoon","Validate transformation XML before loading","Avoid clipboard round-trips of step definitions across versions","Keep PDI versions aligned between authors and runners"],"tags":["pdi","kettle","xml","metadata-load"],"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"}