pentaho/pentaho-kettle · error · KettleXMLException
NormaliserMeta.Exception.UnableToLoadStepInfoFromXML
NormaliserMeta.Exception.UnableToLoadStepInfoFromXML
Error message
NormaliserMeta.Exception.UnableToLoadStepInfoFromXML
What it means
Thrown by NormaliserMeta.readData (invoked from loadXML) when an exception occurs while parsing the Normaliser step's XML, specifically while reading each field node's "name", "value", and "norm" tags into normaliserFields. It wraps the cause in a KettleXMLException identifying the step as the one that failed to load.
Solutions
- Open the .ktr in an XML editor and inspect the Normaliser step node for malformed <field> elements (name/value/norm tags).
- Read the wrapped cause for the exact parse error and location.
- Re-create the Normaliser step in Spoon, re-enter its fields, and save a fresh transformation file.
- Verify version compatibility between the file's producer and your PDI installation.
Example fix
// before (broken field node) <field> <name>amount<name> <norm>NORM_AMOUNT </field> // after (well-formed) <field> <name>amount</name> <value>value</value> <norm>NORM_AMOUNT</norm> </field>
Defensive patterns
Strategy: try-catch
Validate before calling
// Validate the .ktr XML parses before loading DocumentBuilderFactory f = DocumentBuilderFactory.newInstance(); f.newDocumentBuilder().parse( new File( ktrPath ) ); // throws on malformed XML
Try / catch
try {
TransMeta tm = new TransMeta( ktrPath );
} catch ( KettleXMLException e ) {
if ( e.getMessage().contains( "UnableToLoadStepInfoFromXML" ) ) {
// inspect e.getCause(); repair the Normaliser step XML or recreate the step
} else { throw e; }
} Prevention
- Edit Normaliser fields via Spoon, not by hand-editing XML.
- Version-control .ktr files to recover from corrupted edits.
- Align PDI versions between environments that share transformation files.
- Run an XML well-formedness check after any automated .ktr manipulation.
When it happens
Trigger: Loading a .ktr whose Normaliser step XML is malformed or structurally unexpected: corrupted <field> nodes, mismatched tags, hand-edited XML, or a document layout from an incompatible PDI version causing XMLHandler.getTagValue parsing to throw.
Common situations: Hand-edited or truncated .ktr files; XML produced by a different PDI version; copy-paste of step XML that breaks nesting; file corruption during transfer or storage.
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/899cbcd5884e5639.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/trans/steps/normaliser/NormaliserMeta.java:172
private void readData( Node stepnode ) throws KettleXMLException {
try {
typeField = XMLHandler.getTagValue( stepnode, "typefield" );
Node fields = XMLHandler.getSubNode( stepnode, "fields" );
int nrfields = XMLHandler.countNodes( fields, "field" );
allocate( nrfields );
for ( int i = 0; i < nrfields; i++ ) {
Node fnode = XMLHandler.getSubNodeByNr( fields, "field", i );
normaliserFields[i].setName( XMLHandler.getTagValue( fnode, "name" ) );
normaliserFields[i].setValue( XMLHandler.getTagValue( fnode, "value" ) );
normaliserFields[i].setNorm( XMLHandler.getTagValue( fnode, "norm" ) );
}
} catch ( Exception e ) {
throw new KettleXMLException( BaseMessages.getString( PKG,
"NormaliserMeta.Exception.UnableToLoadStepInfoFromXML" ), e );
}
}
@Override
public void setDefault() {
typeField = "typefield";
int nrfields = 0;
allocate( nrfields );
for ( int i = 0; i < nrfields; i++ ) {
normaliserFields[i].setName( "field" + i );
normaliserFields[i].setValue( "value" + i );
normaliserFields[i].setNorm( "value" + i );
}
}View on GitHub (pinned to f3058517a1)