pentaho/pentaho-kettle · error · KettleException
AccessOutputMeta.Exception.FileDoesNotExist
AccessOutputMeta.Exception.FileDoesNotExist
Error message
AccessOutputMeta.Exception.FileDoesNotExist
What it means
AccessOutputMeta.getRequiredFields resolves the configured filename with environment substitution and requires it to be an existing regular file, because it must open the Access database read-only to read table metadata. If the file does not exist or is not a file, it throws KettleException with AccessOutputMeta.Exception.FileDoesNotExist.
Solutions
- Verify the configured filename points to an existing .mdb/.accdb file
- Check that environment variables used in the path are defined at runtime
- Confirm the file is mounted/accessible from the machine running the transformation
- Fix the path to a directory vs file mixup
- Create or restore the Access database file
Example fix
// before
meta.setFilename("${OUTPUT_DIR}/data.mdb");
// after
// ensure the variable resolves to an existing file
File f = new File(space.environmentSubstitute("${OUTPUT_DIR}/data.mdb"));
if (!f.exists() || !f.isFile()) throw new IllegalStateException("Access DB missing: " + f);
meta.setFilename("${OUTPUT_DIR}/data.mdb"); Defensive patterns
Strategy: validation
Validate before calling
String real = space.environmentSubstitute(meta.getFilename());
File f = new File(real);
if (!f.exists() || !f.isFile()) {
throw new IllegalArgumentException("Access DB file not found: " + real);
} Prevention
- Resolve all variables in paths before running, e.g. log the substituted path
- Verify files exist on the execution node, not just the design machine
- Use shared/network paths consistently mounted on all nodes
- Keep the Access file with the deployment artifacts
When it happens
Trigger: Calling getRequiredFields (via the fields/metadata lookup) when the substituted filename points to a nonexistent path, a directory, or the file was deleted/moved after configuration.
Common situations: Typo in the .mdb/.accdb path; file moved between environments; environment variable not set so substitution yields a wrong path; running on a server where the file share is not mounted.
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
- AccessInputMeta.Exception.FileDoesNotExist
- AccessOutputMeta.Exception.ErrorGettingFields
- AccessOutputMeta.Exception.FileDoesNotExist
- AccessOutputMeta.Exception.TableDoesNotExist
- AvroInput.Error.MutipleDifferentExpansions
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/ed65c0dc57202bb0.
Report an issue: GitHub.
Appendix: source
Thrown at plugins/ms-access/impl/src/main/java/org/pentaho/di/trans/steps/accessoutput/AccessOutputMeta.java:250
remarks.add( cr );
}
}
public StepInterface getStep( StepMeta stepMeta, StepDataInterface stepDataInterface, int cnr,
TransMeta transMeta, Trans trans ) {
return new AccessOutput( stepMeta, stepDataInterface, cnr, transMeta, trans );
}
public StepDataInterface getStepData() {
return new AccessOutputData();
}
public RowMetaInterface getRequiredFields( VariableSpace space ) throws KettleException {
String realFilename = space.environmentSubstitute( filename );
File file = new File( realFilename );
try {
if ( !file.exists() || !file.isFile() ) {
throw new KettleException( BaseMessages.getString(
PKG, "AccessOutputMeta.Exception.FileDoesNotExist", realFilename ) );
}
// Open the database in read-only mode and get the table metadata.
try ( Database db = new DatabaseBuilder( file ).setReadOnly( true ).open() ) {
String realTablename = space.environmentSubstitute( tablename );
Table table = db.getTable( realTablename );
if ( table == null ) {
throw new KettleException( BaseMessages.getString(
PKG, "AccessOutputMeta.Exception.TableDoesNotExist", realTablename ) );
}
return getLayout( table );
}
} catch ( Exception e ) {
throw new KettleException( BaseMessages.getString( PKG, "AccessOutputMeta.Exception.ErrorGettingFields" ), e );
}
}View on GitHub (pinned to f3058517a1)