{"record":{"id":"3f1b34f8624a676e","repo":"pentaho/pentaho-kettle","slug":"splitfieldtorowsmeta-exception-unabletoloadstepinfofromxml","errorCode":"SplitFieldToRowsMeta.Exception.UnableToLoadStepInfoFromXML","errorMessage":"SplitFieldToRowsMeta.Exception.UnableToLoadStepInfoFromXML","messagePattern":"SplitFieldToRowsMeta\\.Exception\\.UnableToLoadStepInfoFromXML","errorType":"exception","errorClass":"KettleXMLException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/trans/steps/splitfieldtorows/SplitFieldToRowsMeta.java","lineNumber":137,"sourceCode":"  public void setSplitField( String splitField ) {\n    this.splitField = splitField;\n  }\n\n  public void loadXML( Node stepnode, List<DatabaseMeta> databases, IMetaStore metaStore ) throws KettleXMLException {\n    readData( stepnode );\n  }\n\n  private void readData( Node stepnode ) throws KettleXMLException {\n    try {\n      splitField = XMLHandler.getTagValue( stepnode, \"splitfield\" );\n      delimiter = XMLHandler.getTagValue( stepnode, \"delimiter\" );\n      newFieldname = XMLHandler.getTagValue( stepnode, \"newfield\" );\n      includeRowNumber = \"Y\".equalsIgnoreCase( XMLHandler.getTagValue( stepnode, \"rownum\" ) );\n      resetRowNumber = \"Y\".equalsIgnoreCase( XMLHandler.getTagValue( stepnode, \"resetrownumber\" ) );\n      rowNumberField = XMLHandler.getTagValue( stepnode, \"rownum_field\" );\n      isDelimiterRegex = \"Y\".equalsIgnoreCase( XMLHandler.getTagValue( stepnode, \"delimiter_is_regex\" ) );\n    } catch ( Exception e ) {\n      throw new KettleXMLException( BaseMessages.getString(\n        PKG, \"SplitFieldToRowsMeta.Exception.UnableToLoadStepInfoFromXML\" ), e );\n    }\n  }\n\n  public void setDefault() {\n    splitField = \"\";\n    delimiter = \";\";\n    newFieldname = \"\";\n    includeRowNumber = false;\n    isDelimiterRegex = false;\n    rowNumberField = \"\";\n    resetRowNumber = true;\n  }\n\n  @Override\n  public void getFields( Bowl bowl, RowMetaInterface row, String name, RowMetaInterface[] info, StepMeta nextStep,\n    VariableSpace space, Repository repository, IMetaStore metaStore ) throws KettleStepException {\n","sourceCodeStart":119,"sourceCodeEnd":155,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/trans/steps/splitfieldtorows/SplitFieldToRowsMeta.java#L119-L155","documentation":"Thrown by SplitFieldToRowsMeta.readData (invoked via loadXML) when parsing the step's XML definition fails. loadXML reads tags like newfield, rownum, rownum_field and delimiter_is_regex from the step node; any exception (malformed XML, unexpected node shape) is wrapped in a KettleXMLException with this message key. It means the step could not be loaded from a .ktr file.","triggerScenarios":"Loading a transformation XML where the SplitFieldToRows step node is malformed or hand-edited: missing stepnode children, XMLHandler.getTagValue throwing on invalid structure, or corruption introduced by manual XML editing or incomplete export.","commonSituations":"Hand-editing a .ktr file and breaking the step XML; opening transformations created in a newer PDI version with extra/renamed XML tags; truncated or partially copied .ktr files; VCS merge conflicts inside the XML.","solutions":["Inspect the wrapped cause 'e' to find the exact XML parsing failure","Re-open and validate the .ktr in Spoon; re-create the SplitFieldToRows step if its XML is corrupt","Restore the .ktr from version control or backup","Re-export/re-save the transformation from the PDI version it was created in"],"exampleFix":"// before\nTransMeta tm = new TransMeta(\"broken.ktr\"); // throws KettleXMLException\n// after\ntry {\n  TransMeta tm = new TransMeta(\"broken.ktr\");\n} catch (KettleXMLException e) {\n  logError(\"Failed to load step XML: \" + e.getCause());\n  // restore from backup or rebuild the step\n}","handlingStrategy":"try-catch","validationCode":"// before loading\nDocument doc = XMLHandler.loadXMLFile(new File(ktrPath));\nif (doc == null) throw new IllegalStateException(\"ktr XML not parseable\");","typeGuard":null,"tryCatchPattern":"try { transMeta = new TransMeta(ktrPath); } catch (KettleXMLException e) { logError(\"XML load failed: \" + e.getCause()); /* restore backup or rebuild step */ }","preventionTips":["Never hand-edit .ktr files; edit via Spoon","Commit .ktr files to VCS and resolve merge conflicts carefully","Open transformations with the PDI version that produced them","Validate XML after any scripted transformation manipulation"],"tags":["xml","deserialization","kettle"],"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"}