{"record":{"id":"c7d9c7f9bfd246f1","repo":"pentaho/pentaho-kettle","slug":"repository-not-found-clientrepositoryloader","errorCode":null,"errorMessage":"Repository not found: ","messagePattern":"Repository not found: ","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":86,"sourceCode":"    }\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\n}\n","sourceCodeStart":68,"sourceCodeEnd":96,"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#L68-L96","documentation":"connectToRepository looks up the repository by name in the loaded repositories metadata; findRepository returns null when no repository with that name is defined, and this KettleException (message plus repositoryName) is thrown. Called by getRepository when resolving pur:// URIs.","triggerScenarios":"PurFileSystemConfig.getRepoName() returns a name that does not match any repository in repositoriesLoader's RepositoriesMeta — the name is misspelled, or repositories.xml has no such entry on this machine.","commonSituations":"Moving jobs between machines where the named repository isn't defined; case/whitespace mismatch in the repository name; repository defined only in another user's ~/.kettle/repositories.xml.","solutions":["Define a repository with that exact name in Kettle repository metadata (Tool > Repository > Connect) or repositories.xml","Match the repository name string exactly (case and whitespace) with what is configured","List available repositories (RepositoriesMeta) and correct the configured name","Package a repositories.xml with the environment (or use KETTLE_SHARED_HOME) so the name resolves"],"exampleFix":"// before\nPurFileSystemConfig.getInstance(opts).setRepositoryName(\"pur Repo\"); // trailing space\n// after\nPurFileSystemConfig.getInstance(opts).setRepositoryName(\"purRepo\"); // exact name from repositories.xml","handlingStrategy":"validation","validationCode":"// Java — verify the name exists before mounting\nRepositoriesMeta all = new RepositoriesMeta();\nall.readData();\nboolean exists = java.util.Arrays.stream( all.getRepositories() )\n  .anyMatch( r -> r.getName().equals( repoName ) );\nif ( !exists ) throw new IllegalStateException( \"Repository not defined: \" + repoName );","typeGuard":null,"tryCatchPattern":"try {\n  Repository repo = loader.getRepository( opts );\n} catch ( KettleException e ) {\n  if ( String.valueOf( e.getMessage() ).startsWith( \"Repository not found: \" ) ) {\n    logError( \"Define the repository in repositories.xml or fix the name\" );\n  }\n  throw e;\n}","preventionTips":["Keep repositories.xml in sync across environments","Trim and exact-match repository names in config","Enumerate defined repositories at startup and fail fast with the valid list"],"tags":["repository","configuration","vfs"],"backgroundTag":"entity-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"}