use of io.crnk.core.repository.response.JsonApiResponse in project crnk-framework by crnk-project.
the class BraveResponseFilterTest method statusCodeOkWhenEmptyErrors.
@Test
public void statusCodeOkWhenEmptyErrors() {
JsonApiResponse response = new JsonApiResponse();
response.setErrors(new ArrayList<ErrorData>());
Mockito.when(filterChain.doFilter(Mockito.any(RepositoryFilterContext.class))).thenReturn(response);
filter.filterRequest(filterContext, filterChain);
Mockito.verify(span, Mockito.times(1)).tag(BraveRepositoryFilter.STATUS_CODE_ANNOTATION, BraveRepositoryFilter.STRING_OK);
}
use of io.crnk.core.repository.response.JsonApiResponse in project crnk-framework by crnk-project.
the class OperationsCall method toResource.
protected Resource toResource(Object object) {
JsonApiResponse response = new JsonApiResponse();
response.setEntity(object);
QuerySpec querySpec = new QuerySpec(object.getClass());
QueryAdapter queryAdapter = new QuerySpecAdapter(querySpec, client.getCrnk().getRegistry());
CrnkClient crnk = client.getCrnk();
DocumentMapper documentMapper = crnk.getDocumentMapper();
Document document = documentMapper.toDocument(response, queryAdapter);
return document.getSingleData().get();
}
use of io.crnk.core.repository.response.JsonApiResponse in project crnk-framework by crnk-project.
the class BraveRepositoryFilter method filterRequest.
@Override
public JsonApiResponse filterRequest(RepositoryFilterContext context, RepositoryRequestFilterChain chain) {
Tracer tracer = tracing.tracer();
RepositoryRequestSpec request = context.getRequest();
String query = BraveUtil.getQuery(request, moduleContext.getResourceRegistry());
Span span = tracer.nextSpan();
span.name(BraveUtil.getSpanName(request));
span.tag(Constants.LOCAL_COMPONENT, COMPONENT_NAME);
span.start();
JsonApiResponse result = null;
Exception exception = null;
try (Tracer.SpanInScope ws = tracer.withSpanInScope(span)) {
result = chain.doFilter(context);
return result;
} catch (RuntimeException e) {
exception = e;
throw e;
} finally {
boolean resultError = result != null && result.getErrors() != null && result.getErrors().iterator().hasNext();
boolean failed = exception != null || resultError;
String status = failed ? STRING_EXCEPTION : STRING_OK;
span.tag(STATUS_CODE_ANNOTATION, status);
writeQuery(span, query);
writeResults(span, result);
span.finish();
}
}
use of io.crnk.core.repository.response.JsonApiResponse in project crnk-framework by crnk-project.
the class JsonApiResponseFilter method filter.
/**
* Creates JSON API responses for custom JAX-RS actions returning Crnk resources.
*/
@Override
public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) throws IOException {
Object response = responseContext.getEntity();
if (response == null) {
if (feature.getBoot().isNullDataResponseEnabled()) {
Document document = new Document();
document.setData(Nullable.nullValue());
responseContext.setEntity(document);
responseContext.setStatus(Response.Status.OK.getStatusCode());
responseContext.getHeaders().put("Content-Type", Collections.singletonList((Object) JsonApiMediaType.APPLICATION_JSON_API));
}
return;
}
// only modify responses which contain a single or a list of Crnk resources
if (isResourceResponse(response)) {
CrnkBoot boot = feature.getBoot();
DocumentMapper documentMapper = boot.getDocumentMapper();
HttpRequestContextProvider httpRequestContextProvider = boot.getModuleRegistry().getHttpRequestContextProvider();
try {
HttpRequestContext context = new HttpRequestContextBaseAdapter(new JaxrsRequestContext(requestContext, feature));
httpRequestContextProvider.onRequestStarted(context);
JsonApiResponse jsonApiResponse = new JsonApiResponse();
jsonApiResponse.setEntity(response);
// use the Crnk document mapper to create a JSON API response
responseContext.setEntity(documentMapper.toDocument(jsonApiResponse, null));
responseContext.getHeaders().put("Content-Type", Collections.singletonList((Object) JsonApiMediaType.APPLICATION_JSON_API));
} finally {
httpRequestContextProvider.onRequestFinished();
}
} else if (isJsonApiResponse(responseContext) && !doNotWrap(response)) {
Document document = new Document();
document.setData(Nullable.of(response));
responseContext.setEntity(document);
}
}
Aggregations