Приложение 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 не записывается в файл журнала.
Можете ли вы указать мне причину, по которой исключение не перехватывается?