pentaho/pentaho-kettle · error · KettleXMLException

FilterRowsMeta.Exception..UnableToLoadStepInfoFromXML

FilterRowsMeta.Exception..UnableToLoadStepInfoFromXML

Error message

FilterRowsMeta.Exception..UnableToLoadStepInfoFromXML

What it means

FilterRowsMeta.readData recursively parses the Condition XML (including nested sub-conditions) when loading the step from a .ktr. Any exception during that parse is wrapped in a KettleXMLException with this message, meaning the filter's step info could not be loaded from the transformation XML.

Solutions

  1. Inspect the <condition> XML block of the Filter step in the .ktr and fix malformed structure.
  2. Delete and re-create the Filter step in Spoon if the condition cannot be parsed.
  3. Restore the .ktr from backup/version control and re-apply changes carefully.

Example fix

// before (malformed condition)
<condition><negated>Y</condition>
// after
<condition><negated>Y</negated></condition>
Defensive patterns

Strategy: try-catch

Validate before calling

// Sanity-check the condition XML before load:
Node stepnode = XMLHandler.getSubNode(doc, "transformation", "step");
if (XMLHandler.getSubNode(stepnode, "condition") == null) {
  throw new IllegalArgumentException("Filter step has no <condition> element");
}

Try / catch

try {
  TransMeta tm = new TransMeta("trans.ktr");
} catch (KettleXMLException e) {
  if (e.getMessage().contains("UnableToLoadStepInfoFromXML")) {
    log.error("Filter step condition XML invalid - inspect <condition> block", e);
  }
  throw e;
}

Prevention

When it happens

Trigger: loadXML -> readData: XMLHandler/Condition construction throws while parsing the <condition> node - malformed or hand-edited condition XML, unknown/nested elements, or incompatible condition serialization from another version.

Common situations: Hand-edited or merged .ktr files where the <condition> block is inconsistent; transformations produced by third-party generators; version upgrade changed the condition XML schema.

Related errors


AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13). Data as JSON: /api/errors/cae789333c46ffe3. Report an issue: GitHub.

Appendix: source

Thrown at engine/src/main/java/org/pentaho/di/trans/steps/filterrows/FilterRowsMeta.java:187

            String comparator = XMLHandler.getTagValue( knode, "condition" );

            Condition subc = new Condition();
            if ( i > 0 ) {
              subc.setOperator( Condition.OPERATOR_OR );
            } else {
              subc.setOperator( Condition.OPERATOR_NONE );
            }
            subc.setLeftValuename( key );
            subc.setFunction( Condition.getFunction( comparator ) );
            subc.setRightValuename( field );
            subc.setRightExact( new ValueMetaAndData( "value", value ) );

            condition.addCondition( subc );
          }
        }
      }
    } catch ( Exception e ) {
      throw new KettleXMLException( BaseMessages.getString(
        PKG, "FilterRowsMeta.Exception..UnableToLoadStepInfoFromXML" ), e );
    }
  }

  public void setDefault() {
    allocate();
  }

  public void readRep( Repository rep, IMetaStore metaStore, ObjectId id_step, List<DatabaseMeta> databases ) throws KettleException {
    try {
      allocate();

      setTrueStepname( rep.getStepAttributeString( id_step, "send_true_to" ) );
      setFalseStepname( rep.getStepAttributeString( id_step, "send_false_to" ) );

      condition = rep.loadConditionFromStepAttribute( id_step, "id_condition" );

    } catch ( Exception e ) {

View on GitHub (pinned to f3058517a1)