use of io.crnk.core.engine.dispatcher.RequestDispatcher in project crnk-framework by crnk-project.
the class HttpRequestProcessorImplTest method shouldMapExceptionToErrorResponseIfMapperIsAvailable.
@Test
public void shouldMapExceptionToErrorResponseIfMapperIsAvailable() throws Exception {
ControllerRegistry controllerRegistry = mock(ControllerRegistry.class);
// noinspection unchecked
when(controllerRegistry.getController(any(JsonPath.class), anyString())).thenThrow(IllegalStateException.class);
QuerySpecAdapterBuilder queryAdapterBuilder = new QuerySpecAdapterBuilder(new DefaultQuerySpecDeserializer(), moduleRegistry);
RequestDispatcher requestDispatcher = new HttpRequestProcessorImpl(moduleRegistry, controllerRegistry, ExceptionMapperRegistryTest.exceptionMapperRegistry, queryAdapterBuilder);
Response response = requestDispatcher.dispatchRequest("tasks", null, null, null, null);
assertThat(response).isNotNull();
assertThat(response.getHttpStatus()).isEqualTo(HttpStatus.BAD_REQUEST_400);
}
use of io.crnk.core.engine.dispatcher.RequestDispatcher in project crnk-framework by crnk-project.
the class CrnkBootTest method boot.
@Test
public void boot() {
CrnkBoot boot = new CrnkBoot();
boot.setDefaultServiceUrlProvider(new ServiceUrlProvider() {
@Override
public String getUrl() {
return "http://127.0.0.1";
}
});
boot.setServiceDiscovery(new ReflectionsServiceDiscovery(MockConstants.TEST_MODELS_PACKAGE));
boot.addModule(new SimpleModule("test"));
boot.boot();
RequestDispatcher requestDispatcher = boot.getRequestDispatcher();
ResourceRegistry resourceRegistry = boot.getResourceRegistry();
RegistryEntry taskEntry = resourceRegistry.getEntry(Task.class);
Assert.assertNotEquals(0, taskEntry.getRelationshipEntries().size());
ResourceRepositoryAdapter<?, ?> repositoryAdapter = taskEntry.getResourceRepository(null);
Assert.assertNotNull(repositoryAdapter.getResourceRepository());
JsonApiResponse response = repositoryAdapter.findAll(new QueryParamsAdapter(taskEntry.getResourceInformation(), new QueryParams(), boot.getModuleRegistry()));
Assert.assertNotNull(response);
Assert.assertNotNull(requestDispatcher);
ServiceDiscovery serviceDiscovery = boot.getServiceDiscovery();
Assert.assertNotNull(serviceDiscovery);
Assert.assertNotNull(boot.getModuleRegistry());
Assert.assertNotNull(boot.getExceptionMapperRegistry());
List<Module> modules = boot.getModuleRegistry().getModules();
Assert.assertEquals(4, modules.size());
boot.setDefaultPageLimit(20L);
boot.setMaxPageLimit(100L);
Assert.assertEquals(1, boot.getPagingBehaviors().size());
Assert.assertTrue(boot.getPagingBehaviors().get(0) instanceof OffsetLimitPagingBehavior);
}
use of io.crnk.core.engine.dispatcher.RequestDispatcher in project crnk-framework by crnk-project.
the class OperationsModule method fetchUpToDateResponses.
protected void fetchUpToDateResponses(List<OrderedOperation> orderedOperations, OperationResponse[] responses) {
RequestDispatcher requestDispatcher = moduleContext.getRequestDispatcher();
// get current set of resources after all the updates have been applied
for (OrderedOperation orderedOperation : orderedOperations) {
Operation operation = orderedOperation.getOperation();
OperationResponse operationResponse = responses[orderedOperation.getOrdinal()];
boolean isPost = operation.getOp().equalsIgnoreCase(HttpMethod.POST.toString());
boolean isPatch = operation.getOp().equalsIgnoreCase(HttpMethod.PATCH.toString());
if (isPost || isPatch) {
Resource resource = operationResponse.getSingleData().get();
String path = resource.getType() + "/" + resource.getId();
String method = HttpMethod.GET.toString();
RepositoryMethodParameterProvider parameterProvider = null;
Map<String, Set<String>> parameters = new HashMap<>();
parameters.put("include", getLoadedRelationshipNames(resource));
Response response = requestDispatcher.dispatchRequest(path, method, parameters, parameterProvider, null);
copyDocument(operationResponse, response.getDocument());
operationResponse.setIncluded(null);
}
}
}
use of io.crnk.core.engine.dispatcher.RequestDispatcher in project crnk-framework by crnk-project.
the class OperationsModule method executeOperation.
protected OperationResponse executeOperation(Operation operation) {
RequestDispatcher requestDispatcher = moduleContext.getRequestDispatcher();
String path = OperationParameterUtils.parsePath(operation.getPath());
Map<String, Set<String>> parameters = OperationParameterUtils.parseParameters(operation.getPath());
String method = operation.getOp();
RepositoryMethodParameterProvider parameterProvider = null;
Document requestBody = new Document();
requestBody.setData((Nullable) Nullable.of(operation.getValue()));
Response response = requestDispatcher.dispatchRequest(path, method, parameters, parameterProvider, requestBody);
OperationResponse operationResponse = new OperationResponse();
operationResponse.setStatus(response.getHttpStatus());
copyDocument(operationResponse, response.getDocument());
return operationResponse;
}
use of io.crnk.core.engine.dispatcher.RequestDispatcher in project crnk-framework by crnk-project.
the class JsonApiRequestProcessor method process.
@Override
public void process(HttpRequestContext requestContext) throws IOException {
if (isJsonApiRequest(requestContext, isAcceptingPlainJson())) {
ResourceRegistry resourceRegistry = moduleContext.getResourceRegistry();
RequestDispatcher requestDispatcher = moduleContext.getRequestDispatcher();
String path = requestContext.getPath();
JsonPath jsonPath = new PathBuilder(resourceRegistry).build(path);
Map<String, Set<String>> parameters = requestContext.getRequestParameters();
String method = requestContext.getMethod();
if (jsonPath instanceof ActionPath) {
// inital implementation, has to improve
requestDispatcher.dispatchAction(path, method, parameters);
} else if (jsonPath != null) {
byte[] requestBody = requestContext.getRequestBody();
Document document = null;
if (requestBody != null && requestBody.length > 0) {
ObjectMapper objectMapper = moduleContext.getObjectMapper();
try {
document = objectMapper.readerFor(Document.class).readValue(requestBody);
} catch (JsonProcessingException e) {
final String message = "Json Parsing failed";
setResponse(requestContext, buildBadRequestResponse(message, e.getMessage()));
LOGGER.error(message, e);
return;
}
}
RepositoryMethodParameterProvider parameterProvider = requestContext.getRequestParameterProvider();
Response crnkResponse = requestDispatcher.dispatchRequest(path, method, parameters, parameterProvider, document);
setResponse(requestContext, crnkResponse);
} else {
// no repositories invoked, we do nothing
}
}
}
Aggregations