55import graphql .schema .DataFetcher ;
66import graphql .schema .GraphQLFieldDefinition ;
77import graphql .schema .GraphQLFieldsContainer ;
8+ import graphql .schema .GraphQLObjectType ;
89import graphql .schema .idl .SchemaDirectiveWiring ;
910import graphql .schema .idl .SchemaDirectiveWiringEnvironment ;
1011import graphql .validation .interpolation .MessageInterpolator ;
1112import graphql .validation .rules .OnValidationErrorStrategy ;
13+ import graphql .validation .rules .TargetedValidationRules ;
1214import graphql .validation .rules .ValidationRules ;
1315
1416import java .util .Locale ;
@@ -34,15 +36,23 @@ public ValidationSchemaWiring(ValidationRules ruleCandidates) {
3436 public GraphQLFieldDefinition onField (SchemaDirectiveWiringEnvironment <GraphQLFieldDefinition > env ) {
3537 GraphQLFieldsContainer fieldsContainer = env .getFieldsContainer ();
3638 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 ;
3848 OnValidationErrorStrategy errorStrategy = ruleCandidates .getOnValidationErrorStrategy ();
3949 MessageInterpolator messageInterpolator = ruleCandidates .getMessageInterpolator ();
4050 Locale locale = ruleCandidates .getLocale ();
4151
42- final DataFetcher <?> currentDF = env .getCodeRegistry ().getDataFetcher (fieldsContainer , fieldDefinition );
52+ final DataFetcher <?> currentDF = env .getCodeRegistry ().getDataFetcher (graphQLObjectType , fieldDefinition );
4353 final DataFetcher <?> newDF = buildValidatingDataFetcher (errorStrategy , messageInterpolator , currentDF , locale );
4454
45- env .getCodeRegistry ().dataFetcher (fieldsContainer , fieldDefinition , newDF );
55+ env .getCodeRegistry ().dataFetcher (graphQLObjectType , fieldDefinition , newDF );
4656
4757 return fieldDefinition ;
4858 }
0 commit comments