pentaho/pentaho-kettle · error · KettleXMLException

PentahoReportingOutputMeta.Exception.UnableToLoadStepInfo

Error message

PentahoReportingOutputMeta.Exception.UnableToLoadStepInfo

What it means

PentahoReportingOutputMeta.readRep... actually readData (used by loadXML) wraps any Exception while parsing the step's XML definition into a KettleXMLException with message PentahoReportingOutputMeta.Exception.UnableToLoadStepInfo. Thrown when the transformation .ktr cannot be deserialized for this step, e.g. malformed tags or an unparseable processor type code.

Solutions

  1. Open the .ktr in a text editor and validate the PentahoReportingOutput step XML tags, especially the processor type element
  2. Restore the transformation from version control or repository history
  3. Open and re-save the transformation in Spoon of the matching Pentaho/Kettle version
  4. Upgrade/align plugin and Pentaho Reporting versions so the processor type codes match

Example fix

// before (hand-edited ktr)
<processor_type>PDF_DOC</processor_type>
// after
<processor_type>PDF</processor_type>
Defensive patterns

Strategy: try-catch

Validate before calling

// validate step XML before load
String code = XMLHandler.getTagValue( stepnode, "processor_type" );
if ( code == null || ProcessorType.getProcessorTypeByCode( code ) == null ) {
  throw new KettleXMLException( "Unknown processor_type: " + code );
}

Try / catch

try {
  meta.loadXML( stepnode, databases, metaStore );
} catch ( KettleXMLException e ) {
  logError( "Cannot load reporting step metadata: " + e.getMessage(), e );
  // restore default metadata or fail the transformation load
}

Prevention

When it happens

Trigger: loadXML calls readData(stepnode); XMLHandler.getTagValue returns unexpected content and ProcessorType.getProcessorTypeByCode or another parser call throws (e.g. null/unknown processor type code in the <processor_type> tag).

Common situations: Hand-edited or truncated .ktr file; transformation saved by a newer/older Pentaho version with a renamed or removed processor type code; XML corruption during repository export/import.

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/e27c241861eb6546. Report an issue: GitHub.

Appendix: source

Thrown at plugins/pentaho-reporting/impl/src/main/java/org/pentaho/di/trans/steps/pentahoreporting/PentahoReportingOutputMeta.java:181

      outputFile = XMLHandler.getTagValue( stepnode, XML_TAG_OUTPUT_FILE );
      useValuesFromFields = "Y".equals( XMLHandler.getTagValue( stepnode, XML_TAG_USE_VALUES_FROM_FIELDS ) )
        || XMLHandler.getTagValue( stepnode, XML_TAG_USE_VALUES_FROM_FIELDS )  == null;
      createParentFolder = "Y".equals( XMLHandler.getTagValue( stepnode, XML_TAG_CREATE_PARENT_FOLDER ) );
      parameterFieldMap = new HashMap<String, String>();
      Node parsNode = XMLHandler.getSubNode( stepnode, XML_TAG_PARAMETERS );
      List<Node> nodes = XMLHandler.getNodes( parsNode, XML_TAG_PARAMETER );
      for ( Node node : nodes ) {
        String parameter = XMLHandler.getTagValue( node, XML_TAG_NAME );
        String fieldname = XMLHandler.getTagValue( node, XML_TAG_FIELD );
        if ( !Utils.isEmpty( parameter ) && !Utils.isEmpty( fieldname ) ) {
          parameterFieldMap.put( parameter, fieldname );
        }
      }

      outputProcessorType =
        ProcessorType.getProcessorTypeByCode( XMLHandler.getTagValue( stepnode, XML_TAG_PROCESSOR_TYPE ) );
    } catch ( Exception e ) {
      throw new KettleXMLException( BaseMessages.getString(
        PKG, "PentahoReportingOutputMeta.Exception.UnableToLoadStepInfo" ), e );
    }
  }

  public void setDefault() {
    outputProcessorType = ProcessorType.PDF;
    createParentFolder = false;
    useValuesFromFields = true;
  }

  public String getXML() {
    StringBuilder retval = new StringBuilder();

    retval.append( "  " + XMLHandler.addTagValue( XML_TAG_INPUT_FILE_FIELD, inputFileField ) );
    retval.append( "  " + XMLHandler.addTagValue( XML_TAG_OUTPUT_FILE_FIELD, outputFileField ) );
    retval.append( "  " + XMLHandler.addTagValue( XML_TAG_CREATE_PARENT_FOLDER, createParentFolder ) );
    retval.append( "  " + XMLHandler.addTagValue( XML_TAG_INPUT_FILE, inputFile ) );
    retval.append( "  " + XMLHandler.addTagValue( XML_TAG_OUTPUT_FILE, outputFile ) );

View on GitHub (pinned to f3058517a1)