@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()); } }
private PreparsedDocumentEntry parseAndValidate(AtomicReference<ExecutionInput> executionInputRef, GraphQLSchema graphQLSchema, InstrumentationState instrumentationState) { ExecutionInput executionInput = executionInputRef.get(); String query = executionInput.getQuery(); log.debug("Parsing query: '{}'...", query); ParseResult parseResult = parse(executionInput, graphQLSchema, instrumentationState); if (parseResult.isFailure()) { log.warn("Query failed to parse : '{}'", executionInput.getQuery()); return new PreparsedDocumentEntry(parseResult.getException().toInvalidSyntaxError()); } else { final Document document = parseResult.getDocument(); // they may have changed the document and the variables via instrumentation so update the reference to it executionInput = executionInput.transform(builder -> builder.variables(parseResult.getVariables())); executionInputRef.set(executionInput); log.debug("Validating query: '{}'", query); final List<ValidationError> errors = validate(executionInput, document, graphQLSchema, instrumentationState); if (!errors.isEmpty()) { log.warn("Query failed to validate : '{}'", query); return new PreparsedDocumentEntry(errors); } return new PreparsedDocumentEntry(document); } }
.query(query) .operationName(operationName) .variables(variables) .context(dataLoaderRegistry) .build();
/** * This helps you transform the current ExecutionInput object into another one by starting a builder with all * the current values and allows you to transform it how you want. * * @param builderConsumer the consumer code that will be given a builder to transform * * @return a new ExecutionInput object based on calling build on that builder */ public ExecutionInput transform(Consumer<Builder> builderConsumer) { Builder builder = new Builder() .query(this.query) .operationName(this.operationName) .context(this.context) .root(this.root) .dataLoaderRegistry(this.dataLoaderRegistry) .variables(this.variables); builderConsumer.accept(builder); return builder.build(); }
@Override @Transactional(TxType.SUPPORTS) public ExecutionResult execute(String query, Map<String, Object> arguments) { // Need to inject variables in context to support parameter bindings in reverse queries Map<String, Object> context = Collections.singletonMap("variables", arguments); ExecutionInput executionInput = ExecutionInput.newExecutionInput() .query(query) .variables(arguments) .root(context) .context(context) .build(); if (arguments == null) return graphQL.execute(query); else return graphQL.execute(executionInput); }
private ExecutionInput input(GraphQLRequest request, HttpServletRequest raw) { ExecutionInput.Builder inputBuilder = ExecutionInput.newExecutionInput() .query(request.getQuery()) .operationName(request.getOperationName()) .variables(request.getVariables()) .context(contextFactory.createGlobalContext(GlobalContextFactoryParams.builder() .withGraphQLRequest(request) .withHttpRequest(raw) .build())); if (dataLoaderRegistryFactory != null) { inputBuilder.dataLoaderRegistry(dataLoaderRegistryFactory.createDataLoaderRegistry()); } return inputBuilder.build(); } }
private ExecutionInput input(GraphQLRequest request, HttpServletRequest raw) { ExecutionInput.Builder inputBuilder = ExecutionInput.newExecutionInput() .query(request.getQuery()) .operationName(request.getOperationName()) .variables(request.getVariables()) .context(contextFactory.createGlobalContext(GlobalContextFactoryParams.builder() .withGraphQLRequest(request) .withHttpRequest(raw) .build())); if (dataLoaderRegistryFactory != null) { inputBuilder.dataLoaderRegistry(dataLoaderRegistryFactory.createDataLoaderRegistry()); } return inputBuilder.build(); } }
@PostMapping(value="/graphql",consumes="application/json") public ExecutionResult graphql (@RequestBody Map<String,Object> aQuery) { long now = System.currentTimeMillis(); ExecutionResult result = graphql.execute(ExecutionInput.newExecutionInput() .query((String)aQuery.get("query")) .variables((Map<String, Object>) aQuery.get("variables")) .build()); log.debug("{} [{}ms]",aQuery.get("query"),(System.currentTimeMillis()-now)); return result; }
@Override public CompletableFuture<ExecutionResult> invoke(GraphQLInvocationData invocationData, WebRequest webRequest) { ExecutionInput executionInput = ExecutionInput.newExecutionInput() .query(invocationData.getQuery()) .operationName(invocationData.getOperationName()) .variables(invocationData.getVariables()) .build(); return graphQL.executeAsync(executionInput); }
private ExecutionResult graphql (@RequestBody Map<String,Object> aQuery) { long now = System.currentTimeMillis(); ExecutionResult result = graphql.execute(ExecutionInput.newExecutionInput() .query((String)aQuery.get("query")) .variables((Map<String, Object>) aQuery.get("variables")) .build()); log.debug("{} [{}ms]",aQuery.get("query"),(System.currentTimeMillis()-now)); return result; }
@Override public Mono<ExecutionResult> invoke(GraphQLInvocationData invocationData, ServerWebExchange serverWebExchange) { ExecutionInput executionInput = ExecutionInput.newExecutionInput() .query(invocationData.getQuery()) .operationName(invocationData.getOperationName()) .variables(invocationData.getVariables()) .build(); return Mono.fromCompletionStage(graphQL.executeAsync(executionInput)); }
@Override public Mono<ExecutionResult> invoke(GraphQLInvocationData invocationData, ServerWebExchange serverWebExchange) { ExecutionInput executionInput = ExecutionInput.newExecutionInput() .query(invocationData.getQuery()) .operationName(invocationData.getOperationName()) .variables(invocationData.getVariables()) .build(); return Mono.fromCompletionStage(graphQL.executeAsync(executionInput)); }
@Override public CompletableFuture<ExecutionResult> invoke(GraphQLInvocationData invocationData, WebRequest webRequest) { ExecutionInput executionInput = ExecutionInput.newExecutionInput() .query(invocationData.getQuery()) .operationName(invocationData.getOperationName()) .variables(invocationData.getVariables()) .build(); return graphQL.executeAsync(executionInput); }
protected ExecutionInput createExecutionInput(GraphQLRequest graphQLRequest) { return ExecutionInput.newExecutionInput() .query(graphQLRequest.getQuery()) .operationName(graphQLRequest.getOperationName()) .context(context) .root(root) .variables(graphQLRequest.getVariables()) .dataLoaderRegistry(context.getDataLoaderRegistry().orElse(new DataLoaderRegistry())) .build(); }
.query(parameters.getQuery()) .operationName(parameters.getOperationName()) .variables(parameters.getVariables()) .dataLoaderRegistry(dataLoaderRegistry)
ExecutionInput.newExecutionInput() .query(request.getQuery()) .variables(variables) .context(context) .build();
.query(query) .operationName(operationName) .variables(variables) .context(dataLoaderRegistry) .build();
/** * Info: This sets context = root to be backwards compatible. * * @param query the query/mutation/subscription * @param context custom object provided to each {@link graphql.schema.DataFetcher} * @param variables variable values uses as argument * * @return an {@link ExecutionResult} which can include errors * * @deprecated Use {@link #execute(ExecutionInput)} */ @Deprecated public ExecutionResult execute(String query, Object context, Map<String, Object> variables) { ExecutionInput executionInput = ExecutionInput.newExecutionInput() .query(query) .context(context) .root(context) // This we are doing do be backwards compatible .variables(variables) .build(); return execute(executionInput); }
/** * Info: This sets context = root to be backwards compatible. * * @param query the query/mutation/subscription * @param operationName name of the operation to execute * @param context custom object provided to each {@link graphql.schema.DataFetcher} * @param variables variable values uses as argument * * @return an {@link ExecutionResult} which can include errors * * @deprecated Use {@link #execute(ExecutionInput)} */ @Deprecated public ExecutionResult execute(String query, String operationName, Object context, Map<String, Object> variables) { ExecutionInput executionInput = ExecutionInput.newExecutionInput() .query(query) .operationName(operationName) .context(context) .root(context) // This we are doing do be backwards compatible .variables(variables) .build(); return execute(executionInput); }
/** * This helps you transform the current ExecutionInput object into another one by starting a builder with all * the current values and allows you to transform it how you want. * * @param builderConsumer the consumer code that will be given a builder to transform * * @return a new ExecutionInput object based on calling build on that builder */ public ExecutionInput transform(Consumer<Builder> builderConsumer) { Builder builder = new Builder() .query(this.query) .operationName(this.operationName) .context(this.context) .root(this.root) .dataLoaderRegistry(this.dataLoaderRegistry) .variables(this.variables); builderConsumer.accept(builder); return builder.build(); }