Skip to content

Commit bab4e0e

Browse files
authored
Merge pull request #88 from graphql-java/subscription-support
Subscription support
2 parents f8b68e0 + 00a5d5d commit bab4e0e

39 files changed

+1865
-946
lines changed

build.gradle

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,8 @@ dependencies {
5050
compileOnly 'biz.aQute.bnd:biz.aQute.bndlib:3.1.0'
5151

5252
// Servlet
53-
compile 'javax.servlet:javax.servlet-api:3.0.1'
53+
compile 'javax.servlet:javax.servlet-api:4.0.0'
54+
compile 'javax.websocket:javax.websocket-api:1.1'
5455

5556
// GraphQL
5657
compile 'com.graphql-java:graphql-java:9.2'

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
version = 5.2.1
1+
version = 6.0.0
22
group = com.graphql-java

gradle/wrapper/gradle-wrapper.jar

117 Bytes
Binary file not shown.

gradlew

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,11 @@ DEFAULT_JVM_OPTS=""
3333
# Use the maximum available, or set MAX_FD != -1 to use that value.
3434
MAX_FD="maximum"
3535

36-
warn ( ) {
36+
warn () {
3737
echo "$*"
3838
}
3939

40-
die ( ) {
40+
die () {
4141
echo
4242
echo "$*"
4343
echo
@@ -155,7 +155,7 @@ if $cygwin ; then
155155
fi
156156

157157
# Escape application args
158-
save ( ) {
158+
save () {
159159
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
160160
echo " "
161161
}

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

Lines changed: 374 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,22 @@
11
package graphql.servlet;
22

33
import javax.servlet.http.HttpServletRequest;
4-
import javax.servlet.http.HttpServletResponse;
5-
import java.util.Optional;
4+
import javax.websocket.server.HandshakeRequest;
65

76
public class DefaultGraphQLContextBuilder implements GraphQLContextBuilder {
87

98
@Override
10-
public GraphQLContext build(Optional<HttpServletRequest> req, Optional<HttpServletResponse> resp) {
11-
return new GraphQLContext(req, resp);
9+
public GraphQLContext build(HttpServletRequest httpServletRequest) {
10+
return new GraphQLContext(httpServletRequest);
1211
}
1312

13+
@Override
14+
public GraphQLContext build(HandshakeRequest handshakeRequest) {
15+
return new GraphQLContext(handshakeRequest);
16+
}
17+
18+
@Override
19+
public GraphQLContext build() {
20+
return new GraphQLContext();
21+
}
1422
}

src/main/java/graphql/servlet/DefaultGraphQLSchemaProvider.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import graphql.schema.GraphQLSchema;
44

55
import javax.servlet.http.HttpServletRequest;
6+
import javax.websocket.server.HandshakeRequest;
67

78
/**
89
* @author Andrew Potter
@@ -27,6 +28,11 @@ public GraphQLSchema getSchema(HttpServletRequest request) {
2728
return getSchema();
2829
}
2930

31+
@Override
32+
public GraphQLSchema getSchema(HandshakeRequest request) {
33+
return getSchema();
34+
}
35+
3036
@Override
3137
public GraphQLSchema getSchema() {
3238
return schema;
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package graphql.servlet;
2+
3+
import graphql.ExecutionInput;
4+
import graphql.execution.ExecutionContext;
5+
import graphql.schema.GraphQLSchema;
6+
import graphql.servlet.internal.GraphQLRequest;
7+
8+
import javax.security.auth.Subject;
9+
import java.util.Collections;
10+
import java.util.List;
11+
import java.util.Optional;
12+
import java.util.stream.Collectors;
13+
14+
/**
15+
* @author Andrew Potter
16+
*/
17+
public class GraphQLBatchedInvocationInput extends GraphQLInvocationInput {
18+
private final List<GraphQLRequest> requests;
19+
20+
public GraphQLBatchedInvocationInput(List<GraphQLRequest> requests, GraphQLSchema schema, GraphQLContext context, Object root) {
21+
super(schema, context, root);
22+
this.requests = Collections.unmodifiableList(requests);
23+
}
24+
25+
public List<ExecutionInput> getExecutionInputs() {
26+
return requests.stream()
27+
.map(this::createExecutionInput)
28+
.collect(Collectors.toList());
29+
}
30+
}

src/main/java/graphql/servlet/GraphQLContext.java

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2,53 +2,54 @@
22

33
import javax.security.auth.Subject;
44
import javax.servlet.http.HttpServletRequest;
5-
import javax.servlet.http.HttpServletResponse;
65
import javax.servlet.http.Part;
6+
import javax.websocket.server.HandshakeRequest;
77
import java.util.List;
88
import java.util.Map;
99
import java.util.Optional;
1010

1111
public class GraphQLContext {
12-
private Optional<HttpServletRequest> request;
13-
private Optional<HttpServletResponse> response;
12+
private HttpServletRequest httpServletRequest;
13+
private HandshakeRequest handshakeRequest;
1414

15-
private Optional<Subject> subject = Optional.empty();
16-
private Optional<Map<String, List<Part>>> files = Optional.empty();
15+
private Subject subject;
16+
private Map<String, List<Part>> files;
1717

18-
public GraphQLContext(Optional<HttpServletRequest> request, Optional<HttpServletResponse> response) {
19-
this.request = request;
20-
this.response = response;
18+
public GraphQLContext(HttpServletRequest httpServletRequest, HandshakeRequest handshakeRequest, Subject subject) {
19+
this.httpServletRequest = httpServletRequest;
20+
this.handshakeRequest = handshakeRequest;
21+
this.subject = subject;
2122
}
2223

23-
public Optional<HttpServletRequest> getRequest() {
24-
return request;
24+
public GraphQLContext(HttpServletRequest httpServletRequest) {
25+
this(httpServletRequest, null, null);
2526
}
2627

27-
public void setRequest(Optional<HttpServletRequest> request) {
28-
this.request = request;
28+
public GraphQLContext(HandshakeRequest handshakeRequest) {
29+
this(null, handshakeRequest, null);
2930
}
3031

31-
public Optional<HttpServletResponse> getResponse() {
32-
return response;
32+
public GraphQLContext() {
33+
this(null, null, null);
3334
}
3435

35-
public void setResponse(Optional<HttpServletResponse> response) {
36-
this.response = response;
36+
public Optional<HttpServletRequest> getHttpServletRequest() {
37+
return Optional.ofNullable(httpServletRequest);
3738
}
3839

3940
public Optional<Subject> getSubject() {
40-
return subject;
41+
return Optional.ofNullable(subject);
4142
}
4243

43-
public void setSubject(Optional<Subject> subject) {
44-
this.subject = subject;
44+
public Optional<HandshakeRequest> getHandshakeRequest() {
45+
return Optional.ofNullable(handshakeRequest);
4546
}
4647

4748
public Optional<Map<String, List<Part>>> getFiles() {
48-
return files;
49+
return Optional.ofNullable(files);
4950
}
5051

51-
public void setFiles(Optional<Map<String, List<Part>>> files) {
52+
public void setFiles(Map<String, List<Part>> files) {
5253
this.files = files;
5354
}
5455
}

src/main/java/graphql/servlet/GraphQLContextBuilder.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,16 @@
22

33
import javax.servlet.http.HttpServletRequest;
44
import javax.servlet.http.HttpServletResponse;
5+
import javax.websocket.server.HandshakeRequest;
56
import java.util.Optional;
67

78
public interface GraphQLContextBuilder {
8-
GraphQLContext build(Optional<HttpServletRequest> req, Optional<HttpServletResponse> resp);
9+
GraphQLContext build(HttpServletRequest httpServletRequest);
10+
GraphQLContext build(HandshakeRequest handshakeRequest);
11+
12+
/**
13+
* Only used for MBean calls.
14+
* @return the graphql context
15+
*/
16+
GraphQLContext build();
917
}

0 commit comments

Comments
 (0)