use of io.crnk.core.engine.error.ExceptionMapper in project crnk-framework by crnk-project.
the class ClientStubBase method handleError.
protected RuntimeException handleError(HttpAdapterResponse response) throws IOException {
ErrorResponse errorResponse = null;
String body = response.body();
String contentType = response.getResponseHeader(HttpHeaders.HTTP_CONTENT_TYPE);
if (body.length() > 0 && contentType != null && contentType.toLowerCase().contains(HttpHeaders.JSONAPI_CONTENT_TYPE)) {
ObjectMapper objectMapper = client.getObjectMapper();
Document document = objectMapper.readValue(body, Document.class);
if (document.getErrors() != null && !document.getErrors().isEmpty()) {
errorResponse = new ErrorResponse(document.getErrors(), response.code());
}
}
if (errorResponse == null) {
errorResponse = new ErrorResponse(null, response.code());
}
ExceptionMapperRegistry exceptionMapperRegistry = client.getExceptionMapperRegistry();
Optional<ExceptionMapper<?>> mapper = (Optional) exceptionMapperRegistry.findMapperFor(errorResponse);
if (mapper.isPresent()) {
Throwable throwable = mapper.get().fromErrorResponse(errorResponse);
if (throwable instanceof RuntimeException) {
return (RuntimeException) throwable;
} else {
return new ClientException(response.code(), response.message(), throwable);
}
} else {
return new ClientException(response.code(), response.message());
}
}
use of io.crnk.core.engine.error.ExceptionMapper in project crnk-framework by crnk-project.
the class ExceptionMapperRegistryTest method shouldFindDescendantExceptionMapperFromError.
@Test
public void shouldFindDescendantExceptionMapperFromError() throws Exception {
// two exception mapper will match (IllegalStateException and SomeIllegalStateException)
// subtype should be choosen.
ErrorData errorData = ErrorData.builder().setId("someId").build();
ErrorResponse response = ErrorResponse.builder().setStatus(HttpStatus.BAD_REQUEST_400).setSingleErrorData(errorData).build();
Optional<ExceptionMapper<?>> mapper = (Optional) exceptionMapperRegistry.findMapperFor(response);
assertThat(mapper.isPresent()).isTrue();
assertThat(mapper.get()).isExactlyInstanceOf(SomeIllegalStateExceptionMapper.class);
Throwable throwable = mapper.get().fromErrorResponse(response);
assertThat(throwable).isExactlyInstanceOf(SomeIllegalStateException.class);
}
use of io.crnk.core.engine.error.ExceptionMapper in project crnk-framework by crnk-project.
the class ExceptionMapperRegistryTest method shouldNotFindDescendantExceptionMapperFromError.
@Test
public void shouldNotFindDescendantExceptionMapperFromError() throws Exception {
ErrorData errorData = ErrorData.builder().setId("someOtherId").build();
ErrorResponse response = ErrorResponse.builder().setStatus(HttpStatus.BAD_REQUEST_400).setSingleErrorData(errorData).build();
Optional<ExceptionMapper<?>> mapper = (Optional) exceptionMapperRegistry.findMapperFor(response);
assertThat(mapper.isPresent()).isTrue();
assertThat(mapper.get()).isExactlyInstanceOf(IllegalStateExceptionMapper.class);
}
use of io.crnk.core.engine.error.ExceptionMapper in project crnk-framework by crnk-project.
the class ExceptionMapperRegistryTest method shouldFindDirectExceptionMapperFromError.
@Test
public void shouldFindDirectExceptionMapperFromError() throws Exception {
ErrorResponse response = ErrorResponse.builder().setStatus(HttpStatus.BAD_REQUEST_400).build();
Optional<ExceptionMapper<?>> mapper = (Optional) exceptionMapperRegistry.findMapperFor(response);
assertThat(mapper.isPresent()).isTrue();
assertThat(mapper.get()).isExactlyInstanceOf(IllegalStateExceptionMapper.class);
Throwable throwable = mapper.get().fromErrorResponse(response);
assertThat(throwable).isExactlyInstanceOf(IllegalStateException.class);
}
use of io.crnk.core.engine.error.ExceptionMapper in project crnk-framework by crnk-project.
the class RegistryEntry method toResource.
private Object toResource(JsonApiResponse response) {
if (response.getErrors() != null && response.getErrors().iterator().hasNext()) {
List<ErrorData> errorList = new ArrayList<>();
response.getErrors().forEach(it -> errorList.add(it));
Optional<Integer> errorCode = errorList.stream().filter(it -> it.getStatus() != null).map(it -> Integer.parseInt(it.getStatus())).collect(Collectors.maxBy(Integer::compare));
ErrorResponse errorResponse = new ErrorResponse(errorList, errorCode.get());
ExceptionMapperRegistry exceptionMapperRegistry = moduleRegistry.getExceptionMapperRegistry();
ExceptionMapper<Throwable> exceptionMapper = exceptionMapperRegistry.findMapperFor(errorResponse).get();
return exceptionMapper.fromErrorResponse(errorResponse);
}
return response.getEntity();
}
Aggregations