|
1 | 1 | package graphql.kickstart.execution; |
2 | 2 |
|
3 | | -import graphql.ExecutionInput; |
4 | 3 | import graphql.ExecutionResult; |
5 | 4 | import graphql.GraphQL; |
6 | 5 | import graphql.kickstart.execution.context.ContextSetting; |
7 | 6 | import graphql.kickstart.execution.input.GraphQLBatchedInvocationInput; |
8 | 7 | import graphql.kickstart.execution.input.GraphQLInvocationInput; |
9 | 8 | import graphql.kickstart.execution.input.GraphQLSingleInvocationInput; |
10 | | -import java.security.AccessController; |
11 | | -import java.security.PrivilegedAction; |
12 | 9 | import java.util.List; |
13 | 10 | import java.util.concurrent.CompletableFuture; |
14 | 11 | import java.util.stream.Collectors; |
15 | | -import javax.security.auth.Subject; |
| 12 | +import lombok.AllArgsConstructor; |
16 | 13 | import lombok.RequiredArgsConstructor; |
17 | 14 |
|
| 15 | +@AllArgsConstructor |
18 | 16 | @RequiredArgsConstructor |
19 | 17 | public class GraphQLInvoker { |
20 | 18 |
|
21 | 19 | private final GraphQL graphQL; |
| 20 | + private GraphQLInvokerProxy proxy = GraphQL::executeAsync; |
| 21 | + |
| 22 | + public CompletableFuture<ExecutionResult> executeAsync(GraphQLSingleInvocationInput invocationInput) { |
| 23 | + return proxy.executeAsync(graphQL, invocationInput.getExecutionInput()); |
| 24 | + } |
22 | 25 |
|
23 | 26 | public GraphQLQueryResult query(GraphQLInvocationInput invocationInput) { |
24 | 27 | if (invocationInput instanceof GraphQLSingleInvocationInput) { |
25 | 28 | return GraphQLQueryResult.create(query((GraphQLSingleInvocationInput) invocationInput)); |
26 | 29 | } |
27 | 30 | GraphQLBatchedInvocationInput batchedInvocationInput = (GraphQLBatchedInvocationInput) invocationInput; |
28 | | - return GraphQLQueryResult.create(query(batchedInvocationInput.getExecutionInputs(), batchedInvocationInput.getContextSetting())); |
| 31 | + return GraphQLQueryResult |
| 32 | + .create(query(batchedInvocationInput.getExecutionInputs(), batchedInvocationInput.getContextSetting())); |
29 | 33 | } |
30 | 34 |
|
31 | 35 | private ExecutionResult query(GraphQLSingleInvocationInput singleInvocationInput) { |
32 | 36 | return executeAsync(singleInvocationInput).join(); |
33 | 37 | } |
34 | 38 |
|
35 | | - public CompletableFuture<ExecutionResult> executeAsync(GraphQLSingleInvocationInput invocationInput) { |
36 | | - if (Subject.getSubject(AccessController.getContext()) == null && invocationInput.getSubject().isPresent()) { |
37 | | - return Subject |
38 | | - .doAs(invocationInput.getSubject().get(), (PrivilegedAction<CompletableFuture<ExecutionResult>>) () -> { |
39 | | - try { |
40 | | - return query(invocationInput.getExecutionInput()); |
41 | | - } catch (Exception e) { |
42 | | - throw new RuntimeException(e); |
43 | | - } |
44 | | - }); |
45 | | - } |
46 | | - |
47 | | - return query(invocationInput.getExecutionInput()); |
48 | | - } |
49 | | - |
50 | | - private CompletableFuture<ExecutionResult> query(ExecutionInput executionInput) { |
51 | | - return graphQL.executeAsync(executionInput); |
52 | | - } |
53 | | - |
54 | 39 | private List<ExecutionResult> query(List<GraphQLSingleInvocationInput> batchedInvocationInput, |
55 | 40 | ContextSetting contextSetting) { |
56 | 41 | // List<ExecutionInput> executionIds = batchedInvocationInput.stream() |
|
0 commit comments