{"record":{"id":"c519f37d9bfffd42","repo":"pentaho/pentaho-kettle","slug":"unable-to-load-step-info-from-xml-salesforceinputmeta","errorCode":null,"errorMessage":"Unable to load step info from XML","messagePattern":"Unable to load step info from XML","errorType":"exception","errorClass":"KettleXMLException","httpStatus":null,"severity":"error","filePath":"plugins/salesforce/core/src/main/java/org/pentaho/di/trans/steps/salesforceinput/SalesforceInputMeta.java","lineNumber":563,"sourceCode":"      setRecordsFilter(\n        SalesforceConnectionUtils.getRecordsFilterByCode( Const.NVL( XMLHandler.getTagValue(\n          stepnode, \"records_filter\" ), \"\" ) ) );\n      setQueryAll( \"Y\".equalsIgnoreCase( XMLHandler.getTagValue( stepnode, \"queryAll\" ) ) );\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        SalesforceInputField field = new SalesforceInputField( fnode );\n        inputFields[i] = field;\n      }\n      // Is there a limit on the number of rows we process?\n      setRowLimit( XMLHandler.getTagValue( stepnode, \"limit\" ) );\n    } catch ( Exception e ) {\n      throw new KettleXMLException( \"Unable to load step info from XML\", e );\n    }\n  }\n\n  public void allocate( int nrfields ) {\n    setInputFields( new SalesforceInputField[nrfields] );\n  }\n\n  public int getNrFields() {\n    return nrFields;\n  }\n\n  @Override\n  public void setDefault() {\n    super.setDefault();\n    setIncludeDeletionDate( false );\n    setQueryAll( false );\n    setReadFrom( \"\" );\n    setReadTo( \"\" );","sourceCodeStart":545,"sourceCodeEnd":581,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/plugins/salesforce/core/src/main/java/org/pentaho/di/trans/steps/salesforceinput/SalesforceInputMeta.java#L545-L581","documentation":"Thrown from SalesforceInputMeta.readData() when parsing the step's XML definition (loadXML) fails. Every element read (fields, row limit) is inside a try/catch that rethrows as KettleXMLException('Unable to load step info from XML').","triggerScenarios":"loadXML() called with a <step> XML node that is missing or contains malformed child elements — e.g. a corrupt or hand-edited .ktr file, a <fields> node with an invalid field definition, or an unexpected structure where XMLHandler.getTagValue returns something invalid.","commonSituations":"Opening a transformation file saved by a different PDI version (XML schema drift); manual edit of the .ktr that broke the XML; copy-pasting step XML between transformations with truncation.","solutions":["Open the .ktr in a text editor and validate the XML of the Salesforce Input step block against a known-good copy","Check the wrapped cause — it names the exact element that failed to parse","Recreate the step in Spoon and re-enter its configuration, or paste the step XML from a working transformation","Upgrade/downgrade so the file's PDI version matches the runtime version"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"Document doc = XMLHandler.loadXMLFile(new File(ktrPath));\nNode stepNode = XMLHandler.getSubNode(doc, \"transformation\");\nif (stepNode == null) throw new IllegalArgumentException(\"Not a valid .ktr: missing transformation node\");","typeGuard":null,"tryCatchPattern":"try {\n  transMeta = new TransMeta(ktrPath, rep);\n} catch (KettleXMLException e) {\n  log.error(\"Failed to load step XML: {}\", e.getCause(), e);\n  throw e;\n}","preventionTips":["Never hand-edit .ktr XML; edit in Spoon instead","Keep PDI version consistent between file authors and runtime","Keep known-good backups of transformation files"],"tags":["kettle","xml","metadata","serialization"],"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"}