{"record":{"id":"db9977fb5273a4b7","repo":"pentaho/pentaho-kettle","slug":"gploadmeta-exception-unabletoreadstepinfofromxml","errorCode":null,"errorMessage":"GPLoadMeta.Exception.UnableToReadStepInfoFromXML","messagePattern":"GPLoadMeta\\.Exception\\.UnableToReadStepInfoFromXML","errorType":"exception","errorClass":"KettleXMLException","httpStatus":null,"severity":"error","filePath":"plugins/gpload/core/src/main/java/org/pentaho/di/trans/steps/gpload/GPLoadMeta.java","lineNumber":378,"sourceCode":"        if ( fieldStream[i] == null ) {\n          fieldStream[i] = fieldTable[i]; // default: the same name!\n        }\n        String locDateMask = XMLHandler.getTagValue( vnode, \"date_mask\" );\n        if ( locDateMask == null ) {\n          dateMask[i] = \"\";\n        } else {\n          if ( GPLoadMeta.DATE_MASK_DATE.equals( locDateMask ) || GPLoadMeta.DATE_MASK_DATETIME.equals( locDateMask ) ) {\n            dateMask[i] = locDateMask;\n          } else {\n            dateMask[i] = \"\";\n          }\n        }\n\n        matchColumn[i] = ( \"Y\".equalsIgnoreCase( XMLHandler.getTagValue( vnode, \"match_column\" ) ) );\n        updateColumn[i] = ( \"Y\".equalsIgnoreCase( XMLHandler.getTagValue( vnode, \"update_column\" ) ) );\n      }\n    } catch ( Exception e ) {\n      throw new KettleXMLException( BaseMessages.getString( PKG, \"GPLoadMeta.Exception.UnableToReadStepInfoFromXML\" ),\n          e );\n    }\n  }\n\n  public void setDefault() {\n\n    // TODO: Make non empty defaults public static Strings\n\n    fieldTable = null;\n    databaseMeta = null;\n    maxErrors = GPLoadMeta.MAX_ERRORS_DEFAULT;\n    schemaName = \"\";\n    localhostPort = \"\";\n    tableName = BaseMessages.getString( PKG, \"GPLoadMeta.DefaultTableName\" );\n    errorTableName = \"\"; // BaseMessages.getString(PKG, \"GPLocal.ErrorTable.Prefix\")+tableName;\n    loadMethod = METHOD_AUTO_END;\n    loadAction = ACTION_INSERT;\n    gploadPath = \"/usr/local/greenplum-db/bin/gpload\";","sourceCodeStart":360,"sourceCodeEnd":396,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/plugins/gpload/core/src/main/java/org/pentaho/di/trans/steps/gpload/GPLoadMeta.java#L360-L396","documentation":"GPLoadMeta.readData() parses the step's XML definition with XMLHandler; any exception during tag reads is wrapped in a KettleXMLException with this message. It indicates the GPload step's XML serialization is malformed or missing expected elements.","triggerScenarios":"loadXML() calls readData on a <step> node whose children (connection, table, field_name/match_column/update_column entries, etc.) are missing, of wrong shape, or whose structure differs from what this plugin version expects.","commonSituations":"Hand-edited or truncated .ktr files; .ktr created in a different PDI/plugin version with changed XML schema; XML attribute names changed between plugin versions; copy-pasting a GPload step snippet that omits required tags.","solutions":["Open the .ktr in Spoon and reconfigure/save the GPload step to regenerate valid XML","Compare the step's XML block against a freshly created GPload step's XML and repair missing/renamed tags","Align the PDI and GPload plugin versions (the XML schema must match the plugin's readData expectations)","Restore the .ktr from backup if the file was truncated/corrupted"],"exampleFix":"// before (missing tag)\n<fields><field><name>a</name></field></fields>\n// after\n<fields><field><name>a</name><field_name>a</field_name><date_mask/><match_column>N</match_column><update_column>N</update_column></field></fields>","handlingStrategy":"try-catch","validationCode":"org.w3c.dom.Node stepNode = ...; // verify required tags exist before loadXML\nfor (String tag : new String[]{\"connection\",\"table\",\"data_file\",\"delimiter\",\"fields\"}) {\n  if (XMLHandler.getTagValue(stepNode, tag) == null && XMLHandler.getSubNode(stepNode, tag) == null) {\n    throw new IllegalArgumentException(\"GPload step XML missing tag: \" + tag);\n  }\n}","typeGuard":null,"tryCatchPattern":"try { stepMeta.loadXML(...) } catch (KettleXMLException e) {\n  if (e.getMessage().contains(\"UnableToReadStepInfoFromXML\")) { /* fall back to re-creating the step from defaults */ }\n  else throw e;\n}","preventionTips":["Never hand-edit .ktr XML; use Spoon to modify steps","Keep PDI and plugin versions consistent across environments that share .ktr files","Validate .ktr files (open in Spoon) after any scripted generation","Keep backups of transformations before scripted edits"],"tags":["kettle","xml","metadata","deserialization"],"backgroundTag":"json-unmarshal-failed","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"}