pentaho/pentaho-kettle · error · RuntimeException
Error initialize repo:// VFS
Error message
Error initialize repo:// VFS
What it means
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.
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://.
Example fix
// before
RepositoryVfsProvider.getInstance().registerRepoVFS();
// after
FileSystemManager fsm = VFS.getManager();
if (fsm instanceof DefaultFileSystemManager && !fsm.hasProvider("repo")) {
RepositoryVfsProvider.getInstance().registerRepoVFS();
} Defensive patterns
Strategy: validation
Validate before calling
FileSystemManager fsm = VFS.getManager();
boolean needsRegister = fsm instanceof DefaultFileSystemManager && !fsm.hasProvider("repo");
if (needsRegister) { /* call registerRepoVFS once */ } Try / catch
try {
provider.registerRepoVFS();
} catch (RuntimeException e) {
if (!(e.getCause() instanceof FileSystemException && String.valueOf(e.getCause()).contains("provider"))) throw e;
// duplicate registration: safe to ignore
} Prevention
- 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.
When it happens
Trigger: 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.
Common situations: 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.
Related errors
- Unable to obtain a IUnifiedRepository instance
- Append file in repository is not possible
- ConnectionFileProvider.FailedLoadConnectionManager
- Failed to initialize connection variables
- Invalid repository type
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/b8e46af5f06a9993.
Report an issue: GitHub.
Appendix: source
Thrown at plugins/pentaho-repository-vfs/core/src/main/java/org/pentaho/repositoryvfs/vfs/RepositoryVfsProvider.java:56
public class RepositoryVfsProvider implements FileProvider {
public static final String SCHEME = "repo";
private final IConnectedRepositoryInstance repositoryInstance;
public RepositoryVfsProvider( IConnectedRepositoryInstance repositoryInstance ) {
this.repositoryInstance = repositoryInstance;
registerRepoVFS();
}
private void registerRepoVFS() {
FileSystemManager fsm = KettleVFS.getInstance().getFileSystemManager();
if ( fsm instanceof DefaultFileSystemManager ) {
try {
( (DefaultFileSystemManager) fsm ).addProvider( SCHEME, this );
final Spoon spoon = Spoon.getInstance();
System.out.println( );
} catch ( Exception ex ) {
throw new RuntimeException( "Error initialize repo:// VFS", ex );
}
}
}
protected Repository getRepo() {
Repository repo = repositoryInstance.getConnectedRepositoryInstance();
if ( repo == null ) {
throw new RuntimeException( "Repository not connected" );
}
return repo;
}
@Override
public FileObject findFile( FileObject baseFile, String uri, FileSystemOptions fileSystemOptions )
throws FileSystemException {
if ( !uri.startsWith( "repo://" ) ) {
throw new FileSystemException( "WRONG_URL" );View on GitHub (pinned to f3058517a1)