public Response getGraphQLResponse(String query, Map<String, Object> variables, String operationName) { ExecutionResult executionResult = graphQL.execute(query, operationName, null, variables); Response.ResponseBuilder res = Response.status(Response.Status.OK); HashMap<String, Object> content = new HashMap<>(); if (!executionResult.getErrors().isEmpty()) { res = Response.status(Response.Status.INTERNAL_SERVER_ERROR); content.put("errors", executionResult.getErrors()); } if (executionResult.getData() != null) { content.put("data", executionResult.getData()); } return res.entity(content).build(); }
private void returnAsJson(HttpServletResponse response, ExecutionResult executionResult) throws IOException { response.setContentType("application/json"); response.setStatus(HttpServletResponse.SC_OK); JsonKit.toJson(response, executionResult.toSpecification()); }
@Override public CompletableFuture<ExecutionResult> instrumentExecutionResult(ExecutionResult executionResult, InstrumentationExecutionParameters parameters) { Map<Object, Object> currentExt = executionResult.getExtensions(); TracingSupport tracingSupport = parameters.getInstrumentationState(); Map<Object, Object> tracingMap = new LinkedHashMap<>(); tracingMap.putAll(currentExt == null ? Collections.emptyMap() : currentExt); tracingMap.put("tracing", tracingSupport.snapshotTracingData()); return CompletableFuture.completedFuture(new ExecutionResultImpl(executionResult.getData(), executionResult.getErrors(), tracingMap)); }
/** * Returns a IDL Document that represents the schema as defined by the introspection execution result * * @param introspectionResult the result of an introspection query on a schema * * @return a IDL Document of the schema */ public Document createSchemaDefinition(ExecutionResult introspectionResult) { Map<String, Object> introspectionResultMap = introspectionResult.getData(); return createSchemaDefinition(introspectionResultMap); }
private CompletableFuture<ExecutionResult> execute(ExecutionInput executionInput, Document document, GraphQLSchema graphQLSchema, InstrumentationState instrumentationState) { String query = executionInput.getQuery(); String operationName = executionInput.getOperationName(); Object context = executionInput.getContext(); Execution execution = new Execution(); ExecutionId executionId = idProvider.provide(query, operationName, context); log.debug("Executing '{}'. operation name: '{}'. query: '{}'. variables '{}'", executionId, executionInput.getOperationName(), executionInput.getQuery(), executionInput.getVariables()); CompletableFuture<ExecutionResult> future = execution.execute(executionStrategy, document, graphQLSchema, executionId, executionInput, instrumentationState); future = future.whenComplete((result, throwable) -> { if (throwable != null) { log.error(String.format("Execution '%s' threw exception when executing : query : '%s'. variables '%s'", executionId, executionInput.getQuery(), executionInput.getVariables()), throwable); } else { int errorCount = result.getErrors().size(); if (errorCount > 0) { log.debug("Execution '{}' completed with '{}' errors", executionId, errorCount); } else { log.debug("Execution '{}' completed with zero errors", executionId); } } }); return future; }
Map<Object, Object> extensions = initialResult.getExtensions(); Publisher<ExecutionResult> deferredResults = (Publisher<ExecutionResult>) extensions.get(GraphQL.DEFERRED_RESULTS);
@Override public void onNext(ExecutionResult er) { // // process the next stock price // processStockPriceChange(er.getData()); // // ask the publisher for one more item please // subscriptionRef.get().request(1); }
private CompletableFuture<ExecutionResult> execute(ExecutionInput executionInput, Document document, GraphQLSchema graphQLSchema, InstrumentationState instrumentationState) { String query = executionInput.getQuery(); String operationName = executionInput.getOperationName(); Object context = executionInput.getContext(); Execution execution = new Execution(queryStrategy, mutationStrategy, subscriptionStrategy, instrumentation); ExecutionId executionId = idProvider.provide(query, operationName, context); log.debug("Executing '{}'. operation name: '{}'. query: '{}'. variables '{}'", executionId, executionInput.getOperationName(), executionInput.getQuery(), executionInput.getVariables()); CompletableFuture<ExecutionResult> future = execution.execute(document, graphQLSchema, executionId, executionInput, instrumentationState); future = future.whenComplete((result, throwable) -> { if (throwable != null) { log.error(String.format("Execution '%s' threw exception when executing : query : '%s'. variables '%s'", executionId, executionInput.getQuery(), executionInput.getVariables()), throwable); } else { int errorCount = result.getErrors().size(); if (errorCount > 0) { log.debug("Execution '{}' completed with '{}' errors", executionId, errorCount); } else { log.debug("Execution '{}' completed with zero errors", executionId); } } }); return future; }
@Override public CompletableFuture<ExecutionResult> instrumentExecutionResult(ExecutionResult executionResult, InstrumentationExecutionParameters parameters) { if (!options.isIncludeStatistics()) { return CompletableFuture.completedFuture(executionResult); } DataLoaderDispatcherInstrumentationState state = parameters.getInstrumentationState(); Map<Object, Object> currentExt = executionResult.getExtensions(); Map<Object, Object> statsMap = new LinkedHashMap<>(); statsMap.putAll(currentExt == null ? Collections.emptyMap() : currentExt); Map<Object, Object> dataLoaderStats = buildStatsMap(state); statsMap.put("dataloader", dataLoaderStats); log.debug("Data loader stats : {}", dataLoaderStats); return CompletableFuture.completedFuture(new ExecutionResultImpl(executionResult.getData(), executionResult.getErrors(), statsMap)); }
protected BiConsumer<List<ExecutionResult>, Throwable> handleResults(ExecutionContext executionContext, List<String> fieldNames, CompletableFuture<ExecutionResult> overallResult) { return (List<ExecutionResult> results, Throwable exception) -> { if (exception != null) { handleNonNullException(executionContext, overallResult, exception); return; } Map<String, Object> resolvedValuesByField = new LinkedHashMap<>(); int ix = 0; for (ExecutionResult executionResult : results) { String fieldName = fieldNames.get(ix++); resolvedValuesByField.put(fieldName, executionResult.getData()); } overallResult.complete(new ExecutionResultImpl(resolvedValuesByField, executionContext.getErrors())); }; } }
@Override public void handle( String target, Request request, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws IOException, ServletException { if ("/graphql".equals(target)) { request.setHandled(true); Map<String, Object> json = readJson(httpServletRequest); String query = (String) json.get("query"); if (query == null) { httpServletResponse.setStatus(400); return; } String operationName = (String) json.get("operationName"); Map<String, Object> variables = getVariables(json.get("variables")); ExecutionInput executionInput = ExecutionInput.newExecutionInput() .query(query) .operationName(operationName) .variables(variables) .context(new Object()) .build(); ExecutionResult executionResult = GRAPHQL.execute(executionInput); httpServletResponse.setContentType("application/json"); httpServletResponse.setStatus(HttpServletResponse.SC_OK); GSON.toJson(executionResult.toSpecification(), httpServletResponse.getWriter()); } }
@Test public void methodList() { GraphQLObjectType object = GraphQLAnnotations.object(TestConnections.class); GraphQLSchema schema = newSchema().query(object).build(); GraphQL graphQL = GraphQL.newGraphQL(schema).build(); ExecutionResult result = graphQL.execute("{ getObjs(first: 1) { edges { cursor node { id, val } } } }", new TestConnections(Arrays.asList(new Obj("1", "test"), new Obj("2", "hello"), new Obj("3", "world")))); assertTrue(result.getErrors().isEmpty()); testResult("getObjs", result); }
private static Map<String, Object> introspect(GraphQLSchema schema) { GraphQL gql = GraphQL.newGraphQL(schema).build(); ExecutionResult result = gql.execute(IntrospectionQuery.INTROSPECTION_QUERY); Assert.assertTrue(result.getErrors().size() == 0, "The schema has errors during Introspection"); return result.getData(); } }
public Map<String, Object> convertSanitizedExecutionResult(ExecutionResult executionResult, boolean includeData) { final Map<String, Object> result = new LinkedHashMap<>(); if(includeData) { result.put("data", executionResult.getData()); } if (areErrorsPresent(executionResult)) { result.put("errors", executionResult.getErrors()); } if(executionResult.getExtensions() != null){ result.put("extensions", executionResult.getExtensions()); } return result; }
private void completeValue(ExecutionContext executionContext, Map<String, Object> results, String fieldName, FetchedValue fetchedValue, ExecutionStrategyParameters newParameters) { ExecutionResult resolvedResult = completeField(executionContext, newParameters, fetchedValue).getFieldValue().join(); results.put(fieldName, resolvedResult != null ? resolvedResult.getData() : null); }
public void toSpec() throws Exception { //::FigureM ExecutionResult executionResult = graphQL.execute(executionInput); Map<String, Object> toSpecificationResult = executionResult.toSpecification(); sendAsJson(toSpecificationResult); //::/FigureM }
private void simpleQueryExecution() throws Exception { //::FigureA GraphQLSchema schema = GraphQLSchema.newSchema() .query(queryType) .build(); GraphQL graphQL = GraphQL.newGraphQL(schema) .build(); ExecutionInput executionInput = ExecutionInput.newExecutionInput().query("query { hero { name } }") .build(); ExecutionResult executionResult = graphQL.execute(executionInput); Object data = executionResult.getData(); List<GraphQLError> errors = executionResult.getErrors(); //::/FigureA }
public Map<String, Object> convertSanitizedExecutionResult(ExecutionResult executionResult, boolean includeData) { final Map<String, Object> result = new LinkedHashMap<>(); if(includeData) { result.put("data", executionResult.getData()); } if (areErrorsPresent(executionResult)) { result.put("errors", executionResult.getErrors()); } if(executionResult.getExtensions() != null){ result.put("extensions", executionResult.getExtensions()); } return result; }
private CompletableFuture<ExecutionResult> completeFields(ExecutionContext executionContext, ExecutionStrategyParameters parameters, Map<String, FetchedValue> fetchedValues) { MergedSelectionSet fields = parameters.getFields(); // then for every fetched value, complete it, breath first Map<String, Object> results = new LinkedHashMap<>(); for (String fieldName : fetchedValues.keySet()) { ExecutionStrategyParameters newParameters = newParameters(parameters, fields, fieldName); FetchedValue fetchedValue = fetchedValues.get(fieldName); try { ExecutionResult resolvedResult = completeField(executionContext, newParameters, fetchedValue).getFieldValue().join(); results.put(fieldName, resolvedResult != null ? resolvedResult.getData() : null); } catch (NonNullableFieldWasNullException e) { assertNonNullFieldPrecondition(e); results = null; break; } } return CompletableFuture.completedFuture(new ExecutionResultImpl(results, executionContext.getErrors())); }