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

  1. Open the .ktr in Spoon and repair or delete the broken hop
  2. Verify each <hop> has valid <from>/<to> step names matching existing <step> entries
  3. Ensure <enabled> contains Y or N if present
  4. 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

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


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)