public ErrorResponseException(final ErrorResponse errorResponse) { this(errorResponse.getStatusCode(), errorResponse.getMessage(), errorResponse.getErrors()); }
@Test public void notMatchingError() throws Exception { final String json = "{\n" + " \"statusCode\" : 400,\n" + " \"message\" : \"Message.\",\n" + " \"errors\" : [ {\n" + " \"code\" : \"OtherCode\",\n" + " \"message\" : \"Message.\"" + " } ]\n" + "}"; final ErrorResponse sphereErrorResponse = SphereJsonUtils.readObject(json, ErrorResponse.typeReference()); assertThatThrownBy(() -> sphereErrorResponse.getErrors().get(0).as(InvalidJsonInputError.class)) .isInstanceOf(IllegalArgumentException.class); } }
public static ExceptionFactory of() { final ExceptionFactory exceptionFactory = new ExceptionFactory() .when(r -> isServiceNotAvailable(r), r -> new ServiceUnavailableException(extractBody(r))) .whenStatus(401, r -> { final String body = extractBody(r); return body.contains("invalid_token") ? new InvalidTokenException() : new UnauthorizedException(body,401); }) .whenStatus(403, r -> new ForbiddenException(extractBody(r))) .whenStatus(500, r -> new InternalServerErrorException(extractBody(r))) .whenStatus(502, r -> new BadGatewayException(extractBody(r))) .whenStatus(503, r -> new ServiceUnavailableException(extractBody(r))) .whenStatus(504, r -> new GatewayTimeoutException(extractBody(r))) .whenStatus(409, r -> { final ErrorResponse errorResponse = SphereJsonUtils.readObject(r.getResponseBody(), ErrorResponse.typeReference()); return new ConcurrentModificationException(errorResponse); }) .whenStatus(413, r -> new RequestEntityTooLargeException()) .whenStatus(400, r -> { final String body = extractBody(r); if (body.contains("invalid_scope")) { return new InvalidTokenException(); } final ErrorResponse errorResponse = SphereJsonUtils.readObject(r.getResponseBody(), ErrorResponse.typeReference()); return new ErrorResponseException(errorResponse); }) .whenStatus(404, r -> new NotFoundException()) //default .when(response -> true, r -> new SphereException("Can't parse backend response.")); return exceptionFactory; }
private boolean isRecoverableException(final Throwable throwable) { if (throwable != null) { final Throwable cause = throwable.getCause(); return cause instanceof ConcurrentModificationException || (cause instanceof ErrorResponseException && ((ErrorResponse) cause).getErrors().stream().anyMatch(e -> e.getCode().equals(DuplicateFieldError.CODE))); } return true; }
@Test public void castToConcreteError() throws Exception { final String json = "{\n" + " \"statusCode\" : 400,\n" + " \"message\" : \"Request body does not contain valid JSON.\",\n" + " \"errors\" : [ {\n" + " \"code\" : \"InvalidJsonInput\",\n" + " \"message\" : \"Request body does not contain valid JSON.\",\n" + " \"detailedErrorMessage\" : \"detailed error message\"" + " } ]\n" + "}"; final ErrorResponse sphereErrorResponse = SphereJsonUtils.readObject(json, ErrorResponse.typeReference()); final InvalidJsonInputError jsonError = sphereErrorResponse.getErrors().get(0).as(InvalidJsonInputError.class); assertThat(jsonError.getDetailedErrorMessage()).isEqualTo("detailed error message"); }
public static ExceptionFactory of() { final ExceptionFactory exceptionFactory = new ExceptionFactory() .when(r -> isServiceNotAvailable(r), r -> new ServiceUnavailableException(extractBody(r))) .whenStatus(401, r -> { final String body = extractBody(r); return body.contains("invalid_token") ? new InvalidTokenException() : new UnauthorizedException(body,401); }) .whenStatus(403, r -> new ForbiddenException(extractBody(r))) .whenStatus(500, r -> new InternalServerErrorException(extractBody(r))) .whenStatus(502, r -> new BadGatewayException(extractBody(r))) .whenStatus(503, r -> new ServiceUnavailableException(extractBody(r))) .whenStatus(504, r -> new GatewayTimeoutException(extractBody(r))) .whenStatus(409, r -> { final ErrorResponse errorResponse = SphereJsonUtils.readObject(r.getResponseBody(), ErrorResponse.typeReference()); return new ConcurrentModificationException(errorResponse); }) .whenStatus(413, r -> new RequestEntityTooLargeException()) .whenStatus(400, r -> { final String body = extractBody(r); if (body.contains("invalid_scope")) { return new InvalidTokenException(); } final ErrorResponse errorResponse = SphereJsonUtils.readObject(r.getResponseBody(), ErrorResponse.typeReference()); return new ErrorResponseException(errorResponse); }) .whenStatus(404, r -> new NotFoundException()) //default .when(response -> true, r -> new SphereException("Can't parse backend response.")); return exceptionFactory; }
default boolean hasErrorCode(final String errorCode) { return getErrors().stream().anyMatch(sphereError -> sphereError.getCode().equals(errorCode)); }
public ConcurrentModificationException(final ErrorResponse errorResponse) { this(errorResponse.getStatusCode(), errorResponse.getMessage(), errorResponse.getErrors()); }
public static ExceptionFactory of() { final ExceptionFactory exceptionFactory = new ExceptionFactory() .when(r -> isServiceNotAvailable(r), r -> new ServiceUnavailableException(extractBody(r))) .whenStatus(401, r -> { final String body = extractBody(r); return body.contains("invalid_token") ? new InvalidTokenException() : new UnauthorizedException(body); }) .whenStatus(500, r -> new InternalServerErrorException(extractBody(r))) .whenStatus(502, r -> new BadGatewayException(extractBody(r))) .whenStatus(503, r -> new ServiceUnavailableException(extractBody(r))) .whenStatus(504, r -> new GatewayTimeoutException(extractBody(r))) .whenStatus(409, r -> new ConcurrentModificationException()) .whenStatus(413, r -> new RequestEntityTooLargeException()) .whenStatus(400, r -> { final ErrorResponse errorResponse = SphereJsonUtils.readObject(r.getResponseBody(), ErrorResponse.typeReference()); return new ErrorResponseException(errorResponse); } ) .whenStatus(404, r -> new NotFoundException()) //default .when(response -> true, r -> new SphereException("Can't parse backend response.")); return exceptionFactory; }