pentaho/pentaho-kettle · error · KettleException

Unable to select file provider!

Error message

Unable to select file provider!

What it means

FileOpenSaveDialog throws this KettleException when the provider lookup for the current file-open/save state fails — no registered provider matches the requested provider id/type. The dialog then surfaces it via an ErrorDialog as 'unable to create folder'.

Solutions

  1. Ensure the file-open-save provider plugins are present and loaded (check plugin directories and logs)
  2. Verify the provider id/name passed to the dialog matches a registered provider
  3. Reinstall/repair the missing provider plugin
Defensive patterns

Strategy: try-catch

Validate before calling

// check provider availability before opening dialog
boolean ok = providerManager.getProviders().stream().anyMatch( p -> p.getId().equals( providerId ) );

Try / catch

try { dialog.open(...); } catch ( KettleException e ) { if ( e.getMessage().contains( "file provider" ) ) { /* reinstall/re-register provider plugin */ } }

Prevention

When it happens

Trigger: Creating a folder (or resolving a destination) in the VFS browser when the provider id stored in the dialog state does not match any registered FileProvider (e.g. plugin missing/disabled, unknown provider name).

Common situations: file-open-save provider plugins not loaded; custom provider plugin removed or failing to register; stale dialog state referencing a provider from a different configuration.

Understand the failure class

Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.

Related errors


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

Appendix: source

Thrown at plugins/file-open-save-new/core/src/main/java/org/pentaho/di/plugins/fileopensave/dialog/FileOpenSaveDialog.java:2134

        selectPath( treeViewerDestination );

        IStructuredSelection selectionAsStructuredSelection = new StructuredSelection( treeViewerDestination );
        treeViewer.setSelection( selectionAsStructuredSelection, true );
        if ( !treeViewer.getExpandedState( selectionAsStructuredSelection ) ) {
          treeViewer.setExpandedState( selectionAsStructuredSelection, true );
        }
        // Set selection in fileTableViewer to new folder
        for ( TableItem tableItem : fileTableViewer.getTable().getItems() ) {
          if ( tableItem.getText( 0 ).equals( newFolderName ) ) {
            fileTableViewer.getTable().setSelection( tableItem );
            fileTableViewer.getTable().setFocus();
            break;
          }
        }
        processState();
        return true;
      } else {
        throw new KettleException( "Unable to select file provider!" );
      }
    } catch ( Exception ex ) {
      new ErrorDialog( getShell(), "Error",
        BaseMessages.getString( PKG, "file-open-save-plugin.error.unable-to-create-folder.title" ), ex, false );
    }
    return false;
  }

  private Image rasterImage( String path, int width, int height ) {
    return rasterImage( getClass().getClassLoader(), path, width, height );
  }

  private Image rasterImage( ClassLoader classLoader, String path, int width, int height ) {
    SwtUniversalImage img =
      SwtSvgImageUtil.getUniversalImage( getShell().getDisplay(), classLoader, path );
    Image image = img.getAsBitmapForSize( getShell().getDisplay(), width, height );
    getShell().addDisposeListener( e -> {
      img.dispose();

View on GitHub (pinned to f3058517a1)