pentaho/pentaho-kettle · error · KettleXMLException
TransHopMeta.Exception.UnableToLoadHopInfo
Error message
TransHopMeta.Exception.UnableToLoadHopInfo
What it means
A KettleXMLException (message key TransHopMeta.Exception.UnableToLoadHopInfo) thrown when a transformation hop cannot be loaded from its XML node — parsing from/to step names or the enabled flag threw an exception, which is attached as the cause.
Solutions
- Open the .ktr in Spoon and repair or delete the broken hop
- Verify each <hop> has valid <from>/<to> step names matching existing <step> entries
- Ensure <enabled> contains Y or N if present
- Re-save the transformation from Spoon to regenerate canonical XML
Example fix
// before: hop referencing a removed step <hop><from>Old Step</from><to>Table output</to><enabled>Y</enabled></hop> // after: fix or remove the hop so names match existing steps <hop><from>CSV input</from><to>Table output</to><enabled>Y</enabled></hop>
Defensive patterns
Strategy: try-catch
Validate before calling
for (Node hop : hopNodes) {
if (XMLHandler.getTagValue(hop, "from") == null || XMLHandler.getTagValue(hop, "to") == null)
throw new KettleException("hop missing from/to");
} Try / catch
try { new TransHopMeta(hopNode, steps); } catch (KettleXMLException e) { log.error("Invalid hop XML: " + e.getCause(), e); } Prevention
- Ensure hops reference existing step names
- Avoid manual XML edits to .ktr files
- Re-save transformations in Spoon after upgrades
When it happens
Trigger: TransHopMeta(Node hopnode, List<StepMeta> steps) encountering malformed <hop> XML (missing/broken <from>, <to>, or <enabled> tags).
Common situations: Hand-edited .ktr files where hop XML was corrupted; steps referenced by a hop were removed; files written by incompatible Kettle versions; truncated copy/paste of transformation XML.
Understand the failure class
Background: Schema validation failed / invalid input schema: payload rejected because its shape doesn't match the expected schema — this error's family across 28 libraries.
Related errors
- AggregateRowsMeta.Exception.UnableToLoadStepInfo
- AppendMeta.Exception.UnableToLoadStepInfo
- LucidDBStreamingLoaderMeta.Exception.UnableToReadStepInfoFromXML
- RulesMeta.Error.LoadFromXML
- RulesMeta.Error.LoadFromXML
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/5480cfd658e3f5b9.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/trans/TransHopMeta.java:71
}
public TransHopMeta() {
this( null, null, false );
}
public TransHopMeta( Node hopnode, List<StepMeta> steps ) throws KettleXMLException {
try {
this.from = searchStep( steps, XMLHandler.getTagValue( hopnode, TransHopMeta.XML_FROM_TAG ) );
this.to = searchStep( steps, XMLHandler.getTagValue( hopnode, TransHopMeta.XML_TO_TAG ) );
String en = XMLHandler.getTagValue( hopnode, "enabled" );
if ( en == null ) {
enabled = true;
} else {
enabled = en.equalsIgnoreCase( "Y" );
}
} catch ( Exception e ) {
throw new KettleXMLException( BaseMessages.getString( PKG, "TransHopMeta.Exception.UnableToLoadHopInfo" ), e );
}
}
public void setFromStep( StepMeta from ) {
this.from = from;
}
public void setToStep( StepMeta to ) {
this.to = to;
}
public StepMeta getFromStep() {
return this.from;
}
public StepMeta getToStep() {
return this.to;
}View on GitHub (pinned to f3058517a1)