Search in sources :

Example 1 with ExceptionMapper

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());
    }
}
Also used : ExceptionMapper(io.crnk.core.engine.error.ExceptionMapper) Optional(io.crnk.core.utils.Optional) ClientException(io.crnk.client.ClientException) Document(io.crnk.core.engine.document.Document) ExceptionMapperRegistry(io.crnk.core.engine.internal.exception.ExceptionMapperRegistry) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper) ErrorResponse(io.crnk.core.engine.error.ErrorResponse)

Example 2 with ExceptionMapper

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);
}
Also used : JsonApiExceptionMapper(io.crnk.core.engine.error.JsonApiExceptionMapper) ExceptionMapper(io.crnk.core.engine.error.ExceptionMapper) Optional(io.crnk.core.utils.Optional) ErrorData(io.crnk.core.engine.document.ErrorData) ErrorResponse(io.crnk.core.engine.error.ErrorResponse) Test(org.junit.Test)

Example 3 with ExceptionMapper

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);
}
Also used : JsonApiExceptionMapper(io.crnk.core.engine.error.JsonApiExceptionMapper) ExceptionMapper(io.crnk.core.engine.error.ExceptionMapper) Optional(io.crnk.core.utils.Optional) ErrorData(io.crnk.core.engine.document.ErrorData) ErrorResponse(io.crnk.core.engine.error.ErrorResponse) Test(org.junit.Test)

Example 4 with ExceptionMapper

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);
}
Also used : JsonApiExceptionMapper(io.crnk.core.engine.error.JsonApiExceptionMapper) ExceptionMapper(io.crnk.core.engine.error.ExceptionMapper) Optional(io.crnk.core.utils.Optional) ErrorResponse(io.crnk.core.engine.error.ErrorResponse) Test(org.junit.Test)

Example 5 with ExceptionMapper

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();
}
Also used : ResourceRepositoryInformation(io.crnk.core.engine.information.repository.ResourceRepositoryInformation) ExceptionMapper(io.crnk.core.engine.error.ExceptionMapper) ResourceList(io.crnk.core.resource.list.ResourceList) ExceptionMapperRegistry(io.crnk.core.engine.internal.exception.ExceptionMapperRegistry) HashMap(java.util.HashMap) ResourceField(io.crnk.core.engine.information.resource.ResourceField) RelationshipRepositoryAdapter(io.crnk.core.engine.internal.repository.RelationshipRepositoryAdapter) ArrayList(java.util.ArrayList) QueryAdapter(io.crnk.core.engine.query.QueryAdapter) ErrorResponse(io.crnk.core.engine.error.ErrorResponse) ResourceInformation(io.crnk.core.engine.information.resource.ResourceInformation) ResourceFieldNotFoundException(io.crnk.core.exception.ResourceFieldNotFoundException) Map(java.util.Map) AnnotatedResourceEntry(io.crnk.legacy.registry.AnnotatedResourceEntry) DirectResponseResourceEntry(io.crnk.legacy.internal.DirectResponseResourceEntry) QuerySpecAdapter(io.crnk.core.queryspec.internal.QuerySpecAdapter) DirectResponseRelationshipEntry(io.crnk.legacy.internal.DirectResponseRelationshipEntry) ResourceRepositoryV2(io.crnk.core.repository.ResourceRepositoryV2) DefaultResourceList(io.crnk.core.resource.list.DefaultResourceList) QuerySpec(io.crnk.core.queryspec.QuerySpec) JsonApiResponse(io.crnk.core.repository.response.JsonApiResponse) Collection(java.util.Collection) ModuleRegistry(io.crnk.core.module.ModuleRegistry) Collectors(java.util.stream.Collectors) AnnotatedRelationshipEntryBuilder(io.crnk.legacy.registry.AnnotatedRelationshipEntryBuilder) ErrorData(io.crnk.core.engine.document.ErrorData) Serializable(java.io.Serializable) List(java.util.List) RepositoryMethodParameterProvider(io.crnk.legacy.internal.RepositoryMethodParameterProvider) Optional(java.util.Optional) PreconditionUtil(io.crnk.core.engine.internal.utils.PreconditionUtil) ResourceRepositoryAdapter(io.crnk.core.engine.internal.repository.ResourceRepositoryAdapter) RelationshipRepositoryNotFoundException(io.crnk.core.exception.RelationshipRepositoryNotFoundException) ArrayList(java.util.ArrayList) ExceptionMapperRegistry(io.crnk.core.engine.internal.exception.ExceptionMapperRegistry) ErrorData(io.crnk.core.engine.document.ErrorData) ErrorResponse(io.crnk.core.engine.error.ErrorResponse)

Aggregations

ExceptionMapper (io.crnk.core.engine.error.ExceptionMapper)6 ErrorResponse (io.crnk.core.engine.error.ErrorResponse)5 Optional (io.crnk.core.utils.Optional)5 JsonApiExceptionMapper (io.crnk.core.engine.error.JsonApiExceptionMapper)4 ErrorData (io.crnk.core.engine.document.ErrorData)3 Test (org.junit.Test)3 ExceptionMapperRegistry (io.crnk.core.engine.internal.exception.ExceptionMapperRegistry)2 ObjectMapper (com.fasterxml.jackson.databind.ObjectMapper)1 ClientException (io.crnk.client.ClientException)1 Document (io.crnk.core.engine.document.Document)1 ResourceRepositoryInformation (io.crnk.core.engine.information.repository.ResourceRepositoryInformation)1 ResourceField (io.crnk.core.engine.information.resource.ResourceField)1 ResourceInformation (io.crnk.core.engine.information.resource.ResourceInformation)1 RelationshipRepositoryAdapter (io.crnk.core.engine.internal.repository.RelationshipRepositoryAdapter)1 ResourceRepositoryAdapter (io.crnk.core.engine.internal.repository.ResourceRepositoryAdapter)1 PreconditionUtil (io.crnk.core.engine.internal.utils.PreconditionUtil)1 QueryAdapter (io.crnk.core.engine.query.QueryAdapter)1 RelationshipRepositoryNotFoundException (io.crnk.core.exception.RelationshipRepositoryNotFoundException)1 ResourceFieldNotFoundException (io.crnk.core.exception.ResourceFieldNotFoundException)1 ModuleRegistry (io.crnk.core.module.ModuleRegistry)1