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
- Inspect the <condition> XML block of the Filter step in the .ktr and fix malformed structure.
- Delete and re-create the Filter step in Spoon if the condition cannot be parsed.
- 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
- Avoid hand-editing or programmatically generating condition XML; build steps via the meta API.
- Version-control .ktr files so corrupt conditions can be reverted.
- Round-trip load every generated transformation in Spoon before distributing it.
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
- FileLockedMeta.Exception.UnableToReadStepInfo
- Unable to load step info from XML
- AccessInputMeta.Exception.ErrorReadingRepository
- AggregateRowsMeta.Exception.UnexpectedErrorWhileReadingStepInfo
- AggregateRowsMeta.Exception.UnableToLoadStepInfo
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)