{"record":{"id":"b037e0c7010c4217","repo":"pentaho/pentaho-kettle","slug":"purrepository-failedlogin-message","errorCode":"PurRepository.FailedLogin.Message","errorMessage":"PurRepository.FailedLogin.Message","messagePattern":"PurRepository\\.FailedLogin\\.Message","errorType":"error_code","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"plugins/pur/core/src/main/java/org/pentaho/di/repository/pur/PurRepositoryConnector.java","lineNumber":365,"sourceCode":"    } catch ( Exception e ) {\n      if ( log.isError() ) {\n        log.logError( BaseMessages.getString( PKG, \"PurRepositoryConnector.Error.EnableToGetUser\" ), e );\n      }\n      return null;\n    }\n  }\n\n  /**\n   * Awaits all submitted futures and applies their results to {@code result}.\n   */\n  private void applyFutureResults( final RepositoryConnectResult result,\n      Future<Boolean> authorizationFuture, Future<WebServiceException> repoFuture,\n      Future<Exception> syncFuture, Future<String> sessionFuture )\n      throws KettleException, InterruptedException, java.util.concurrent.ExecutionException {\n    WebServiceException repoException = repoFuture.get();\n    if ( repoException != null ) {\n      log.logError( repoException.getMessage() );\n      throw new KettleException( BaseMessages.getString( PKG, \"PurRepository.FailedLogin.Message\" ), repoException );\n    }\n\n    Exception syncException = syncFuture.get();\n    if ( syncException != null ) {\n      throw new KettleException( syncException );\n    }\n\n    boolean isAdmin = authorizationFuture.get();\n    result.getUser().setAdmin( isAdmin );\n\n    String userName = sessionFuture.get();\n    if ( userName != null ) {\n      result.getUser().setLogin( userName );\n    }\n  }\n\n  /**\n   * Registers all repository services into the service registry after a successful connection.","sourceCodeStart":347,"sourceCodeEnd":383,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/plugins/pur/core/src/main/java/org/pentaho/di/repository/pur/PurRepositoryConnector.java#L347-L383","documentation":"After firing off parallel connection futures (repository service registration, sync, session checks), applyFutureResults checks the repository future first: if it produced a WebServiceException, that is logged and a localized 'failed login' KettleException is thrown with the exception attached. This represents the Pentaho repository web service rejecting the login.","triggerScenarios":"During PurRepositoryConnector.connect, the repoFuture completes with a non-null WebServiceException — the Pentaho server returned a web-service error during registerRepositoryServices/authentication.","commonSituations":"Wrong username or password against the Pentaho BA server; server endpoint URL wrong or service unavailable; SSL/certificate errors; server returning 401/403/500 from the repository web service.","solutions":["Verify username/password and that the account is enabled on the Pentaho server (the underlying WebServiceException is logged — check Spoon logs for the exact HTTP/SSL error)","Confirm the repository URL points to the correct BA server and is reachable (curl the /pentaho endpoint)","Fix TLS/truststore issues if the server uses self-signed certificates","Retry if the server was temporarily down; check server logs (catalina.out / pentaho.log) for the matching request failure"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"// pre-flight: verify the BA server repository web service is reachable\nHttpURLConnection c = (HttpURLConnection) new URL(baseUrl + \"/pentaho/api/repo/files\").openConnection();\nc.setRequestProperty(\"Authorization\", authHeader);\nif (c.getResponseCode() >= 400) throw new KettleException(\"Server rejected auth: HTTP \" + c.getResponseCode());","typeGuard":null,"tryCatchPattern":"try {\n  repository.connect(repoMeta);\n} catch (KettleException e) {\n  if (e.getCause() instanceof WebServiceException) {\n    log.error(\"Repository web service rejected login: \" + e.getCause().getMessage());\n    // check credentials/URL/TLS, then retry\n  } else throw e;\n}","preventionTips":["Verify credentials and server URL before connecting","Check Spoon/server logs for the logged WebServiceException detail","Confirm network/TLS reachability of the Pentaho BA server","Retry transient failures with backoff"],"tags":["kettle","pentaho","login","web-service","authentication"],"backgroundTag":"api-error-response","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"}