Исключение, вызванное закрытым WSClient, не перехвачено - PullRequest
0 голосов
/ 22 января 2020

Приложение My Play 2.6.13 использует WSClient для аутентификации пользователей Google. В редких случаях WSClient уже закрывался при запуске этого запроса, вызывая

play.api.UnexpectedException: Unexpected exception[IllegalStateException: Closed]
...
Caused by: java.lang.IllegalStateException: Closed
...
at play.api.libs.ws.ahc.AhcWSRequest.post(AhcWSRequest.scala:188)

Я хотел бы перехватить это исключение, но со следующим фрагментом кода (Scala версия 2.12.4, импорт scala.util.Try), я все еще получаю то же исключение, что и выше.

request.getQueryString("code") match {
      case Some(code) => Try(for {
        tokenResponse <- wsClient.url(tokenLinkStart)
          .withHttpHeaders(CONTENT_TYPE -> "application/x-www-form-urlencoded")
          .post(body = "code=" + code + params)
        _ = Logger.debug(s"Response: ${tokenResponse}")

        tokenValidated <- tokenResponse.json.validate[TokenResponse].fold(
          valid = postForm => Try(for {
            validationResponse <- wsClient.url("https://www.googleapis.com/oauth2/v1/userinfo?alt=json&access_token=" + postForm.accessToken)
              .withHttpHeaders(AUTHORIZATION -> postForm.accessToken).get()
            _ = Logger.debug(s"Access token: ${postForm.accessToken}")
            _ = Logger.info("Token validated, ready to process login data!")

            validationProcessed <- this.processData(validationResponse.json, request, state)
          } yield validationProcessed).getOrElse(Future.successful(Ok("Google sign in error")))
          ,
          invalid = error => {
            Logger.error(s"There was an error with Google authentication, code: ${code}, Google authentication errors: ${error}")
            Future.successful(Ok("Google sign in error"))
          }
        )
      } yield tokenValidated).getOrElse(Future.successful(Ok("Google sign in error")))

      case None => {
        Logger.error("Invalid request to Google authentication")
        Future.successful(Ok("Google sign in error"))
      }
    }

Согласно журналу, исключение вызывается строкой tokenResponse <- wsClient.url.... Ни одно из следующих сообщений Logger не записывается в файл журнала.

Можете ли вы указать мне причину, по которой исключение не перехватывается?

...