From dcf8831bb182b90fb4349c47643a0eba2e53a79b Mon Sep 17 00:00:00 2001 From: Kolya Opahle <k.opahle@sap.com> Date: Fri, 12 Jun 2020 12:44:33 +0200 Subject: [PATCH] Added exception handler for UnknownHostException's (#412) * Added exception handler for UnknownHostException's Signed-off-by: Kolya Opahle <k.opahle@sap.com> * Added a custom CwaWebException conform UnknownHostException Signed-off-by: Kolya Opahle <k.opahle@sap.com> --- .../exception/http/CwaWebException.kt | 1 + .../rki/coronawarnapp/http/HttpErrorParser.kt | 68 +++++++++++-------- 2 files changed, 39 insertions(+), 30 deletions(-) diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/exception/http/CwaWebException.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/exception/http/CwaWebException.kt index cdbae9456..4925705a4 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/exception/http/CwaWebException.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/exception/http/CwaWebException.kt @@ -27,6 +27,7 @@ open class CwaSuccessResponseWithCodeMismatchNotSupportedError(val statusCode: I open class CwaInformationalNotSupportedError(val statusCode: Int) : CwaWebException(statusCode) open class CwaRedirectNotSupportedError(val statusCode: Int) : CwaWebException(statusCode) +class CwaUnknownHostException : CwaWebException(901) class BadRequestException : CwaClientError(400) class UnauthorizedException : CwaClientError(401) class ForbiddenException : CwaClientError(403) diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/http/HttpErrorParser.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/http/HttpErrorParser.kt index 4cda5df1e..dec204307 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/http/HttpErrorParser.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/http/HttpErrorParser.kt @@ -8,6 +8,7 @@ import de.rki.coronawarnapp.exception.http.CwaInformationalNotSupportedError import de.rki.coronawarnapp.exception.http.CwaRedirectNotSupportedError import de.rki.coronawarnapp.exception.http.CwaServerError import de.rki.coronawarnapp.exception.http.CwaSuccessResponseWithCodeMismatchNotSupportedError +import de.rki.coronawarnapp.exception.http.CwaUnknownHostException import de.rki.coronawarnapp.exception.http.CwaWebException import de.rki.coronawarnapp.exception.http.ForbiddenException import de.rki.coronawarnapp.exception.http.GatewayTimeoutException @@ -25,40 +26,47 @@ import de.rki.coronawarnapp.exception.http.UnauthorizedException import de.rki.coronawarnapp.exception.http.UnsupportedMediaTypeException import okhttp3.Interceptor import okhttp3.Response +import java.net.UnknownHostException class HttpErrorParser : Interceptor { override fun intercept(chain: Interceptor.Chain): Response { - val response = chain.proceed(chain.request()) - return when (val code = response.code) { - 200 -> response - 201 -> response - 202 -> response - 204 -> response - 400 -> throw BadRequestException() - 401 -> throw UnauthorizedException() - 403 -> throw ForbiddenException() - 404 -> throw NotFoundException() - 409 -> throw ConflictException() - 410 -> throw GoneException() - 415 -> throw UnsupportedMediaTypeException() - 429 -> throw TooManyRequestsException() - 500 -> throw InternalServerErrorException() - 501 -> throw NotImplementedException() - 502 -> throw BadGatewayException() - 503 -> throw ServiceUnavailableException() - 504 -> throw GatewayTimeoutException() - 505 -> throw HTTPVersionNotSupported() - 511 -> throw NetworkAuthenticationRequiredException() - 598 -> throw NetworkReadTimeoutException() - 599 -> throw NetworkConnectTimeoutException() - else -> { - if (code in 100..199) throw CwaInformationalNotSupportedError(code) - if (code in 200..299) throw CwaSuccessResponseWithCodeMismatchNotSupportedError(code) - if (code in 300..399) throw CwaRedirectNotSupportedError(code) - if (code in 400..499) throw CwaClientError(code) - if (code in 500..599) throw CwaServerError(code) - throw CwaWebException(code) + try { + val response = chain.proceed(chain.request()) + return when (val code = response.code) { + 200 -> response + 201 -> response + 202 -> response + 204 -> response + 400 -> throw BadRequestException() + 401 -> throw UnauthorizedException() + 403 -> throw ForbiddenException() + 404 -> throw NotFoundException() + 409 -> throw ConflictException() + 410 -> throw GoneException() + 415 -> throw UnsupportedMediaTypeException() + 429 -> throw TooManyRequestsException() + 500 -> throw InternalServerErrorException() + 501 -> throw NotImplementedException() + 502 -> throw BadGatewayException() + 503 -> throw ServiceUnavailableException() + 504 -> throw GatewayTimeoutException() + 505 -> throw HTTPVersionNotSupported() + 511 -> throw NetworkAuthenticationRequiredException() + 598 -> throw NetworkReadTimeoutException() + 599 -> throw NetworkConnectTimeoutException() + else -> { + if (code in 100..199) throw CwaInformationalNotSupportedError(code) + if (code in 200..299) throw CwaSuccessResponseWithCodeMismatchNotSupportedError( + code + ) + if (code in 300..399) throw CwaRedirectNotSupportedError(code) + if (code in 400..499) throw CwaClientError(code) + if (code in 500..599) throw CwaServerError(code) + throw CwaWebException(code) + } } + } catch (err: UnknownHostException) { + throw CwaUnknownHostException() } } } -- GitLab