pentaho/pentaho-kettle · error · KettleException
AccessInput.Log.RequiredFilesMissing
AccessInput.Log.RequiredFilesMissing
Error message
AccessInput.Log.RequiredFilesMissing
What it means
KettleException thrown by AccessInput.handleMissingFiles during step init when files listed in the Files tab do not exist. It logs each missing file (RequiredFiles message) and then throws with the file list embedded in the message, aborting transformation start.
Solutions
- Fix the file paths/wildcards in the Access Input Files tab so they resolve on the machine executing the transformation.
- Verify the files exist at run time (use relative paths or Pentaho environment variables like ${Internal.Transformation.Filename.Directory} for portability).
- Check network shares/drive mounts on the execution server (e.g. map the UNC path on Windows, mount on Linux).
- If files are legitimately optional, untick 'Stop on missing file' style options or make the file list dynamic via a previous step.
Example fix
// before (breaks when the transformation moves)
C:\data\customers.mdb
// after
${Internal.Transformation.Filename.Directory}/customers.mdb Defensive patterns
Strategy: validation
Validate before calling
// pre-check all configured files before init
for ( String pattern : fileList ) {
File[] matches = resolve( pattern ); // expand wildcards
if ( matches == null || matches.length == 0 ) {
throw new FileNotFoundException( "No files match: " + pattern );
}
} Try / catch
try { trans.execute( null ); } catch ( KettleException e ) { if ( e.getMessage().contains( "files" ) ) { logError( "Missing input files: " + e.getMessage() ); /* alert + reschedule */ } } Prevention
- Use environment variables / relative paths instead of absolute machine-specific paths
- Verify network shares are mounted before scheduling
- Test wildcard patterns with ls/dir before deployment
- Keep sample files available on test servers
When it happens
Trigger: init() -> handleMissingFiles() finding data.files.getNonExistantFiles() non-empty: statically listed .mdb/.accdb paths resolve to non-existent files (bad path, wrong drive mapping, missing wildcard matches, or wildcard that matched nothing).
Common situations: Transformation moved between Windows/Linux servers so absolute paths no longer resolve; network share not mounted at run time; wildcard pattern with no matches; files deleted after the transformation was designed.
Understand the failure class
Background: "File not found" and ENOENT errors: why libraries can't find a file that should exist — this error's family across 50 libraries.
Related errors
- AccessInput.Log.RequiredNotAccessibleFilesMissing
- AccessInput.Error.ErrorReadingFile
- AccessInput.Exception.CouldnotFindField
- AccessInput.Log.NoField
- ChangeFileEncoding.Error.SourceFileNotExists
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/a8f2e61e94158a71.
Report an issue: GitHub.
Appendix: source
Thrown at plugins/ms-access/impl/src/main/java/org/pentaho/di/trans/steps/accessinput/AccessInput.java:367
}
} catch ( Exception e ) {
logError( BaseMessages.getString( PKG, "AccessInput.Log.UnableToOpenFile", "" + data.filenr, data.file
.toString(), e.toString() ) );
stopAll();
setErrors( 1 );
return false;
}
return true;
}
private void handleMissingFiles() throws KettleException {
List<FileObject> nonExistantFiles = data.files.getNonExistantFiles();
if ( nonExistantFiles.size() != 0 ) {
String message = FileInputList.getRequiredFilesDescription( nonExistantFiles );
logError( BaseMessages.getString( PKG, "AccessInput.Log.RequiredFilesTitle" ), BaseMessages.getString(
PKG, "AccessInput.Log.RequiredFiles", message ) );
throw new KettleException( BaseMessages.getString( PKG, "AccessInput.Log.RequiredFilesMissing", message ) );
}
List<FileObject> nonAccessibleFiles = data.files.getNonAccessibleFiles();
if ( nonAccessibleFiles.size() != 0 ) {
String message = FileInputList.getRequiredFilesDescription( nonAccessibleFiles );
logError( BaseMessages.getString( PKG, "AccessInput.Log.RequiredFilesTitle" ), BaseMessages.getString(
PKG, "AccessInput.Log.RequiredNotAccessibleFiles", message ) );
throw new KettleException( BaseMessages.getString(
PKG, "AccessInput.Log.RequiredNotAccessibleFilesMissing", message ) );
}
}
/**
* Build an empty row based on the meta-data...
*
* @return
*/View on GitHub (pinned to f3058517a1)