pentaho/pentaho-kettle · error · KettleXMLException
SASInputMeta.Exception.UnableToReadStepInformationFromXML
SASInputMeta.Exception.UnableToReadStepInformationFromXML
Error message
SASInputMeta.Exception.UnableToReadStepInformationFromXML
What it means
loadXML parses the step's saved XML definition to rebuild SasInputMeta; if any part fails (missing nodes, malformed XML, bad field nodes), it wraps the exception in a KettleXMLException using the localized message 'SASInputMeta.Exception.UnableToReadStepInformationFromXML'.
Solutions
- Open the .ktr file in a text editor and check the SAS input step's XML block for malformed or missing <fields> entries.
- Recreate the step in Spoon and re-save the transformation.
- Ensure the Pentaho Data Integration version that saved the file matches (or is newer than) the version opening it.
- Restore the transformation from backup/version control.
Example fix
// before: hand-edited XML missing a field attribute // after: <field><name>amount</name><rename/><length>-1</length><precision>-1</precision></field>
Defensive patterns
Strategy: try-catch
Validate before calling
// Validate the step XML before loading the transformation
Node sasNode = XMLHandler.getSubNode(transMetaXml, "step");
if (XMLHandler.getTagValue(sasNode, "fields") == null)
throw new IllegalStateException("SAS input step XML is missing its <fields> section"); Try / catch
try {
transMeta = new TransMeta(ktrFile);
} catch (KettleXMLException e) {
if (e.getMessage().contains("UnableToReadStepInformationFromXML")) {
// inspect/repair the .ktr XML for the SAS input step or restore from backup
}
throw e;
} Prevention
- Never hand-edit .ktr XML; edit steps via Spoon.
- Open transformations with the same or newer PDI version that saved them.
- Keep transformations in version control so corrupted files can be restored.
When it happens
Trigger: Exception thrown in loadXML while reading the step node — e.g. the XML_TAG_FIELD subnodes count is wrong, fieldNode is null, or SasInputField(Node) fails to parse an attribute.
Common situations: A .ktr file edited by hand or corrupted; transformation saved with a different plugin version whose XML schema changed; truncated file transfer; mixing Pentaho versions when opening transformations.
Understand the failure class
Background: "failed to unmarshal" / json.Unmarshal errors: why parsing a response into a Go struct fails and how to fix it — this error's family across 23 libraries.
Related errors
- GetTableNamesMeta.Exception.UnableToReadStepInfo
- GPBulkLoaderMeta.Exception.UnableToReadStepInfoFromXML
- GPLoadMeta.Exception.UnableToReadStepInfoFromXML
- MappingMeta.Exception.ErrorLoadingTransformationStepFromXML
- MultiMergeJoinMeta.Exception.UnableToLoadStepInfo
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/3bec1e3eb8f5a9ca.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/trans/steps/sasinput/SasInputMeta.java:80
super(); // allocate BaseStepMeta
}
@Override
public void setDefault() {
outputFields = new ArrayList<SasInputField>();
}
public void loadXML( Node stepnode, List<DatabaseMeta> databases, IMetaStore metaStore ) throws KettleXMLException {
try {
acceptingField = XMLHandler.getTagValue( stepnode, "accept_field" );
int nrFields = XMLHandler.countNodes( stepnode, XML_TAG_FIELD );
outputFields = new ArrayList<SasInputField>();
for ( int i = 0; i < nrFields; i++ ) {
Node fieldNode = XMLHandler.getSubNodeByNr( stepnode, XML_TAG_FIELD, i );
outputFields.add( new SasInputField( fieldNode ) );
}
} catch ( Exception e ) {
throw new KettleXMLException( BaseMessages.getString(
PKG, "SASInputMeta.Exception.UnableToReadStepInformationFromXML" ), e );
}
}
public Object clone() {
SasInputMeta retval = (SasInputMeta) super.clone();
retval.setOutputFields( new ArrayList<SasInputField>() );
for ( SasInputField field : outputFields ) {
retval.getOutputFields().add( field.clone() );
}
return retval;
}
@Override
public void getFields( Bowl bowl, RowMetaInterface row, String name, RowMetaInterface[] info, StepMeta nextStep,
VariableSpace space, Repository repository, IMetaStore metaStore ) throws KettleStepException {
for ( SasInputField field : outputFields ) {View on GitHub (pinned to f3058517a1)