pentaho/pentaho-kettle · error · KettleException

XMLInputStream.NoIncomingRowsFound

Error message

XMLInputStream.NoIncomingRowsFound

What it means

XMLInputStream.processRow throws a KettleException with 'XMLInputStream.NoIncomingRowsFound' when, on the first row, getInputRowMeta() is null - i.e. the step received no incoming row metadata at all. This XML Input (streaming) step requires an upstream step providing a field containing XML content or a filename; it cannot start a stream by itself.

Solutions

  1. Add an upstream step that provides rows (e.g. Get File Names, Text File Input, Generate Rows) feeding the XML field/filename.
  2. Ensure the upstream step actually outputs at least one row with row metadata; preview it to confirm.
  3. If the file path is static, use the regular 'Get XML Data' (GetXMLData) step or 'Data Grid' to feed the path instead.

Example fix

// before: XMLInputStream has no input hop
// transformation: [XML Input Stream] -> [Table Output]
// after: feed it rows
// transformation: [Get File Names] -> [XML Input Stream] -> [Table Output]
Defensive patterns

Strategy: validation

Validate before calling

// Java API: ensure the step has incoming hop metadata before execution
if ( stepMeta.getSuitableInputSteps().isEmpty() ) {
  throw new IllegalStateException( "XML Input Stream needs an upstream step providing rows" );
}

Try / catch

try { trans.execute( null ); } catch ( KettleException e ) { if ( e.getMessage().contains( "NoIncomingRowsFound" ) ) { log.error( "Connect an input step to XML Input Stream" ); } else { throw e; } }

Prevention

When it happens

Trigger: First invocation of processRow: row = getRow() returns nothing/metadata is null, so getInputRowMeta() == null and the exception is thrown before locating the source field.

Common situations: Placing the XML Input Stream step as the first step of a transformation with no input step, an upstream 'Generate Rows' producing zero rows with no row metadata, or a preview run where the preceding step emitted no rows.

Understand the failure class

Background: "missing required argument" and "the following required arguments were not provided": what required-argument errors mean and how to fix them — this error's family across 20 libraries.

Related errors


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

Appendix: source

Thrown at plugins/xml/core/src/main/java/org/pentaho/di/trans/steps/xmlinputstream/XMLInputStream.java:100

      first = false;

      if ( data.filenames == null ) {
        getFilenames();
      }
      openNextFile();
      resetElementCounters();
      prepareProcessPreviousFields();
    }

    Object[] outputRowData;
    if ( meta.sourceFromInput ) {
      Object[] row = null;
      if ( first ) {
        first = false;
        row = getRow();
        // get input field index
        if ( getInputRowMeta() == null ) {
          throw new KettleException( BaseMessages.getString( PKG, "XMLInputStream.NoIncomingRowsFound" ) );
        }
        inputFieldIndex = getInputRowMeta().indexOfValue( meta.sourceFieldName );
        if ( inputFieldIndex < 0 ) {
          throw new KettleException( BaseMessages.getString( PKG, "XMLInputStream.FilenameFieldNotFound",
              meta.sourceFieldName ) );
        }
        prepareProcessPreviousFields();
      }
      if ( data.xmlEventReader == null ) {
        if ( row == null ) {
          row = getRow();
        }
        if ( row == null ) {
          setOutputDone(); // signal end to receiver(s)
          return false; // This is the end of this step.
        }
        String xml = getInputRowMeta().getString( row, inputFieldIndex );
        try {

View on GitHub (pinned to f3058517a1)