pentaho/pentaho-kettle · error · KettleXMLException

XsdValidatorMeta.Exception.UnableToLoadStepInfoFromXML

Error message

XsdValidatorMeta.Exception.UnableToLoadStepInfoFromXML

What it means

Thrown by XsdValidatorMeta.readData when parsing the step's XML configuration node fails unexpectedly. It is a KettleXMLException wrapper whose cause holds the real parsing exception (e.g. XMLHandler failures), raised while loadXML deserializes the XSD Validator step from a .ktr file. It indicates the step metadata could not be reconstructed from XML.

Solutions

  1. Inspect the wrapped cause exception (getCause()) to find the actual parse failure.
  2. Open the .ktr in a text editor and verify the <fields>/step XML block for the XSD Validator step is well-formed and has expected tags like ifxmlunvalid, outputstringfield.
  3. Recreate the step in Spoon and re-save the transformation.
  4. Upgrade the XML plugin / Pentaho version to match the file's origin.

Example fix

// before: hand-edited step XML missing boolean tags
<step><name>XSD Validator</name></step>
// after: regenerate the step XML via Spoon save
<step><name>XSD Validator</name><ifxmlunvalid>N</ifxmlunvalid><outputstringfield>Y</outputstringfield></step>
Defensive patterns

Strategy: try-catch

Try / catch

try { transMeta.loadXML(file, ...) } catch (KettleXMLException e) { log.error("Step XML load failed: " + e.getCause(), e); throw e; }

Prevention

When it happens

Trigger: loadXML(stepnode) is called during transformation deserialization and any XMLHandler.getTagValue call in readData throws (malformed DOM, incompatible XML structure, or an unexpected exception inside the block).

Common situations: Corrupted or hand-edited .ktr files; opening a transformation saved by an incompatible Pentaho/Kettle version; XML node structure changed between plugin versions so expected tags or types no longer parse.

Related errors


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

Appendix: source

Thrown at plugins/xml/core/src/main/java/org/pentaho/di/trans/steps/xsdvalidator/XsdValidatorMeta.java:220

    try {

      xsdFilename = XMLHandler.getTagValue( stepnode, "xdsfilename" );
      xmlStream = XMLHandler.getTagValue( stepnode, "xmlstream" );
      resultFieldname = XMLHandler.getTagValue( stepnode, "resultfieldname" );
      xsdDefinedField = XMLHandler.getTagValue( stepnode, "xsddefinedfield" );
      xsdSource = XMLHandler.getTagValue( stepnode, "xsdsource" );

      addValidationMessage = "Y".equalsIgnoreCase( XMLHandler.getTagValue( stepnode, "addvalidationmsg" ) );

      validationMessageField = XMLHandler.getTagValue( stepnode, "validationmsgfield" );
      ifXmlValid = XMLHandler.getTagValue( stepnode, "ifxmlvalid" );
      ifXmlInvalid = XMLHandler.getTagValue( stepnode, "ifxmlunvalid" );
      outputStringField = "Y".equalsIgnoreCase( XMLHandler.getTagValue( stepnode, "outputstringfield" ) );
      xmlSourceFile = "Y".equalsIgnoreCase( XMLHandler.getTagValue( stepnode, "xmlsourcefile" ) );
      allowExternalEntities = "Y".equalsIgnoreCase( XMLHandler.getTagValue( stepnode, "allowExternalEntities" ) );

    } catch ( Exception e ) {
      throw new KettleXMLException( BaseMessages.getString( PKG,
          "XsdValidatorMeta.Exception.UnableToLoadStepInfoFromXML" ), e );
    }
  }

  public void setDefault() {
    xsdFilename = "";
    xmlStream = "";
    resultFieldname = "result";
    addValidationMessage = false;
    validationMessageField = "ValidationMsgField";
    ifXmlValid = "";
    ifXmlInvalid = "";
    outputStringField = false;
    xmlSourceFile = false;
    xsdDefinedField = "";
    xsdSource = SPECIFY_FILENAME;
    allowExternalEntities = Boolean.valueOf( System.getProperties().getProperty( Const.ALLOW_EXTERNAL_ENTITIES_FOR_XSD_VALIDATION, Const.ALLOW_EXTERNAL_ENTITIES_FOR_XSD_VALIDATION_DEFAULT ) );
  }

View on GitHub (pinned to f3058517a1)