|
21 | 21 |
|
22 | 22 | import com.fasterxml.jackson.databind.InjectableValues; |
23 | 23 | import com.fasterxml.jackson.databind.ObjectMapper; |
| 24 | +import com.oembedler.moon.graphql.boot.error.GraphQLErrorHandlerFactory; |
24 | 25 | import graphql.execution.AsyncExecutionStrategy; |
25 | 26 | import graphql.execution.ExecutionStrategy; |
26 | 27 | import graphql.execution.SubscriptionExecutionStrategy; |
|
29 | 30 | import graphql.execution.preparsed.PreparsedDocumentProvider; |
30 | 31 | import graphql.schema.GraphQLSchema; |
31 | 32 | import graphql.servlet.*; |
| 33 | +import org.springframework.beans.BeansException; |
32 | 34 | import org.springframework.beans.factory.annotation.Autowired; |
33 | 35 | import org.springframework.boot.autoconfigure.AutoConfigureAfter; |
34 | 36 | import org.springframework.boot.autoconfigure.condition.*; |
35 | 37 | import org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration; |
36 | 38 | import org.springframework.boot.context.properties.EnableConfigurationProperties; |
37 | 39 | import org.springframework.boot.web.servlet.ServletRegistrationBean; |
| 40 | +import org.springframework.context.ApplicationContext; |
| 41 | +import org.springframework.context.ApplicationContextAware; |
| 42 | +import org.springframework.context.ConfigurableApplicationContext; |
38 | 43 | import org.springframework.context.annotation.Bean; |
39 | 44 | import org.springframework.context.annotation.Configuration; |
40 | 45 | import org.springframework.web.cors.UrlBasedCorsConfigurationSource; |
|
60 | 65 | @ConditionalOnProperty(value = "graphql.servlet.enabled", havingValue = "true", matchIfMissing = true) |
61 | 66 | @AutoConfigureAfter({GraphQLJavaToolsAutoConfiguration.class, JacksonAutoConfiguration.class}) |
62 | 67 | @EnableConfigurationProperties({GraphQLServletProperties.class}) |
63 | | -public class GraphQLWebAutoConfiguration { |
| 68 | +public class GraphQLWebAutoConfiguration implements ApplicationContextAware { |
64 | 69 |
|
65 | 70 | public static final String QUERY_EXECUTION_STRATEGY = "queryExecutionStrategy"; |
66 | 71 | public static final String MUTATION_EXECUTION_STRATEGY = "mutationExecutionStrategy"; |
@@ -96,6 +101,15 @@ public class GraphQLWebAutoConfiguration { |
96 | 101 | @Autowired(required = false) |
97 | 102 | private MultipartConfigElement multipartConfigElement; |
98 | 103 |
|
| 104 | + @Override |
| 105 | + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { |
| 106 | + if (!applicationContext.containsBean(GraphQLErrorHandler.class.getSimpleName())) { |
| 107 | + ConfigurableApplicationContext context = (ConfigurableApplicationContext) applicationContext; |
| 108 | + errorHandler = new GraphQLErrorHandlerFactory().create(context, graphQLServletProperties.isExceptionHandlersEnabled()); |
| 109 | + context.getBeanFactory().registerSingleton(errorHandler.getClass().getCanonicalName(), errorHandler); |
| 110 | + } |
| 111 | + } |
| 112 | + |
99 | 113 | @Bean |
100 | 114 | @ConditionalOnClass(CorsFilter.class) |
101 | 115 | @ConditionalOnProperty(value = "graphql.servlet.corsEnabled", havingValue = "true", matchIfMissing = true) |
@@ -236,5 +250,4 @@ public ServletRegistrationBean<AbstractGraphQLHttpServlet> graphQLServletRegistr |
236 | 250 | private MultipartConfigElement multipartConfigElement() { |
237 | 251 | return Optional.ofNullable(multipartConfigElement).orElse(new MultipartConfigElement("")); |
238 | 252 | } |
239 | | - |
240 | 253 | } |
0 commit comments