Skip to content

Commit 2316944

Browse files
committed
Code review fixes.
1 parent 4d25d64 commit 2316944

File tree

5 files changed

+99
-43
lines changed

5 files changed

+99
-43
lines changed

graphql-java-servlet/src/main/java/graphql/kickstart/servlet/AbstractGraphQLHttpServlet.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import graphql.kickstart.execution.GraphQLQueryInvoker;
88
import graphql.kickstart.execution.GraphQLRequest;
99
import graphql.kickstart.execution.input.GraphQLSingleInvocationInput;
10+
import graphql.kickstart.servlet.cache.CachingHttpRequestHandlerImpl;
1011
import graphql.schema.GraphQLFieldDefinition;
1112
import graphql.kickstart.servlet.core.GraphQLMBean;
1213
import graphql.kickstart.servlet.core.GraphQLServletListener;
@@ -83,7 +84,11 @@ protected GraphQLConfiguration getConfiguration() {
8384
public void init() {
8485
if (configuration == null) {
8586
this.configuration = getConfiguration();
86-
this.requestHandler = new HttpRequestHandlerImpl(configuration);
87+
if (configuration.getResponseCacheManager() != null) {
88+
this.requestHandler = new CachingHttpRequestHandlerImpl(configuration);
89+
} else {
90+
this.requestHandler = new HttpRequestHandlerImpl(configuration);
91+
}
8792
}
8893
}
8994

graphql-java-servlet/src/main/java/graphql/kickstart/servlet/HttpRequestHandlerImpl.java

Lines changed: 15 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -3,25 +3,23 @@
33
import graphql.GraphQLException;
44
import graphql.kickstart.execution.GraphQLInvoker;
55
import graphql.kickstart.execution.GraphQLQueryResult;
6+
import graphql.kickstart.servlet.input.BatchInputPreProcessResult;
7+
import graphql.kickstart.servlet.input.BatchInputPreProcessor;
68
import graphql.kickstart.execution.input.GraphQLBatchedInvocationInput;
79
import graphql.kickstart.execution.input.GraphQLInvocationInput;
810
import graphql.kickstart.execution.input.GraphQLSingleInvocationInput;
9-
import graphql.kickstart.servlet.cache.CacheReader;
10-
import graphql.kickstart.servlet.input.BatchInputPreProcessResult;
11-
import graphql.kickstart.servlet.input.BatchInputPreProcessor;
12-
import lombok.extern.slf4j.Slf4j;
13-
11+
import java.io.IOException;
1412
import javax.servlet.http.HttpServletRequest;
1513
import javax.servlet.http.HttpServletResponse;
16-
import java.io.IOException;
14+
import lombok.extern.slf4j.Slf4j;
1715

1816
@Slf4j
19-
class HttpRequestHandlerImpl implements HttpRequestHandler {
17+
public class HttpRequestHandlerImpl implements HttpRequestHandler {
2018

2119
private final GraphQLConfiguration configuration;
2220
private final GraphQLInvoker graphQLInvoker;
2321

24-
HttpRequestHandlerImpl(GraphQLConfiguration configuration) {
22+
public HttpRequestHandlerImpl(GraphQLConfiguration configuration) {
2523
this.configuration = configuration;
2624
graphQLInvoker = configuration.getGraphQLInvoker();
2725
}
@@ -48,32 +46,25 @@ public void handle(HttpServletRequest request, HttpServletResponse response) thr
4846
}
4947
}
5048

51-
private void execute(GraphQLInvocationInput invocationInput, HttpServletRequest request,
49+
protected void execute(GraphQLInvocationInput invocationInput, HttpServletRequest request,
5250
HttpServletResponse response) {
5351
try {
54-
// try to return value from cache if cache manager was set, otherwise processed the query
55-
boolean returnedFromCache = configuration.getResponseCacheManager() != null &&
56-
!CacheReader.responseFromCache(invocationInput, request, response, configuration.getResponseCacheManager());
52+
GraphQLQueryResult queryResult = invoke(invocationInput, request, response);
5753

58-
if (!returnedFromCache) {
59-
GraphQLQueryResult queryResult = invoke(invocationInput, request, response);
60-
61-
QueryResponseWriter queryResponseWriter = QueryResponseWriter.createWriter(
62-
queryResult,
63-
configuration.getObjectMapper(),
64-
configuration.getSubscriptionTimeout(),
65-
invocationInput,
66-
configuration.getResponseCacheManager()
67-
);
68-
queryResponseWriter.write(request, response);
69-
}
54+
QueryResponseWriter queryResponseWriter = createWriter(invocationInput, queryResult);
55+
queryResponseWriter.write(request, response);
7056
} catch (Throwable t) {
7157
response.setStatus(STATUS_BAD_REQUEST);
7258
log.info("Bad GET request: path was not \"/schema.json\" or no query variable named \"query\" given");
7359
log.debug("Possibly due to exception: ", t);
7460
}
7561
}
7662

63+
protected QueryResponseWriter createWriter(GraphQLInvocationInput invocationInput, GraphQLQueryResult queryResult) {
64+
return QueryResponseWriter.createWriter(queryResult, configuration.getObjectMapper(),
65+
configuration.getSubscriptionTimeout());
66+
}
67+
7768
private GraphQLQueryResult invoke(GraphQLInvocationInput invocationInput, HttpServletRequest request,
7869
HttpServletResponse response) {
7970
if (invocationInput instanceof GraphQLSingleInvocationInput) {

graphql-java-servlet/src/main/java/graphql/kickstart/servlet/QueryResponseWriter.java

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,45 @@
11
package graphql.kickstart.servlet;
22

3-
import graphql.kickstart.execution.GraphQLQueryResult;
43
import graphql.kickstart.execution.GraphQLObjectMapper;
4+
import graphql.kickstart.execution.GraphQLQueryResult;
55
import graphql.kickstart.execution.input.GraphQLInvocationInput;
66
import graphql.kickstart.servlet.cache.CachingQueryResponseWriter;
77
import graphql.kickstart.servlet.cache.GraphQLResponseCacheManager;
88

9-
import java.io.IOException;
10-
import java.util.Objects;
119
import javax.servlet.http.HttpServletRequest;
1210
import javax.servlet.http.HttpServletResponse;
11+
import java.io.IOException;
12+
import java.util.Objects;
1313

1414
public interface QueryResponseWriter {
1515

1616
static QueryResponseWriter createWriter(
1717
GraphQLQueryResult result,
1818
GraphQLObjectMapper graphQLObjectMapper,
19-
long subscriptionTimeout,
20-
GraphQLInvocationInput invocationInput,
21-
GraphQLResponseCacheManager responseCache
19+
long subscriptionTimeout
2220
) {
2321
Objects.requireNonNull(result, "GraphQL query result cannot be null");
2422

25-
QueryResponseWriter writer;
26-
2723
if (result.isBatched()) {
28-
writer = new BatchedQueryResponseWriter(result.getResults(), graphQLObjectMapper);
24+
return new BatchedQueryResponseWriter(result.getResults(), graphQLObjectMapper);
2925
} else if (result.isAsynchronous()) {
30-
writer = new SingleAsynchronousQueryResponseWriter(result.getResult(), graphQLObjectMapper, subscriptionTimeout);
26+
return new SingleAsynchronousQueryResponseWriter(result.getResult(), graphQLObjectMapper, subscriptionTimeout);
3127
} else if (result.isError()) {
32-
writer = new ErrorQueryResponseWriter(result.getStatusCode(), result.getMessage());
33-
} else {
34-
writer = new SingleQueryResponseWriter(result.getResult(), graphQLObjectMapper);
28+
return new ErrorQueryResponseWriter(result.getStatusCode(), result.getMessage());
3529
}
30+
return new SingleQueryResponseWriter(result.getResult(), graphQLObjectMapper);
31+
}
3632

33+
static QueryResponseWriter createCacheWriter(
34+
GraphQLQueryResult result,
35+
GraphQLObjectMapper graphQLObjectMapper,
36+
long subscriptionTimeout,
37+
GraphQLInvocationInput invocationInput,
38+
GraphQLResponseCacheManager responseCache
39+
) {
40+
QueryResponseWriter writer = createWriter(result, graphQLObjectMapper, subscriptionTimeout);
3741
if (responseCache != null) {
38-
writer = new CachingQueryResponseWriter(writer, responseCache, invocationInput, result.isError());
42+
return new CachingQueryResponseWriter(writer, responseCache, invocationInput, result.isError());
3943
}
4044
return writer;
4145
}

graphql-java-servlet/src/main/java/graphql/kickstart/servlet/cache/CacheReader.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@ private CacheReader() {
2323
* @throws IOException if can not read value from the cache
2424
*/
2525
public static boolean responseFromCache(GraphQLInvocationInput invocationInput,
26-
HttpServletRequest request,
27-
HttpServletResponse response,
28-
GraphQLResponseCacheManager cacheManager) throws IOException {
26+
HttpServletRequest request,
27+
HttpServletResponse response,
28+
GraphQLResponseCacheManager cacheManager) throws IOException {
2929
CachedResponse cachedResponse = null;
3030
try {
3131
cachedResponse = cacheManager.get(request, invocationInput);
@@ -42,7 +42,7 @@ public static boolean responseFromCache(GraphQLInvocationInput invocationInput,
4242
}
4343

4444
private static void write(HttpServletResponse response, CachedResponse cachedResponse)
45-
throws IOException {
45+
throws IOException {
4646
if (cachedResponse.isError()) {
4747
response.sendError(cachedResponse.getErrorStatusCode(), cachedResponse.getErrorMessage());
4848
} else {
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package graphql.kickstart.servlet.cache;
2+
3+
import graphql.kickstart.execution.GraphQLQueryResult;
4+
import graphql.kickstart.execution.input.GraphQLInvocationInput;
5+
import graphql.kickstart.servlet.GraphQLConfiguration;
6+
import graphql.kickstart.servlet.HttpRequestHandlerImpl;
7+
import graphql.kickstart.servlet.QueryResponseWriter;
8+
import lombok.extern.slf4j.Slf4j;
9+
10+
import javax.servlet.http.HttpServletRequest;
11+
import javax.servlet.http.HttpServletResponse;
12+
import java.io.IOException;
13+
import java.util.Objects;
14+
15+
@Slf4j
16+
public class CachingHttpRequestHandlerImpl extends HttpRequestHandlerImpl {
17+
18+
private final GraphQLConfiguration configuration;
19+
20+
public CachingHttpRequestHandlerImpl(GraphQLConfiguration configuration) {
21+
super(configuration);
22+
Objects.requireNonNull(configuration.getResponseCacheManager(), "Response Cache Manager cannot be null");
23+
this.configuration = configuration;
24+
}
25+
26+
protected void execute(GraphQLInvocationInput invocationInput, HttpServletRequest request,
27+
HttpServletResponse response) {
28+
// try to return value from cache if cache exists, otherwise processed the query
29+
boolean returnedFromCache;
30+
31+
try {
32+
returnedFromCache = !CacheReader.responseFromCache(
33+
invocationInput, request, response, configuration.getResponseCacheManager()
34+
);
35+
} catch (IOException e) {
36+
response.setStatus(STATUS_BAD_REQUEST);
37+
log.warn("unexpected error happened during response from cache", e);
38+
return;
39+
}
40+
41+
if (!returnedFromCache) {
42+
super.execute(invocationInput, request, response);
43+
}
44+
}
45+
46+
protected QueryResponseWriter createWriter(GraphQLInvocationInput invocationInput, GraphQLQueryResult queryResult) {
47+
return QueryResponseWriter.createCacheWriter(
48+
queryResult,
49+
configuration.getObjectMapper(),
50+
configuration.getSubscriptionTimeout(),
51+
invocationInput,
52+
configuration.getResponseCacheManager()
53+
);
54+
}
55+
56+
}

0 commit comments

Comments
 (0)