5
5
import graphql .schema .DataFetcher ;
6
6
import graphql .schema .GraphQLFieldDefinition ;
7
7
import graphql .schema .GraphQLFieldsContainer ;
8
+ import graphql .schema .GraphQLObjectType ;
8
9
import graphql .schema .idl .SchemaDirectiveWiring ;
9
10
import graphql .schema .idl .SchemaDirectiveWiringEnvironment ;
10
11
import graphql .validation .interpolation .MessageInterpolator ;
11
12
import graphql .validation .rules .OnValidationErrorStrategy ;
13
+ import graphql .validation .rules .TargetedValidationRules ;
12
14
import graphql .validation .rules .ValidationRules ;
13
15
14
16
import java .util .Locale ;
@@ -34,15 +36,23 @@ public ValidationSchemaWiring(ValidationRules ruleCandidates) {
34
36
public GraphQLFieldDefinition onField (SchemaDirectiveWiringEnvironment <GraphQLFieldDefinition > env ) {
35
37
GraphQLFieldsContainer fieldsContainer = env .getFieldsContainer ();
36
38
GraphQLFieldDefinition fieldDefinition = env .getFieldDefinition ();
37
-
39
+ TargetedValidationRules rules = ruleCandidates .buildRulesFor (fieldDefinition , fieldsContainer );
40
+ if (rules .isEmpty ()) {
41
+ return fieldDefinition ;
42
+ }
43
+ if (! (fieldsContainer instanceof GraphQLObjectType )) {
44
+ // only object type fields can have data fetchers
45
+ return fieldDefinition ;
46
+ }
47
+ GraphQLObjectType graphQLObjectType = (GraphQLObjectType ) fieldsContainer ;
38
48
OnValidationErrorStrategy errorStrategy = ruleCandidates .getOnValidationErrorStrategy ();
39
49
MessageInterpolator messageInterpolator = ruleCandidates .getMessageInterpolator ();
40
50
Locale locale = ruleCandidates .getLocale ();
41
51
42
- final DataFetcher <?> currentDF = env .getCodeRegistry ().getDataFetcher (fieldsContainer , fieldDefinition );
52
+ final DataFetcher <?> currentDF = env .getCodeRegistry ().getDataFetcher (graphQLObjectType , fieldDefinition );
43
53
final DataFetcher <?> newDF = buildValidatingDataFetcher (errorStrategy , messageInterpolator , currentDF , locale );
44
54
45
- env .getCodeRegistry ().dataFetcher (fieldsContainer , fieldDefinition , newDF );
55
+ env .getCodeRegistry ().dataFetcher (graphQLObjectType , fieldDefinition , newDF );
46
56
47
57
return fieldDefinition ;
48
58
}
0 commit comments