pentaho/pentaho-kettle · error · KettleStepException
XBaseInputMeta.Exception.NoFilesFoundToProcess
Error message
XBaseInputMeta.Exception.NoFilesFoundToProcess
What it means
Thrown by XBaseInputMeta.getFields() when the resolved file list (getTextFileList, honoring filename wildcards and 'accepting files from a previous step') contains zero files. The step cannot build any output fields without at least one DBF file, so it fails fast with this localized KettleStepException.
Solutions
- Check the File/dirname and wildcard settings in the XBase Input dialog point to a directory containing .dbf files.
- If 'Accept filenames from previous step' is enabled, verify the previous step name and accept field are correctly set and the upstream step emits rows.
- Test the wildcard on the runtime environment (case sensitivity, path separators) — Linux is case-sensitive.
- Use variables/parameters correctly resolved in the execution environment (check parameter values in the execution log).
- Preview the step in Spoon; it will show the same 'no files found' condition at design time.
Example fix
// before: wildcard that matches nothing on a case-sensitive FS wildcard = "*.DBF"; directory = "/data/incoming" // after: lowercase wildcard or normalize wildcard = "*.dbf"; // or list files case-insensitively before the step
Defensive patterns
Strategy: validation
Validate before calling
FileInputList fileList = meta.getTextFileList( bowl, space );
if ( fileList.nrOfFiles() == 0 ) {
throw new KettleStepException( "No XBase files match the configured directory/wildcard: "
+ space.environmentSubstitute( directory ) + "/" + wildcard );
} Prevention
- Test wildcard patterns (including case sensitivity) on the actual runtime OS.
- Use environment-substituted variables and log the resolved paths at run start.
- When accepting filenames from a previous step, verify the upstream step name and field are set and produce rows.
- Add a 'Check if file exists' or validation step upstream to fail early with a clear message.
When it happens
Trigger: getFields() computes FileInputList via getTextFileList(); if fileList.nrOfFiles() == 0 — no file configured, wildcard matched nothing, or accepted filenames field is empty — the exception is thrown immediately.
Common situations: Wildcard pattern (e.g. *.dbf) that matches no files in the directory, wrong directory path, using 'accept filenames from previous step' where the upstream step produced no rows or the accept field/step was not configured, environment differences between dev and prod paths.
Understand the failure class
Background: EmptyResultError / "no results found": when an API or scraper succeeds but returns zero rows — this error's family across 9 libraries.
Related errors
- AccessOutputMeta.Exception.FileDoesNotExist
- AccessOutputMeta.Exception.TableDoesNotExist
- AvroInput.Error.MutipleDifferentExpansions
- AvroInput.Error.NoFieldPathsDefined
- AvroInput.Error.PathContainsMultipleExpansions
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/9e046c4c959f4f2e.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/trans/steps/xbaseinput/XBaseInputMeta.java:347
rowMeta.addValueMeta( rnr );
}
if ( includeFilename ) {
ValueMetaInterface v = new ValueMetaString( filenameField );
v.setLength( 100, -1 );
v.setOrigin( name );
rowMeta.addValueMeta( v );
}
return rowMeta;
}
@Override
public void getFields( Bowl bowl, RowMetaInterface row, String name, RowMetaInterface[] info, StepMeta nextStep,
VariableSpace space, Repository repository, IMetaStore metaStore ) throws KettleStepException {
FileInputList fileList = getTextFileList( bowl, space );
if ( fileList.nrOfFiles() == 0 ) {
throw new KettleStepException( BaseMessages
.getString( PKG, "XBaseInputMeta.Exception.NoFilesFoundToProcess" ) );
}
row.addRowMeta( getOutputFields( fileList, name ) );
}
@Override
public String getXML() {
StringBuilder retval = new StringBuilder();
retval.append( " " + XMLHandler.addTagValue( "file_dbf", dbfFileName ) );
retval.append( " " + XMLHandler.addTagValue( "limit", rowLimit ) );
retval.append( " " + XMLHandler.addTagValue( "add_rownr", rowNrAdded ) );
retval.append( " " + XMLHandler.addTagValue( "field_rownr", rowNrField ) );
retval.append( " " + XMLHandler.addTagValue( "include", includeFilename ) );
retval.append( " " + XMLHandler.addTagValue( "include_field", filenameField ) );
retval.append( " " + XMLHandler.addTagValue( "charset_name", charactersetName ) );View on GitHub (pinned to f3058517a1)