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(); }
@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)); }
private ExecutionResult wrapWithRootFieldName(ExecutionStrategyParameters parameters, ExecutionResult executionResult) { String rootFieldName = getRootFieldName(parameters); return new ExecutionResultImpl( singletonMap(rootFieldName, executionResult.getData()), executionResult.getErrors() ); }
@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)); }
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(); } }
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; }
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; }
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 }
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(); } }
@Test public void queryingFieldsFromApiEntityFetcher_valueIsDeterminedByApiEntity() { GraphQLObjectType object = GraphQLAnnotations.object(Query.class); GraphQLSchema schema = newSchema().query(object).build(); ExecutionResult result = GraphQL.newGraphQL(schema).build().execute("query { apiField { a b } }"); assertTrue(result.getErrors().isEmpty()); assertEquals(((Map<String, Map<String, Integer>>) result.getData()).get("apiField").get("a").toString(), "1"); assertEquals(((Map<String, Map<String, Integer>>) result.getData()).get("apiField").get("b").toString(), "2"); }
@Test public void queryWithRecursion() { GraphQLSchema schema = newSchema().query(GraphQLAnnotations.object(QueryRecursion.class)).build(); GraphQL graphQL = GraphQL.newGraphQL(schema).build(); ExecutionResult result = graphQL.execute("{ object { value(input:{key:\"test\"}) } }", new QueryRecursion()); assertTrue(result.getErrors().isEmpty()); assertEquals(((Map<String, Map<String, String>>) result.getData()).get("object").get("value"), "testa"); result = graphQL.execute("{ object { value(input:{rec:{key:\"test\"}}) } }", new QueryRecursion()); assertTrue(result.getErrors().isEmpty()); assertEquals(((Map<String, Map<String, String>>) result.getData()).get("object").get("value"), "rectesta"); }
@Test public void queryingOneCanonizedFieldNotAnnotatedWithGraphQLInvokeDetached_valueIsDeterminedByEntity() { GraphQLObjectType object = GraphQLAnnotations.object(Query.class); GraphQLSchema schema = newSchema().query(object).build(); ExecutionResult result = GraphQL.newGraphQL(schema).build().execute("query { field { canonizedType { m } } }"); assertTrue(result.getErrors().isEmpty()); assertEquals(((Map<String, Map<String, Map<String, Integer>>>) result.getData()).get("field").get("canonizedType").get("m").toString(), "5"); }
@Test public void fetchTestMappedObject_assertNameIsMappedFromDBObject() { GraphQLObjectType object = GraphQLAnnotations.object(TestQuery.class); GraphQLSchema schema = newSchema().query(object).build(); ExecutionResult result = GraphQL.newGraphQL(schema).build().execute("{object {name aaa}}"); assertTrue(result.getErrors().isEmpty()); assertEquals(((LinkedHashMap) (((LinkedHashMap) result.getData()).get("object"))).get("name"), "test"); assertEquals(((LinkedHashMap) (((LinkedHashMap) result.getData()).get("object"))).get("aaa"), "test"); }
@Test public void unionQuery_returnTypeIsComputer_getComputer() { GraphQLSchema schema = newSchema().query(GraphQLAnnotations.object(Query.class)).build(); GraphQL graphQL = GraphQL.newGraphQL(schema).build(); String query = "{ getHardwareComputer{ ... on Computer {name}, ... on Screen{resolution}} }"; ExecutionResult result = graphQL.execute(query); assertTrue(result.getErrors().isEmpty()); assertEquals(((Map<String, Map<String, String>>) result.getData()).get("getHardwareComputer").get("name"), "MyComputer"); }
@Test public void unionQuery_returnTypeIsScreen_getScreen() { GraphQLSchema schema = newSchema().query(GraphQLAnnotations.object(Query.class)).build(); GraphQL graphQL = GraphQL.newGraphQL(schema).build(); String query = "{ getHardwareScreen{ ... on Computer {name}, ... on Screen{resolution}} }"; ExecutionResult result = graphQL.execute(query); assertTrue(result.getErrors().isEmpty()); assertEquals(((Map<String, Map<String, String>>) result.getData()).get("getHardwareScreen").get("resolution"), 10); }
@Test public void queryName_directivesProvidedToRegistry_wiringIsActivated() throws Exception { GraphQLDirective upperCase = GraphQLAnnotations.directive(UpperCase.class); GraphQLObjectType object = GraphQLAnnotations.object(Query.class, upperCase); GraphQLSchema schema = newSchema().query(object).build(); ExecutionResult result = GraphQL.newGraphQL(schema).build().execute("query { name }"); assertTrue(result.getErrors().isEmpty()); assertEquals(((Map<String, String>) result.getData()).get("name").toString(), "YARIN"); }
@Test public void queryField() { GraphQLObjectType object = GraphQLAnnotations.object(TestField.class); GraphQLSchema schema = newSchema().query(object).build(); ExecutionResult result = GraphQL.newGraphQL(schema).build().execute("{field1}", new TestField()); assertTrue(result.getErrors().isEmpty()); assertEquals(((Map<String, String>) result.getData()).get("field1"), "test"); }
@Test public void queryEnum() { GraphQLObjectType object = GraphQLAnnotations.object(EnumTest.class); GraphQLSchema schema = newSchema().query(object).build(); GraphQL graphQL = GraphQL.newGraphQL(schema).build(); ExecutionResult result = graphQL.execute("{e}", new EnumTest(EnumTest.E.B)); assertTrue(result.getErrors().isEmpty()); Map<String, Object> v = (Map<String, Object>) result.getData(); assertEquals(v.get("e"), "B"); }
@Test public void complexInputObjectArgument() { GraphQLObjectType object = GraphQLAnnotations.object(TestObjectInput.class); GraphQLArgument argument = object.getFieldDefinition("test2").getArgument("arg"); assertTrue(argument.getType() instanceof GraphQLInputObjectType); assertEquals(argument.getName(), "arg"); GraphQLSchema schema = newSchema().query(object).build(); ExecutionResult result = GraphQL.newGraphQL(schema).build().execute("{ test2(arg: {inputs:[{ a:\"ok\", b:2 }]}, other:0) }", new TestObjectInput()); assertTrue(result.getErrors().isEmpty()); Map<String, Object> v = result.getData(); assertEquals(v.get("test2"), "ok"); }
@Test public void queryNameWithFalse_directivesProvidedToRegistry_wiringIsActivated() throws Exception { GraphQLDirective upperCase = newDirective().name("upperCase").argument(builder -> builder.name("isActive").type(GraphQLBoolean)) .validLocations(Introspection.DirectiveLocation.FIELD_DEFINITION).build(); GraphQLObjectType object = GraphQLAnnotations.object(Query.class, upperCase); GraphQLSchema schema = newSchema().query(object).build(); ExecutionResult result = GraphQL.newGraphQL(schema).build().execute("query { nameWithFalse }"); assertTrue(result.getErrors().isEmpty()); assertEquals(((Map<String, String>) result.getData()).get("nameWithFalse").toString(), "yarin"); }