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
- Add an upstream step that provides rows (e.g. Get File Names, Text File Input, Generate Rows) feeding the XML field/filename.
- Ensure the upstream step actually outputs at least one row with row metadata; preview it to confirm.
- 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
- Never place XML Input Stream (streaming) as the first step; it consumes an incoming field.
- Preview the upstream step to confirm it emits row metadata and at least one row.
- Use GetXMLData (file-based) when the XML is read directly from files.
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
- XMLInputStream.FilenameFieldNotFound
- XMLInputStream.Log.TooManyNestedElements
- e.toString()
- e (wrapped exception)
- ERROR_0001_Cannot_Load_Job_Entry_From_Xml_Node
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)