{"record":{"id":"e8738a760760b36e","repo":"pentaho/pentaho-kettle","slug":"error-loading-transformation-step-from-xml-e8738a","errorCode":null,"errorMessage":"Error loading transformation step from XML","messagePattern":"Error loading transformation step from XML","errorType":"exception","errorClass":"KettleXMLException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/trans/steps/singlethreader/SingleThreaderMeta.java","lineNumber":122,"sourceCode":"      retrieveStep = XMLHandler.getTagValue( stepnode, \"retrieve_step\" );\n\n      Node parametersNode = XMLHandler.getSubNode( stepnode, \"parameters\" );\n\n      String passAll = XMLHandler.getTagValue( parametersNode, \"pass_all_parameters\" );\n      passingAllParameters = Utils.isEmpty( passAll ) || \"Y\".equalsIgnoreCase( passAll );\n\n      int nrParameters = XMLHandler.countNodes( parametersNode, \"parameter\" );\n\n      allocate( nrParameters );\n\n      for ( int i = 0; i < nrParameters; i++ ) {\n        Node knode = XMLHandler.getSubNodeByNr( parametersNode, \"parameter\", i );\n\n        parameters[i] = XMLHandler.getTagValue( knode, \"name\" );\n        parameterValues[i] = XMLHandler.getTagValue( knode, \"value\" );\n      }\n    } catch ( Exception e ) {\n      throw new KettleXMLException( BaseMessages.getString(\n        PKG, \"SingleThreaderMeta.Exception.ErrorLoadingTransformationStepFromXML\" ), e );\n    }\n  }\n\n  public void allocate( int nrParameters ) {\n    parameters = new String[nrParameters];\n    parameterValues = new String[nrParameters];\n  }\n\n  public Object clone() {\n    SingleThreaderMeta retval = (SingleThreaderMeta) super.clone();\n    int nrParameters = parameters.length;\n    retval.allocate( nrParameters );\n    System.arraycopy( parameters, 0, retval.parameters, 0, nrParameters );\n    System.arraycopy( parameterValues, 0, retval.parameterValues, 0, nrParameters );\n\n    return retval;\n  }","sourceCodeStart":104,"sourceCodeEnd":140,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/trans/steps/singlethreader/SingleThreaderMeta.java#L104-L140","documentation":"SingleThreaderMeta.loadXML deserializes the SingleThreader step's XML, including the <parameters> block where each <parameter> must supply <name> and <value> tags. Any Exception during parsing is caught and rethrown as a KettleXMLException 'Error loading transformation step from XML' with the original cause attached.","triggerScenarios":"An Exception occurs in loadXML while reading the step's XML - typically while iterating parametersNode and calling XMLHandler.getTagValue on <name>/<value> children, e.g. when a <parameter> element is missing expected sub-tags or the XML is malformed.","commonSituations":"Hand-edited .ktr where a <parameter> tag lacks <name> or <value>; truncated/corrupted file from an interrupted save; version skew between the tool that wrote the XML and the engine reading it; bad merge in version control dropping XML tags.","solutions":["Read the chained cause to identify the exact element that failed to parse.","Validate the .ktr XML and fix the <parameters> block so each <parameter> has both <name> and <value> children.","Restore the step or file from backup / repository history.","Recreate the SingleThreader step in Spoon and reconfigure parameters, then save a fresh copy.","Check version compatibility between the Pentaho versions that wrote and read the file."],"exampleFix":"// before: parameter missing value tag\n<parameter><name>ROWS</name></parameter>\n// after\n<parameter><name>ROWS</name><value>1000</value></parameter>","handlingStrategy":"try-catch","validationCode":"// Validate the parameters block before loading the transformation\nNode parametersNode = XMLHandler.getSubNode(stepnode, \"parameters\");\nint n = XMLHandler.countNodes(parametersNode, \"parameter\");\nfor (int i = 0; i < n; i++) {\n  Node p = XMLHandler.getSubNodeByNr(parametersNode, \"parameter\", i);\n  if (XMLHandler.getTagValue(p, \"name\") == null) {\n    throw new IllegalStateException(\"SingleThreader parameter #\" + i + \" is missing a <name> tag\");\n  }\n}","typeGuard":null,"tryCatchPattern":"try {\n  meta.loadXML(stepnode, databases, metaStore, variables);\n} catch (KettleXMLException e) {\n  logError(\"Failed to parse SingleThreader step XML: \" + e.getMessage());\n  throw new IllegalStateException(\"Fix or restore the .ktr parameter block\", e);\n}","preventionTips":["Configure SingleThreader parameters through the Spoon dialog, not by editing XML","Keep .ktr files in version control to recover from bad merges or truncation","Validate XML well-formedness in CI before deploying transformation files"],"tags":["kettle","pdi","xml","serialization","parse-error"],"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"}