{"record":{"id":"a8f2e61e94158a71","repo":"pentaho/pentaho-kettle","slug":"accessinput-log-requiredfilesmissing","errorCode":"AccessInput.Log.RequiredFilesMissing","errorMessage":"AccessInput.Log.RequiredFilesMissing","messagePattern":"AccessInput\\.Log\\.RequiredFilesMissing","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"plugins/ms-access/impl/src/main/java/org/pentaho/di/trans/steps/accessinput/AccessInput.java","lineNumber":367,"sourceCode":"      }\n    } catch ( Exception e ) {\n      logError( BaseMessages.getString( PKG, \"AccessInput.Log.UnableToOpenFile\", \"\" + data.filenr, data.file\n        .toString(), e.toString() ) );\n      stopAll();\n      setErrors( 1 );\n      return false;\n    }\n    return true;\n  }\n\n  private void handleMissingFiles() throws KettleException {\n    List<FileObject> nonExistantFiles = data.files.getNonExistantFiles();\n    if ( nonExistantFiles.size() != 0 ) {\n      String message = FileInputList.getRequiredFilesDescription( nonExistantFiles );\n      logError( BaseMessages.getString( PKG, \"AccessInput.Log.RequiredFilesTitle\" ), BaseMessages.getString(\n        PKG, \"AccessInput.Log.RequiredFiles\", message ) );\n\n      throw new KettleException( BaseMessages.getString( PKG, \"AccessInput.Log.RequiredFilesMissing\", message ) );\n    }\n\n    List<FileObject> nonAccessibleFiles = data.files.getNonAccessibleFiles();\n    if ( nonAccessibleFiles.size() != 0 ) {\n      String message = FileInputList.getRequiredFilesDescription( nonAccessibleFiles );\n      logError( BaseMessages.getString( PKG, \"AccessInput.Log.RequiredFilesTitle\" ), BaseMessages.getString(\n        PKG, \"AccessInput.Log.RequiredNotAccessibleFiles\", message ) );\n\n      throw new KettleException( BaseMessages.getString(\n        PKG, \"AccessInput.Log.RequiredNotAccessibleFilesMissing\", message ) );\n    }\n  }\n\n  /**\n   * Build an empty row based on the meta-data...\n   *\n   * @return\n   */","sourceCodeStart":349,"sourceCodeEnd":385,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/plugins/ms-access/impl/src/main/java/org/pentaho/di/trans/steps/accessinput/AccessInput.java#L349-L385","documentation":"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.","triggerScenarios":"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).","commonSituations":"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.","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."],"exampleFix":"// before (breaks when the transformation moves)\nC:\\data\\customers.mdb\n// after\n${Internal.Transformation.Filename.Directory}/customers.mdb","handlingStrategy":"validation","validationCode":"// pre-check all configured files before init\nfor ( String pattern : fileList ) {\n  File[] matches = resolve( pattern ); // expand wildcards\n  if ( matches == null || matches.length == 0 ) {\n    throw new FileNotFoundException( \"No files match: \" + pattern );\n  }\n}","typeGuard":null,"tryCatchPattern":"try { trans.execute( null ); } catch ( KettleException e ) { if ( e.getMessage().contains( \"files\" ) ) { logError( \"Missing input files: \" + e.getMessage() ); /* alert + reschedule */ } }","preventionTips":["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"],"tags":["kettle","ms-access","file-not-found","paths","step-init"],"backgroundTag":"file-not-found","analyzedSha":"f3058517a153da500bf4551f46d79b91bf8ec552","analyzedAt":"2026-09-13T14:04:16.340Z","contentChangedAt":"2026-09-13T14:04:16.340Z","schemaVersion":2},"datasetVersion":"2026-09-20T23:17:15.980Z"}