{"record":{"id":"3cf3c35620331695","repo":"pentaho/pentaho-kettle","slug":"repositorylogin-errorfindingplugin","errorCode":null,"errorMessage":"RepositoryLogin.ErrorFindingPlugin","messagePattern":"RepositoryLogin\\.ErrorFindingPlugin","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"ui/src/main/java/org/pentaho/di/ui/repository/RepositoriesHelper.java","lineNumber":142,"sourceCode":"          }\n        }\n      } catch ( Exception e ) {\n        log.logDetailed( BaseMessages.getString( PKG, \"RepositoryLogin.ErrorCreatingRepository\", e\n          .getLocalizedMessage() ) );\n        new ErrorDialog( shell, BaseMessages.getString( PKG, \"Dialog.Error\" ), BaseMessages.getString(\n          PKG, \"RepositoryLogin.ErrorCreatingRepository\", e.getLocalizedMessage() ), e );\n      }\n    }\n  }\n\n  public void editRepository() {\n    try {\n      PluginInterface plugin = null;\n      RepositoryMeta ri = input.searchRepository( model.getSelectedRepository().getName() );\n      if ( ri != null ) {\n        plugin = PluginRegistry.getInstance().getPlugin( RepositoryPluginType.class, ri.getId() );\n        if ( plugin == null ) {\n          throw new KettleException( BaseMessages\n            .getString( PKG, \"RepositoryLogin.ErrorFindingPlugin\", ri.getId() ) );\n        }\n      }\n      RepositoryDialogInterface dd = getRepositoryDialog( plugin, ri, input, this.shell );\n      if ( dd.open( MODE.EDIT ) != null ) {\n        fillRepositories();\n        int idx = input.indexOfRepository( ri );\n        model.setSelectedRepository( input.getRepository( idx ) );\n        writeData();\n      }\n    } catch ( Exception e ) {\n      log.logDetailed( BaseMessages.getString( PKG, \"RepositoryLogin.ErrorEditingRepository\", e\n        .getLocalizedMessage() ) );\n      new ErrorDialog( shell, BaseMessages.getString( PKG, \"Dialog.Error\" ), BaseMessages.getString(\n        PKG, \"RepositoryLogin.ErrorEditingRepository\", e.getLocalizedMessage() ), e );\n    }\n  }\n","sourceCodeStart":124,"sourceCodeEnd":160,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/ui/src/main/java/org/pentaho/di/ui/repository/RepositoriesHelper.java#L124-L160","documentation":"editRepository() looks up the repository's PluginInterface via PluginRegistry using the RepositoryMeta's id. If searchRepository found the repository metadata but the registry has no registered repository plugin for that id, it throws KettleException 'RepositoryLogin.ErrorFindingPlugin' (with the plugin id interpolated). Without the plugin, the repository edit dialog cannot be instantiated.","triggerScenarios":"Calling editRepository() for a repository whose id exists in repositories.xml but has no corresponding plugin registered in PluginRegistry under RepositoryPluginType.","commonSituations":"repositories.xml copied from a machine with extra repository plugins (e.g. enterprise database repository) while this installation only has base plugins; missing plugin jars in lib/ or libswt; typo'd/obsolete repository type id after a version upgrade removed the plugin.","solutions":["Check that the plugin jar providing that repository type (e.g. KettleEnterpriseRepositoryPlugin) is present in the plugin/lib directories and on the classpath.","Remove or re-create the repository entry in ~/.kettle/repositories.xml if its repository type is no longer installed.","Verify ri.getId() matches a registered RepositoryPluginType id; align the repository type between server and client installs.","Check the plugins.xml / PluginRegistry log at startup for failed plugin loads."],"exampleFix":"// before\nPluginInterface plugin = PluginRegistry.getInstance().getPlugin( RepositoryPluginType.class, ri.getId() );\n// after\nPluginInterface plugin = PluginRegistry.getInstance().getPlugin( RepositoryPluginType.class, ri.getId() );\nif ( plugin == null ) {\n  logError( \"Repository plugin not installed for id: \" + ri.getId() + \"; skipping edit\" );\n  return;\n}","handlingStrategy":"validation","validationCode":"RepositoryMeta ri = input.searchRepository( model.getSelectedRepository().getName() );\nPluginInterface plugin = ( ri != null )\n  ? PluginRegistry.getInstance().getPlugin( RepositoryPluginType.class, ri.getId() )\n  : null;\nif ( plugin == null ) {\n  throw new IllegalStateException(\n    \"Repository plugin not installed for id: \" + ( ri == null ? \"<unknown>\" : ri.getId() )\n      + \". Install the matching plugin jar or remove this repository from repositories.xml.\" );\n}","typeGuard":null,"tryCatchPattern":"try {\n  helper.editRepository();\n} catch ( KettleException e ) {\n  if ( e.getMessage().contains( \"ErrorFindingPlugin\" ) ) {\n    showError( \"Repository type plugin is not installed in this Pentaho instance.\" );\n  } else {\n    throw e;\n  }\n}","preventionTips":["Keep client and server Pentaho installs aligned — same set of repository plugins.","Do not copy repositories.xml from machines with enterprise plugins to base-only installs.","Verify plugin jars exist under plugins/ and lib/ after upgrades.","Review PluginRegistry startup logs for failed plugin loads before using the repository dialogs."],"tags":["kettle","plugin-registry","repository","missing-plugin"],"backgroundTag":"missing-dependency","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"}