Skip to content

Commit 298cdc2

Browse files
feat(graphql-java-kickstart#5):use custom annotation instead of graphql-java-tools interfaces
Also remove the dependency on GraphQL Java Tools. Instead of using the marker interfaces from this library, annotations of the same name are defined for the same purpose. Revert Reflections library version because of a critical issue.
1 parent 3dd2fe5 commit 298cdc2

28 files changed

+114
-81
lines changed

README.md

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -407,9 +407,6 @@ manually, the schema will be constructed based on the Java code. Please see the
407407
library for a detailed documentation of the available annotations. This readme focuses on how GraphQL Annotations -
408408
GraphQL Spring Boot Starter integration works.
409409

410-
**Note:** *Although the GraphQL Annotations Starter has a dependency on GraphQL Java Tools and uses some interfaces from
411-
that project, it will ignore schema definition files. It is not possible to combine schema- and code-first approaches.*
412-
413410
### Configuration
414411

415412
```
@@ -425,8 +422,8 @@ removed from GraphQL fields automatically.
425422
426423
### Root resolvers, directives, type extensions
427424
428-
The root resolvers must be marked by the `GraphQLQueryResolver`, `GraphQLMutationResolver` and `GraphQLSubscription`
429-
interfaces (from the GraphQL Java Tools library).
425+
The root resolvers must be marked with the `GraphQLQueryResolver`, `GraphQLMutationResolver` and `GraphQLSubscription`
426+
annotations (not to be confused with the marker interfaces from the GraphQL Java Tools library).
430427
431428
**Important:**
432429

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ LIB_SPRING_BOOT_VER = 2.2.6.RELEASE
4444
LIB_GRAPHQL_SERVLET_VER = 9.2.0
4545
LIB_GRAPHQL_JAVA_TOOLS_VER = 6.1.0
4646
LIB_GRAPHQL_ANNOTATIONS_VER = 8.0
47-
LIB_REFLECTIONS_VER = 0.9.12
47+
LIB_REFLECTIONS_VER = 0.9.11
4848
LIB_APACHE_COMMONS_TEXT=1.8
4949
LIB_JSOUP_VER=1.12.2
5050
kotlin.version=1.3.70
Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,17 @@
11
dependencies {
2-
api project(":graphql-spring-boot-starter")
2+
api(project(":graphql-spring-boot-starter")) {
3+
exclude module: "graphql-kickstart-spring-boot-starter-tools-autoconfigure"
4+
exclude module: "graphql-java-tools"
5+
}
36
api "io.github.graphql-java:graphql-java-annotations:$LIB_GRAPHQL_ANNOTATIONS_VER"
47
implementation "org.reflections:reflections:$LIB_REFLECTIONS_VER"
58
implementation "org.springframework.boot:spring-boot-autoconfigure"
69
annotationProcessor "org.springframework.boot:spring-boot-configuration-processor"
710

811
testImplementation "org.springframework.boot:spring-boot-starter-test"
9-
testImplementation project(":graphql-spring-boot-starter-test")
12+
testImplementation(project(":graphql-spring-boot-starter-test")) {
13+
exclude module: "graphql-kickstart-spring-boot-starter-tools-autoconfigure"
14+
exclude module: "graphql-java-tools"
15+
}
1016
testImplementation "io.reactivex.rxjava2:rxjava"
1117
}

graphql-kickstart-spring-boot-autoconfigure-graphql-annotations/src/main/java/graphql/kickstart/graphql/annotations/GraphQLAnnotationsAutoConfiguration.java

Lines changed: 6 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,6 @@
1010
import graphql.kickstart.graphql.annotations.exceptions.MultipleMutationResolversException;
1111
import graphql.kickstart.graphql.annotations.exceptions.MultipleQueryResolversException;
1212
import graphql.kickstart.graphql.annotations.exceptions.MultipleSubscriptionResolversException;
13-
import graphql.kickstart.tools.GraphQLMutationResolver;
14-
import graphql.kickstart.tools.GraphQLQueryResolver;
15-
import graphql.kickstart.tools.GraphQLSubscriptionResolver;
16-
import graphql.kickstart.tools.boot.GraphQLJavaToolsAutoConfiguration;
1713
import graphql.relay.Relay;
1814
import graphql.schema.GraphQLScalarType;
1915
import graphql.schema.GraphQLSchema;
@@ -24,7 +20,6 @@
2420
import org.reflections.scanners.MethodAnnotationsScanner;
2521
import org.reflections.scanners.SubTypesScanner;
2622
import org.reflections.scanners.TypeAnnotationsScanner;
27-
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
2823
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
2924
import org.springframework.boot.context.properties.EnableConfigurationProperties;
3025
import org.springframework.context.annotation.Bean;
@@ -40,7 +35,6 @@
4035
import static graphql.annotations.AnnotationsSchemaCreator.newAnnotationsSchema;
4136

4237
@Configuration
43-
@AutoConfigureBefore({GraphQLJavaToolsAutoConfiguration.class})
4438
@EnableConfigurationProperties(GraphQLAnnotationsProperties.class)
4539
@RequiredArgsConstructor
4640
@Slf4j
@@ -107,8 +101,8 @@ private void setSubscriptionResolverClass(
107101
final AnnotationsSchemaCreator.Builder builder,
108102
final Reflections reflections
109103
) {
110-
final Set<Class<? extends GraphQLSubscriptionResolver>> subscriptionResolvers
111-
= getSubTypesOf(reflections, GraphQLSubscriptionResolver.class);
104+
final Set<Class<?>> subscriptionResolvers
105+
= getTypesAnnotatedWith(reflections, GraphQLSubscriptionResolver.class);
112106
if (subscriptionResolvers.size() > 1) {
113107
throw new MultipleSubscriptionResolversException();
114108
}
@@ -122,8 +116,8 @@ private void setMutationResolverClass(
122116
final AnnotationsSchemaCreator.Builder builder,
123117
final Reflections reflections
124118
) {
125-
final Set<Class<? extends GraphQLMutationResolver>> mutationResolvers
126-
= getSubTypesOf(reflections, GraphQLMutationResolver.class);
119+
final Set<Class<?>> mutationResolvers
120+
= getTypesAnnotatedWith(reflections, GraphQLMutationResolver.class);
127121
if (mutationResolvers.size() > 1) {
128122
throw new MultipleMutationResolversException();
129123
}
@@ -137,8 +131,8 @@ private void setQueryResolverClass(
137131
final AnnotationsSchemaCreator.Builder builder,
138132
final Reflections reflections
139133
) {
140-
final Set<Class<? extends GraphQLQueryResolver>> queryResolvers
141-
= getSubTypesOf(reflections, GraphQLQueryResolver.class);
134+
final Set<Class<?>> queryResolvers
135+
= getTypesAnnotatedWith(reflections, GraphQLQueryResolver.class);
142136
if (queryResolvers.size() == 0) {
143137
throw new MissingQueryResolverException();
144138
}
@@ -170,25 +164,6 @@ private Set<Class<?>> getTypesAnnotatedWith(
170164
}
171165
}
172166

173-
/**
174-
* Workaround for a bug in Reflections - {@link Reflections#getSubTypesOf(Class)} will throw a
175-
* {@link ReflectionsException} if there are no classes in the specified package.
176-
* @param reflections the {@link Reflections} instance
177-
* @param aClass a class
178-
* @return The set of classes that are subclasses of the specified class, or empty set if no annotations found.
179-
* @see <a href="https://github.com/ronmamo/reflections/issues/273">Issue #273</>
180-
*/
181-
private <T> Set<Class<? extends T>> getSubTypesOf(
182-
final Reflections reflections,
183-
final Class<T> aClass
184-
) {
185-
try {
186-
return reflections.getSubTypesOf(aClass);
187-
} catch (ReflectionsException e) {
188-
return Collections.emptySet();
189-
}
190-
}
191-
192167
/**
193168
* This is required, because normally implementations of interfaces are not explicitly returned by any resolver
194169
* method, and therefor not added to the schema automatically.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package graphql.kickstart.graphql.annotations;
2+
3+
import java.lang.annotation.ElementType;
4+
import java.lang.annotation.Retention;
5+
import java.lang.annotation.RetentionPolicy;
6+
import java.lang.annotation.Target;
7+
8+
@Target(ElementType.TYPE)
9+
@Retention(RetentionPolicy.RUNTIME)
10+
public @interface GraphQLMutationResolver {
11+
}
12+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package graphql.kickstart.graphql.annotations;
2+
3+
import java.lang.annotation.ElementType;
4+
import java.lang.annotation.Retention;
5+
import java.lang.annotation.RetentionPolicy;
6+
import java.lang.annotation.Target;
7+
8+
@Target(ElementType.TYPE)
9+
@Retention(RetentionPolicy.RUNTIME)
10+
public @interface GraphQLQueryResolver {
11+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package graphql.kickstart.graphql.annotations;
2+
3+
import java.lang.annotation.ElementType;
4+
import java.lang.annotation.Retention;
5+
import java.lang.annotation.RetentionPolicy;
6+
import java.lang.annotation.Target;
7+
8+
@Target(ElementType.TYPE)
9+
@Retention(RetentionPolicy.RUNTIME)
10+
public @interface GraphQLSubscriptionResolver {
11+
}

graphql-kickstart-spring-boot-autoconfigure-graphql-annotations/src/test/java/graphql/kickstart/graphql/annotations/test/custom/annotation/processor/TestQuery.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
package graphql.kickstart.graphql.annotations.test.custom.annotation.processor;
22

33
import graphql.annotations.annotationTypes.GraphQLField;
4-
import graphql.kickstart.tools.GraphQLQueryResolver;
4+
import graphql.kickstart.graphql.annotations.GraphQLQueryResolver;
55

6-
public class TestQuery implements GraphQLQueryResolver {
6+
@GraphQLQueryResolver
7+
public class TestQuery {
78

89
@GraphQLField
910
public String someQuery() {

graphql-kickstart-spring-boot-autoconfigure-graphql-annotations/src/test/java/graphql/kickstart/graphql/annotations/test/custom/relay/TestQuery.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,12 @@
44
import graphql.annotations.connection.AbstractPaginatedData;
55
import graphql.annotations.connection.GraphQLConnection;
66
import graphql.annotations.connection.PaginatedData;
7-
import graphql.kickstart.tools.GraphQLQueryResolver;
7+
import graphql.kickstart.graphql.annotations.GraphQLQueryResolver;
88

99
import java.util.Collections;
1010

11-
public class TestQuery implements GraphQLQueryResolver {
11+
@GraphQLQueryResolver
12+
public class TestQuery {
1213

1314
@GraphQLField
1415
@GraphQLConnection

graphql-kickstart-spring-boot-autoconfigure-graphql-annotations/src/test/java/graphql/kickstart/graphql/annotations/test/custom/type/function/TestQuery.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
package graphql.kickstart.graphql.annotations.test.custom.type.function;
22

33
import graphql.annotations.annotationTypes.GraphQLField;
4-
import graphql.kickstart.tools.GraphQLQueryResolver;
4+
import graphql.kickstart.graphql.annotations.GraphQLQueryResolver;
55

6-
public class TestQuery implements GraphQLQueryResolver {
6+
@GraphQLQueryResolver
7+
public class TestQuery {
78

89
@GraphQLField
910
public static Foo foo(){

graphql-kickstart-spring-boot-autoconfigure-graphql-annotations/src/test/java/graphql/kickstart/graphql/annotations/test/directive/TestQueryWithDirective.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
package graphql.kickstart.graphql.annotations.test.directive;
22

33
import graphql.annotations.annotationTypes.GraphQLField;
4-
import graphql.kickstart.tools.GraphQLQueryResolver;
4+
import graphql.kickstart.graphql.annotations.GraphQLQueryResolver;
55

6-
public class TestQueryWithDirective implements GraphQLQueryResolver {
6+
@GraphQLQueryResolver
7+
public class TestQueryWithDirective {
78

89
@GraphQLField
910
@UpperCaseDirective
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package graphql.kickstart.graphql.annotations.test.error.multiple.mutation;
22

3-
import graphql.kickstart.tools.GraphQLMutationResolver;
3+
import graphql.kickstart.graphql.annotations.GraphQLMutationResolver;
44

5-
public class FirstMutationResolver implements GraphQLMutationResolver {
5+
@GraphQLMutationResolver
6+
public class FirstMutationResolver {
67
}
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package graphql.kickstart.graphql.annotations.test.error.multiple.mutation;
22

3-
import graphql.kickstart.tools.GraphQLMutationResolver;
3+
import graphql.kickstart.graphql.annotations.GraphQLMutationResolver;
44

5-
public class SecondMutationResolver implements GraphQLMutationResolver {
5+
@GraphQLMutationResolver
6+
public class SecondMutationResolver {
67
}
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package graphql.kickstart.graphql.annotations.test.error.multiple.mutation;
22

3-
import graphql.kickstart.tools.GraphQLQueryResolver;
3+
import graphql.kickstart.graphql.annotations.GraphQLQueryResolver;
44

5-
public class TestQuery implements GraphQLQueryResolver {
5+
@GraphQLQueryResolver
6+
public class TestQuery {
67
}
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package graphql.kickstart.graphql.annotations.test.error.multiple.query;
22

3-
import graphql.kickstart.tools.GraphQLQueryResolver;
3+
import graphql.kickstart.graphql.annotations.GraphQLQueryResolver;
44

5-
public class FirstQueryResolver implements GraphQLQueryResolver {
5+
@GraphQLQueryResolver
6+
public class FirstQueryResolver {
67
}
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package graphql.kickstart.graphql.annotations.test.error.multiple.query;
22

3-
import graphql.kickstart.tools.GraphQLQueryResolver;
3+
import graphql.kickstart.graphql.annotations.GraphQLQueryResolver;
44

5-
public class SecondQueryResolver implements GraphQLQueryResolver {
5+
@GraphQLQueryResolver
6+
public class SecondQueryResolver {
67
}
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package graphql.kickstart.graphql.annotations.test.error.multiple.subscription;
22

3-
import graphql.kickstart.tools.GraphQLSubscriptionResolver;
3+
import graphql.kickstart.graphql.annotations.GraphQLSubscriptionResolver;
44

5-
public class FirstSubscriptionResolver implements GraphQLSubscriptionResolver {
5+
@GraphQLSubscriptionResolver
6+
public class FirstSubscriptionResolver {
67
}
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package graphql.kickstart.graphql.annotations.test.error.multiple.subscription;
22

3-
import graphql.kickstart.tools.GraphQLSubscriptionResolver;
3+
import graphql.kickstart.graphql.annotations.GraphQLSubscriptionResolver;
44

5-
public class SecondSubscriptionResolver implements GraphQLSubscriptionResolver {
5+
@GraphQLSubscriptionResolver
6+
public class SecondSubscriptionResolver {
67
}
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package graphql.kickstart.graphql.annotations.test.error.multiple.subscription;
22

3-
import graphql.kickstart.tools.GraphQLQueryResolver;
3+
import graphql.kickstart.graphql.annotations.GraphQLQueryResolver;
44

5-
public class TestQuery implements GraphQLQueryResolver {
5+
@GraphQLQueryResolver
6+
public class TestQuery {
67
}

graphql-kickstart-spring-boot-autoconfigure-graphql-annotations/src/test/java/graphql/kickstart/graphql/annotations/test/extend/type/TestQuery.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
package graphql.kickstart.graphql.annotations.test.extend.type;
22

33
import graphql.annotations.annotationTypes.GraphQLField;
4+
import graphql.kickstart.graphql.annotations.GraphQLQueryResolver;
45
import graphql.kickstart.graphql.annotations.test.extend.type.model.BaseType;
5-
import graphql.kickstart.tools.GraphQLQueryResolver;
66

7-
public class TestQuery implements GraphQLQueryResolver {
7+
@GraphQLQueryResolver
8+
public class TestQuery {
89

910
@GraphQLField
1011
public static BaseType someValue() {

graphql-kickstart-spring-boot-autoconfigure-graphql-annotations/src/test/java/graphql/kickstart/graphql/annotations/test/interfaces/InterfaceQuery.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,13 @@
33
import graphql.annotations.annotationTypes.GraphQLDescription;
44
import graphql.annotations.annotationTypes.GraphQLField;
55
import graphql.annotations.annotationTypes.GraphQLNonNull;
6-
import graphql.kickstart.tools.GraphQLQueryResolver;
6+
import graphql.kickstart.graphql.annotations.GraphQLQueryResolver;
77

88
import java.util.Arrays;
99
import java.util.List;
1010

11-
public class InterfaceQuery implements GraphQLQueryResolver {
11+
@GraphQLQueryResolver
12+
public class InterfaceQuery {
1213

1314
@GraphQLField
1415
@GraphQLNonNull

graphql-kickstart-spring-boot-autoconfigure-graphql-annotations/src/test/java/graphql/kickstart/graphql/annotations/test/mutation/DummyQuery.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
package graphql.kickstart.graphql.annotations.test.mutation;
22

33
import graphql.annotations.annotationTypes.GraphQLField;
4-
import graphql.kickstart.tools.GraphQLQueryResolver;
4+
import graphql.kickstart.graphql.annotations.GraphQLQueryResolver;
55

6-
public class DummyQuery implements GraphQLQueryResolver {
6+
@GraphQLQueryResolver
7+
public class DummyQuery {
78

89
@GraphQLField
910
public static String dummyQuery() {

graphql-kickstart-spring-boot-autoconfigure-graphql-annotations/src/test/java/graphql/kickstart/graphql/annotations/test/mutation/TestMutation.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
package graphql.kickstart.graphql.annotations.test.mutation;
22

33
import graphql.annotations.annotationTypes.GraphQLField;
4+
import graphql.kickstart.graphql.annotations.GraphQLMutationResolver;
45
import graphql.kickstart.graphql.annotations.test.mutation.model.TestModel;
5-
import graphql.kickstart.tools.GraphQLMutationResolver;
66

7-
public class TestMutation implements GraphQLMutationResolver {
7+
@GraphQLMutationResolver
8+
public class TestMutation {
89

910
@GraphQLField
1011
public static TestModel performSomeOperation() {

graphql-kickstart-spring-boot-autoconfigure-graphql-annotations/src/test/java/graphql/kickstart/graphql/annotations/test/prettify/PrettifyQuery.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
package graphql.kickstart.graphql.annotations.test.prettify;
22

33
import graphql.annotations.annotationTypes.GraphQLField;
4-
import graphql.kickstart.tools.GraphQLQueryResolver;
4+
import graphql.kickstart.graphql.annotations.GraphQLQueryResolver;
55

6-
public class PrettifyQuery implements GraphQLQueryResolver {
6+
@GraphQLQueryResolver
7+
public class PrettifyQuery {
78

89
@GraphQLField
910
public static String getSomeValue() {

graphql-kickstart-spring-boot-autoconfigure-graphql-annotations/src/test/java/graphql/kickstart/graphql/annotations/test/query/TestQuery.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,12 @@
33
import graphql.annotations.annotationTypes.GraphQLField;
44
import graphql.annotations.annotationTypes.GraphQLName;
55
import graphql.annotations.annotationTypes.GraphQLNonNull;
6-
import graphql.kickstart.tools.GraphQLQueryResolver;
6+
import graphql.kickstart.graphql.annotations.GraphQLQueryResolver;
77

88
import java.util.Optional;
99

10-
public class TestQuery implements GraphQLQueryResolver {
10+
@GraphQLQueryResolver
11+
public class TestQuery {
1112

1213
@GraphQLField
1314
@GraphQLNonNull

0 commit comments

Comments
 (0)