pentaho/pentaho-kettle · error · KettleException

ExcelInput.Exception.RequiredFilesNotAccessible

ExcelInput.Exception.RequiredFilesNotAccessible

Error message

ExcelInput.Exception.RequiredFilesNotAccessible

What it means

handleMissingFiles also checks files that exist but cannot be opened (non-accessible). When error ignoring is off, the step throws a KettleException summarizing the inaccessible required files and aborts.

Solutions

  1. Check and fix OS read permissions on the listed files
  2. Close the application holding the file lock (e.g. Excel) or copy the file elsewhere first
  3. Verify the network drive/mount is available on the execution node
  4. Enable 'Ignore errors' with a non-accessible-file error handler if access failures are tolerable
Defensive patterns

Strategy: try-catch

Validate before calling

FileObject f = KettleVFS.getInstance(bowl).getFileObject(path, transMeta);
if (f.exists() && !f.isReadable()) throw new AccessDeniedException(path);

Try / catch

try {
  transformation.execute();
} catch (KettleException e) {
  if (e.getMessage().contains("RequiredFilesNotAccessible")) {
    // check locks/permissions then retry once
  } else { throw e; }
}

Prevention

When it happens

Trigger: data.files.getNonAccessibleFiles() is non-empty (permission or lock problems) and meta.isErrorIgnored() is false.

Common situations: Files locked by Excel or another process; OS permission denies read; file on an unmounted network share; running the transformation as a service user lacking file permissions.

Understand the failure class

Background: Permission denied / not authorized / 403 Forbidden: access-control rejections when the caller lacks the required role, grant, or ownership — this error's family across 18 libraries.

Related errors


AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13). Data as JSON: /api/errors/3fe530625dc4aa9f. Report an issue: GitHub.

Appendix: source

Thrown at plugins/excel/core/src/main/java/org/pentaho/di/trans/steps/excelinput/ExcelInput.java:497

        throw new KettleException( BaseMessages.getString(
          PKG, "ExcelInput.Exception.MissingRequiredFiles", message ) );
      }
    }

    List<FileObject> nonAccessibleFiles = data.files.getNonAccessibleFiles();
    if ( !nonAccessibleFiles.isEmpty() ) {
      String message = FileInputList.getRequiredFilesDescription( nonAccessibleFiles );
      if ( log.isBasic() ) {
        logBasic( BaseMessages.getString( PKG, "ExcelInput.Log.RequiredFilesTitle" ), BaseMessages.getString(
          PKG, "ExcelInput.Log.RequiredFilesMsgNotAccessible", message ) );
      }

      if ( meta.isErrorIgnored() ) {
        for ( FileObject fileObject : nonAccessibleFiles ) {
          data.errorHandler.handleNonAccessibleFile( fileObject );
        }
      } else {
        throw new KettleException( BaseMessages.getString(
          PKG, "ExcelInput.Exception.RequiredFilesNotAccessible", message ) );
      }
    }
  }

  public Object[] getRowFromWorkbooks() {
    // This procedure outputs a single Excel data row on the destination
    // rowsets...

    Object[] retval = null;

    try {
      // First, see if a file has been opened?
      if ( data.workbook == null ) {
        // Open a new openFile..
        data.file = data.files.getFile( data.filenr );
        data.filename = KettleVFS.getFilename( data.file );
        // Add additional fields?

View on GitHub (pinned to f3058517a1)