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

  1. Open the .ktr in an XML editor and inspect the Normaliser step node for malformed <field> elements (name/value/norm tags).
  2. Read the wrapped cause for the exact parse error and location.
  3. Re-create the Normaliser step in Spoon, re-enter its fields, and save a fresh transformation file.
  4. 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

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


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)