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; }
default boolean hasErrorCode(final String errorCode) { return getErrors().stream().anyMatch(sphereError -> sphereError.getCode().equals(errorCode)); }
public ErrorResponseException(final ErrorResponse errorResponse) { this(errorResponse.getStatusCode(), errorResponse.getMessage(), errorResponse.getErrors()); }
public ConcurrentModificationException(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); } }
@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"); }