pentaho/pentaho-kettle · error · KettleXMLException

SyslogMessageMeta.Exception.UnableToReadStepInfo

Error message

SyslogMessageMeta.Exception.UnableToReadStepInfo

What it means

Thrown by SyslogMessageMeta.readData (called from loadXML) when parsing the step's XML node fails — any exception during XMLHandler.getTagValue extraction is wrapped in a KettleXMLException with this message.

Solutions

  1. Validate and repair the .ktr XML around the syslog step node
  2. Re-export the transformation from Spoon rather than hand-editing
  3. Compare with a working transformation's XML for the expected tags (priority, datePattern, addTimestamp, addHostName)
  4. Load the step from the repository instead using readRep

Example fix

// before
// hand-edited XML: <priority> missing attribute
// after
// re-export from Spoon: <priorityType>Warning</priorityType><datePattern>MMM d HH:mm:ss</datePattern>...
Defensive patterns

Strategy: try-catch

Validate before calling

Document doc = XMLHandler.loadXMLFile(new InputSource(stream)); // validate XML parses before loading meta
if (doc == null) throw new KettleXMLException("Malformed transformation XML");

Try / catch

try { meta.loadXML(stepNode, databases, metaStore); } catch (KettleXMLException e) { logError("Syslog step XML unreadable: " + e.getCause(), e); }

Prevention

When it happens

Trigger: Loading a transformation whose <step> XML for Syslog Message is malformed or missing expected tags; XMLHandler throwing on bad structure/attributes.

Common situations: Hand-edited transformation files; partial/corrupted .ktr export; version mismatch where XML schema changed; truncated file transfer.

Related errors


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

Appendix: source

Thrown at engine/src/main/java/org/pentaho/di/trans/steps/syslog/SyslogMessageMeta.java:238

    retval.append( "    " + XMLHandler.addTagValue( "datePattern", datePattern ) );
    retval.append( "    " + XMLHandler.addTagValue( "addHostName", addHostName ) );

    return retval.toString();
  }

  private void readData( Node stepnode, List<DatabaseMeta> databases ) throws KettleXMLException {
    try {
      messagefieldname = XMLHandler.getTagValue( stepnode, "messagefieldname" );
      port = XMLHandler.getTagValue( stepnode, "port" );
      serverName = XMLHandler.getTagValue( stepnode, "servername" );
      facility = XMLHandler.getTagValue( stepnode, "facility" );
      priority = XMLHandler.getTagValue( stepnode, "priority" );
      datePattern = XMLHandler.getTagValue( stepnode, "datePattern" );
      addTimestamp = "Y".equalsIgnoreCase( XMLHandler.getTagValue( stepnode, "addTimestamp" ) );
      addHostName = "Y".equalsIgnoreCase( XMLHandler.getTagValue( stepnode, "addHostName" ) );

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

  public void readRep( Repository rep, IMetaStore metaStore, ObjectId id_step, List<DatabaseMeta> databases ) throws KettleException {

    try {
      messagefieldname = rep.getStepAttributeString( id_step, "messagefieldname" );
      serverName = rep.getJobEntryAttributeString( id_step, "servername" );
      port = rep.getJobEntryAttributeString( id_step, "port" );
      facility = rep.getJobEntryAttributeString( id_step, "facility" );
      priority = rep.getJobEntryAttributeString( id_step, "priority" );
      datePattern = rep.getJobEntryAttributeString( id_step, "datePattern" );
      addTimestamp = rep.getJobEntryAttributeBoolean( id_step, "addTimestamp" );
      addHostName = rep.getJobEntryAttributeBoolean( id_step, "addHostName" );

    } catch ( Exception e ) {
      throw new KettleException( BaseMessages.getString(

View on GitHub (pinned to f3058517a1)