{"record":{"id":"b8e46af5f06a9993","repo":"pentaho/pentaho-kettle","slug":"error-initialize-repo-vfs","errorCode":null,"errorMessage":"Error initialize repo:// VFS","messagePattern":"Error initialize repo:// VFS","errorType":"exception","errorClass":"RuntimeException","httpStatus":null,"severity":"error","filePath":"plugins/pentaho-repository-vfs/core/src/main/java/org/pentaho/repositoryvfs/vfs/RepositoryVfsProvider.java","lineNumber":56,"sourceCode":"public class RepositoryVfsProvider implements FileProvider {\n  public static final String SCHEME = \"repo\";\n\n  private final IConnectedRepositoryInstance repositoryInstance;\n\n  public RepositoryVfsProvider( IConnectedRepositoryInstance repositoryInstance ) {\n    this.repositoryInstance = repositoryInstance;\n    registerRepoVFS();\n  }\n\n  private void registerRepoVFS() {\n    FileSystemManager fsm = KettleVFS.getInstance().getFileSystemManager();\n    if ( fsm instanceof DefaultFileSystemManager ) {\n      try {\n        ( (DefaultFileSystemManager) fsm ).addProvider( SCHEME, this );\n        final Spoon spoon = Spoon.getInstance();\n        System.out.println(  );\n      } catch ( Exception ex ) {\n        throw new RuntimeException( \"Error initialize repo:// VFS\", ex );\n      }\n    }\n  }\n\n  protected Repository getRepo() {\n    Repository repo = repositoryInstance.getConnectedRepositoryInstance();\n    if ( repo == null ) {\n      throw new RuntimeException( \"Repository not connected\" );\n    }\n    return repo;\n  }\n\n  @Override\n  public FileObject findFile( FileObject baseFile, String uri, FileSystemOptions fileSystemOptions )\n    throws FileSystemException {\n\n    if ( !uri.startsWith( \"repo://\" ) ) {\n      throw new FileSystemException( \"WRONG_URL\" );","sourceCodeStart":38,"sourceCodeEnd":74,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/plugins/pentaho-repository-vfs/core/src/main/java/org/pentaho/repositoryvfs/vfs/RepositoryVfsProvider.java#L38-L74","documentation":"RepositoryVfsProvider.registerRepoVFS registers the repo:// scheme with the commons-vfs DefaultFileSystemManager; any exception during registration (e.g. scheme already registered, Spoon not initialized) is rethrown as RuntimeException 'Error initialize repo:// VFS' with the cause attached.","triggerScenarios":"Calling registerRepoVFS when addProvider(SCHEME, this) throws — most commonly because a 'repo' provider was already registered in the current DefaultFileSystemManager, or Spoon.getInstance() fails outside the Spoon UI context.","commonSituations":"Embedding the repository VFS in a non-GUI/headless process where Spoon isn't available; registering the provider twice in one JVM (unit tests, plugin reload); mixing Pentaho versions where another component registered repo:// first.","solutions":["Check getCause() for 'Duplicate provider' and skip re-registration if the scheme is already present.","Only call registerRepoVFS once per JVM (guard with a static flag or check fsm.hasProvider(SCHEME)).","Run inside a context where Spoon is initialized, or remove/replace the Spoon dependency for headless use.","Align plugin/Pentaho versions so only one component registers repo://."],"exampleFix":"// before\nRepositoryVfsProvider.getInstance().registerRepoVFS();\n// after\nFileSystemManager fsm = VFS.getManager();\nif (fsm instanceof DefaultFileSystemManager && !fsm.hasProvider(\"repo\")) {\n  RepositoryVfsProvider.getInstance().registerRepoVFS();\n}","handlingStrategy":"validation","validationCode":"FileSystemManager fsm = VFS.getManager();\nboolean needsRegister = fsm instanceof DefaultFileSystemManager && !fsm.hasProvider(\"repo\");\nif (needsRegister) { /* call registerRepoVFS once */ }","typeGuard":null,"tryCatchPattern":"try {\n  provider.registerRepoVFS();\n} catch (RuntimeException e) {\n  if (!(e.getCause() instanceof FileSystemException && String.valueOf(e.getCause()).contains(\"provider\"))) throw e;\n  // duplicate registration: safe to ignore\n}","preventionTips":["Register the repo:// provider exactly once per JVM (guard with a static flag).","Don't invoke registration in headless environments that lack Spoon.","Check VFS manager for an existing 'repo' provider before registering."],"tags":["vfs","initialization","repository"],"backgroundTag":"module-init-failed","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"}