pentaho/pentaho-kettle · error · KettleXMLException

Unable to read step information from XML

Error message

Unable to read step information from XML

What it means

SecretKeyGeneratorMeta.loadXML throws KettleXMLException with this message when any exception occurs while parsing the step's XML node via XMLHandler.getTagValue calls. It wraps the underlying parse failure so transformation deserialization fails fast with step context. It is a wrapper exception: the cause holds the real problem.

Solutions

  1. Inspect the wrapped cause (e.getCause()) of the KettleXMLException to find the real parse failure
  2. Open the .ktr in a text editor and verify the <secret_key_generator> step node contains all expected child tags
  3. Re-export or recreate the transformation step in Spoon rather than hand-editing XML
  4. Check Pentaho version compatibility: XML produced by a much older/newer Kettle version may lack tags; loadXML tolerates missing tags but not malformed nodes

Example fix

// before: hand-edited XML missing tags
<step><name>gen</name></step>
// after: complete node
<step><name>gen</name><secretKeyFieldName>key</secretKeyFieldName><secretKeyLengthFieldName>len</secretKeyLengthFieldName><algorithmFieldName>alg</algorithmFieldName><outputKeyInBinary>N</outputKeyInBinary></step>
Defensive patterns

Strategy: try-catch

Validate before calling

// before loadXML
if (stepnode == null || !stepnode.hasChildNodes()) {
  throw new IllegalArgumentException("Step node is empty or missing");
}

Try / catch

try { meta.loadXML(node, ...); } catch (KettleXMLException e) { log.error("Step XML invalid: " + e.getCause(), e); }

Prevention

When it happens

Trigger: Calling loadXML(Node stepnode) on XML that is malformed, missing expected tags (secretKeyFieldName, secretKeyLengthFieldName, algorithmFieldName, outputKeyInBinary), or whose node is null/empty so XMLHandler throws.

Common situations: Opening a .ktr file edited by hand or by a different Pentaho/Kettle version; truncated XML export; a step node copied from another step type; corrupted repository-to-XML export.

Related errors


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

Appendix: source

Thrown at engine/src/main/java/org/pentaho/di/trans/steps/symmetriccrypto/secretkeygenerator/SecretKeyGeneratorMeta.java:249

      allocate( count );

      for ( int i = 0; i < count; i++ ) {
        Node fnode = XMLHandler.getSubNodeByNr( fields, "field", i );

        algorithm[i] = XMLHandler.getTagValue( fnode, "algorithm" );
        scheme[i] = XMLHandler.getTagValue( fnode, "scheme" );
        secretKeyLength[i] = XMLHandler.getTagValue( fnode, "secretKeyLen" );
        secretKeyCount[i] = XMLHandler.getTagValue( fnode, "secretKeyCount" );
      }

      secretKeyFieldName = XMLHandler.getTagValue( stepnode, "secretKeyFieldName" );
      secretKeyLengthFieldName = XMLHandler.getTagValue( stepnode, "secretKeyLengthFieldName" );
      algorithmFieldName = XMLHandler.getTagValue( stepnode, "algorithmFieldName" );

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

    } catch ( Exception e ) {
      throw new KettleXMLException( "Unable to read step information from XML", e );
    }
  }

  @Override
  public void setDefault() {
    int count = 0;

    allocate( count );

    for ( int i = 0; i < count; i++ ) {
      algorithm[i] = "field" + i;
      scheme[i] = "";
      secretKeyLength[i] = "";
      secretKeyCount[i] = "";
    }
    secretKeyFieldName = BaseMessages.getString( PKG, "SecretKeyGeneratorMeta.secretKeyField" );
    secretKeyLengthFieldName = BaseMessages.getString( PKG, "SecretKeyGeneratorMeta.secretKeyLengthField" );
    algorithmFieldName = BaseMessages.getString( PKG, "SecretKeyGeneratorMeta.algorithmField" );

View on GitHub (pinned to f3058517a1)