{"record":{"id":"03bb3b829b576ee7","repo":"pentaho/pentaho-kettle","slug":"no-repository","errorCode":null,"errorMessage":"No repository","messagePattern":"No repository","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"plugins/repo-vfs/repo-vfs-pdi/src/main/java/org/pentaho/di/repovfs/plugin/client/ClientRepositoryLoader.java","lineNumber":76,"sourceCode":"    var bowl = cfg.getBowl();\n    if ( bowl.isPresent() && bowl.get() instanceof RepositoryBowl repoBowl ) {\n      log.debug( \"Using repository from bowl\" );\n      return repoBowl.getRepository();\n    }\n\n    Spoon spoon = Spoon.getInstance();\n    if ( spoon != null ) {\n      log.debug( \"Using spoon repository\" );\n      return spoon.getRepository();\n    }\n    // there is no spoon\n    log.debug( \"Connecting to repository\" );\n    var repository = connectToRepository(\n      cfg.getRepoName().orElseThrow( () -> new KettleException( \"No repository name\" ) ),\n      cfg.getUser().orElseThrow( () -> new KettleException( \"No user name\" ) ),\n      cfg.getPass().orElseThrow( () -> new KettleException( \"No password\" ) ) );\n    if ( repository == null ) {\n      throw new KettleException( \"No repository\" );\n    }\n    return repository;\n  }\n\n  private Repository connectToRepository( String repositoryName, String user, String password )\n    throws KettleException {\n    var repositories = repositoriesLoader.get();\n    var repoMeta = repositories.findRepository( repositoryName );\n    if ( repoMeta == null ) {\n      throw new KettleException( \"Repository not found: \" + repositoryName );\n    }\n    var repo = PluginRegistry.getInstance().loadClass( RepositoryPluginType.class, repoMeta, Repository.class );\n    repo.init( repoMeta );\n    repo.connect( user, password );\n    return repo;\n  }\n\n","sourceCodeStart":58,"sourceCodeEnd":94,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/plugins/repo-vfs/repo-vfs-pdi/src/main/java/org/pentaho/di/repovfs/plugin/client/ClientRepositoryLoader.java#L58-L94","documentation":"ClientRepositoryLoader.getRepository connects to the named repository using the repo name, user, and password from PurFileSystemConfig; connectToRepository returned null (no repository could be connected), so this KettleException is thrown. The VFS layer has no repository to operate on.","triggerScenarios":"getRepository(opts) runs after 'No repository name/user/password' checks pass, but connectToRepository yields null — e.g. the named repository exists in metadata yet fails to load/produce an instance.","commonSituations":"PurFileSystemConfig missing or having invalid values in FileSystemOptions; repository metadata present but plugin for that repository type not installed; connection silently failing and returning null upstream.","solutions":["Verify PurFileSystemConfig values (repo name, user, password) in your VFS FileSystemOptions","Confirm the repository plugin for that metadata type is installed and loadable","Check logs around connectToRepository for the underlying connection failure","Re-register the repository in Kettle's repository metadata (repositories.xml)"],"exampleFix":"// before\nFileSystemOptions opts = new FileSystemOptions();\n// after — set all required config before resolving pur:// URIs\nFileSystemOptions opts = new FileSystemOptions();\nPurFileSystemConfig cfg = PurFileSystemConfig.getInstance(opts);\ncfg.setRepositoryName(\"myPurRepo\");\ncfg.setUser(\"admin\");\ncfg.setPass(\"password\");","handlingStrategy":"validation","validationCode":"// Java — before resolving pur:// URIs\nPurFileSystemConfig cfg = PurFileSystemConfig.getInstance( opts );\nif ( cfg.getRepoName().isEmpty() || cfg.getUser().isEmpty() || cfg.getPass().isEmpty() ) {\n  throw new IllegalStateException( \"PurFileSystemConfig requires repo name, user and password\" );\n}","typeGuard":null,"tryCatchPattern":"try {\n  Repository repo = loader.getRepository( opts );\n} catch ( KettleException e ) {\n  logError( \"VFS repository load failed: \" + e.getMessage(), e );\n  throw e;\n}","preventionTips":["Set all PurFileSystemConfig fields on FileSystemOptions before use","Install the repository plugin matching your metadata type","Check connectToRepository logs for silent nulls"],"tags":["repository","vfs","connection"],"backgroundTag":"resource-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"}