Skip to content
This repository was archived by the owner on Dec 19, 2023. It is now read-only.

Commit 38d337b

Browse files
authored
Merge pull request #114 from graphql-java/servercontainer-issue
Split autoconfiguration of websocket in separate class
2 parents 569abe8 + 9391d0f commit 38d337b

File tree

8 files changed

+94
-44
lines changed

8 files changed

+94
-44
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ repositories {
4242
4343
dependencies {
4444
compile 'com.graphql-java:graphql-spring-boot-starter:5.0.2'
45-
45+
4646
// to embed GraphiQL tool
4747
compile 'com.graphql-java:graphiql-spring-boot-starter:5.0.2'
4848

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
1818
#
1919

20-
PROJECT_VERSION = 5.0.2
20+
PROJECT_VERSION = 5.0.3
2121
PROJECT_GROUP = com.graphql-java
2222
PROJECT_NAME = graphql-spring-boot
2323
PROJECT_DESC = GraphQL Spring Framework Boot

graphql-spring-boot-autoconfigure/src/main/java/com/oembedler/moon/graphql/boot/GraphQLWebAutoConfiguration.java

Lines changed: 2 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -26,29 +26,11 @@
2626
import graphql.execution.instrumentation.Instrumentation;
2727
import graphql.execution.preparsed.PreparsedDocumentProvider;
2828
import graphql.schema.GraphQLSchema;
29-
import graphql.servlet.AbstractGraphQLHttpServlet;
30-
import graphql.servlet.DefaultExecutionStrategyProvider;
31-
import graphql.servlet.DefaultGraphQLSchemaProvider;
32-
import graphql.servlet.ExecutionStrategyProvider;
33-
import graphql.servlet.GraphQLContextBuilder;
34-
import graphql.servlet.GraphQLErrorHandler;
35-
import graphql.servlet.GraphQLInvocationInputFactory;
36-
import graphql.servlet.GraphQLObjectMapper;
37-
import graphql.servlet.GraphQLQueryInvoker;
38-
import graphql.servlet.GraphQLRootObjectBuilder;
39-
import graphql.servlet.GraphQLSchemaProvider;
40-
import graphql.servlet.GraphQLServletListener;
41-
import graphql.servlet.GraphQLWebsocketServlet;
42-
import graphql.servlet.ObjectMapperConfigurer;
43-
import graphql.servlet.SimpleGraphQLHttpServlet;
29+
import graphql.servlet.*;
4430
import org.springframework.beans.factory.annotation.Autowired;
4531
import org.springframework.beans.factory.annotation.Value;
4632
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
47-
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
48-
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
49-
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
50-
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
51-
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
33+
import org.springframework.boot.autoconfigure.condition.*;
5234
import org.springframework.boot.context.properties.EnableConfigurationProperties;
5335
import org.springframework.boot.web.servlet.ServletRegistrationBean;
5436
import org.springframework.context.annotation.Bean;
@@ -57,8 +39,6 @@
5739
import org.springframework.web.filter.CorsFilter;
5840
import org.springframework.web.servlet.DispatcherServlet;
5941
import org.springframework.web.servlet.config.annotation.CorsRegistryWorkaround;
60-
import org.springframework.web.socket.server.standard.ServerEndpointExporter;
61-
import org.springframework.web.socket.server.standard.ServerEndpointRegistration;
6242

6343
import javax.servlet.MultipartConfigElement;
6444
import java.util.List;
@@ -85,9 +65,6 @@ public class GraphQLWebAutoConfiguration {
8565
@Autowired
8666
private GraphQLServletProperties graphQLServletProperties;
8767

88-
@Value("${graphql.servlet.subscriptions.websocket.path:/subscriptions}")
89-
private String websocketPath;
90-
9168
@Autowired(required = false)
9269
private List<GraphQLServletListener> listeners;
9370

@@ -236,23 +213,6 @@ public ServletRegistrationBean<AbstractGraphQLHttpServlet> graphQLServletRegistr
236213
return registration;
237214
}
238215

239-
@Bean
240-
@ConditionalOnMissingBean
241-
public GraphQLWebsocketServlet graphQLWebsocketServlet(GraphQLInvocationInputFactory invocationInputFactory, GraphQLQueryInvoker queryInvoker, GraphQLObjectMapper graphQLObjectMapper) {
242-
return new GraphQLWebsocketServlet(queryInvoker, invocationInputFactory, graphQLObjectMapper);
243-
}
244-
245-
@Bean
246-
public ServerEndpointRegistration serverEndpointRegistration(GraphQLWebsocketServlet servlet) {
247-
return new GraphQLWsServerEndpointRegistration(websocketPath, servlet);
248-
}
249-
250-
@Bean
251-
@ConditionalOnMissingBean
252-
public ServerEndpointExporter serverEndpointExporter() {
253-
return new ServerEndpointExporter();
254-
}
255-
256216
private MultipartConfigElement multipartConfigElement() {
257217
return Optional.ofNullable(multipartConfigElement).orElse(new MultipartConfigElement(""));
258218
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package com.oembedler.moon.graphql.boot;
2+
3+
import graphql.schema.GraphQLSchema;
4+
import graphql.servlet.GraphQLInvocationInputFactory;
5+
import graphql.servlet.GraphQLObjectMapper;
6+
import graphql.servlet.GraphQLQueryInvoker;
7+
import graphql.servlet.GraphQLWebsocketServlet;
8+
import org.springframework.beans.factory.annotation.Value;
9+
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
10+
import org.springframework.boot.autoconfigure.condition.*;
11+
import org.springframework.context.annotation.Bean;
12+
import org.springframework.context.annotation.Configuration;
13+
import org.springframework.web.servlet.DispatcherServlet;
14+
import org.springframework.web.socket.server.standard.ServerEndpointExporter;
15+
import org.springframework.web.socket.server.standard.ServerEndpointRegistration;
16+
17+
import javax.websocket.server.ServerContainer;
18+
19+
@Configuration
20+
@ConditionalOnWebApplication
21+
@ConditionalOnClass(DispatcherServlet.class)
22+
@ConditionalOnBean({GraphQLSchema.class})
23+
@ConditionalOnProperty(value = "graphql.servlet.websocket.enabled", havingValue = "true", matchIfMissing = true)
24+
@AutoConfigureAfter({GraphQLJavaToolsAutoConfiguration.class})
25+
public class GraphQLWebsocketAutoConfiguration {
26+
27+
@Value("${graphql.servlet.subscriptions.websocket.path:/subscriptions}")
28+
private String websocketPath;
29+
30+
@Bean
31+
@ConditionalOnMissingBean
32+
public GraphQLWebsocketServlet graphQLWebsocketServlet(GraphQLInvocationInputFactory invocationInputFactory, GraphQLQueryInvoker queryInvoker, GraphQLObjectMapper graphQLObjectMapper) {
33+
return new GraphQLWebsocketServlet(queryInvoker, invocationInputFactory, graphQLObjectMapper);
34+
}
35+
36+
@Bean
37+
@ConditionalOnClass(ServerContainer.class)
38+
public ServerEndpointRegistration serverEndpointRegistration(GraphQLWebsocketServlet servlet) {
39+
return new GraphQLWsServerEndpointRegistration(websocketPath, servlet);
40+
}
41+
42+
@Bean
43+
@ConditionalOnMissingBean
44+
@ConditionalOnClass(ServerContainer.class)
45+
public ServerEndpointExporter serverEndpointExporter() {
46+
return new ServerEndpointExporter();
47+
}
48+
49+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
22
com.oembedler.moon.graphql.boot.GraphQLWebAutoConfiguration,\
3+
com.oembedler.moon.graphql.boot.GraphQLWebsocketAutoConfiguration,\
34
com.oembedler.moon.graphql.boot.GraphQLJavaToolsAutoConfiguration,\
45
com.oembedler.moon.graphql.boot.GraphQLInstrumentationAutoConfiguration
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package com.oembedler.moon.graphql.boot;
2+
3+
import org.junit.Test;
4+
import org.junit.runner.RunWith;
5+
import org.springframework.beans.factory.annotation.Autowired;
6+
import org.springframework.boot.test.context.SpringBootTest;
7+
import org.springframework.test.context.junit4.SpringRunner;
8+
9+
import static graphql.Assert.assertNotNull;
10+
import static org.junit.Assert.assertEquals;
11+
12+
@RunWith(SpringRunner.class)
13+
@SpringBootTest(properties = {"graphql.servlet.mapping=/test"})
14+
public class GraphQLServletPropertiesTest {
15+
16+
@Autowired
17+
private GraphQLServletProperties properties;
18+
19+
@Test
20+
public void contains_custom_servlet_endpoint() {
21+
String mapping = properties.getMapping();
22+
assertNotNull(mapping);
23+
assertEquals("/test", mapping);
24+
}
25+
26+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.oembedler.moon.graphql.boot;
2+
3+
import org.springframework.boot.SpringBootConfiguration;
4+
import org.springframework.boot.context.properties.EnableConfigurationProperties;
5+
import org.springframework.context.annotation.Import;
6+
7+
@SpringBootConfiguration
8+
@Import(GraphQLServletProperties.class)
9+
@EnableConfigurationProperties
10+
public class TestAutoConfiguration {
11+
12+
13+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
graphql.servlet.mapping: /test

0 commit comments

Comments
 (0)