diff --git a/spring-graphql/src/main/java/org/springframework/graphql/execution/ContextDataFetcherDecorator.java b/spring-graphql/src/main/java/org/springframework/graphql/execution/ContextDataFetcherDecorator.java index 1a3194d99..8ad85750c 100644 --- a/spring-graphql/src/main/java/org/springframework/graphql/execution/ContextDataFetcherDecorator.java +++ b/spring-graphql/src/main/java/org/springframework/graphql/execution/ContextDataFetcherDecorator.java @@ -20,6 +20,7 @@ import graphql.ExecutionInput; import graphql.GraphQLContext; +import graphql.TrivialDataFetcher; import graphql.schema.DataFetcher; import graphql.schema.DataFetchingEnvironment; import graphql.schema.FieldCoordinates; @@ -150,6 +151,9 @@ public TraversalControl visitGraphQLFieldDefinition( } private boolean applyDecorator(DataFetcher dataFetcher) { + if (dataFetcher instanceof TrivialDataFetcher) { + return false; + } Class type = dataFetcher.getClass(); String packageName = type.getPackage().getName(); if (packageName.startsWith("graphql.")) { diff --git a/spring-graphql/src/test/java/org/springframework/graphql/execution/ContextDataFetcherDecoratorTests.java b/spring-graphql/src/test/java/org/springframework/graphql/execution/ContextDataFetcherDecoratorTests.java index 01c4ddaa1..83481cc49 100644 --- a/spring-graphql/src/test/java/org/springframework/graphql/execution/ContextDataFetcherDecoratorTests.java +++ b/spring-graphql/src/test/java/org/springframework/graphql/execution/ContextDataFetcherDecoratorTests.java @@ -27,9 +27,12 @@ import graphql.GraphQL; import graphql.GraphQLError; import graphql.GraphqlErrorBuilder; +import graphql.TrivialDataFetcher; import graphql.schema.DataFetcher; import graphql.schema.DataFetcherFactories; +import graphql.schema.FieldCoordinates; import graphql.schema.GraphQLFieldDefinition; +import graphql.schema.GraphQLSchema; import graphql.schema.idl.SchemaDirectiveWiring; import graphql.schema.idl.SchemaDirectiveWiringEnvironment; import io.micrometer.context.ContextRegistry; @@ -238,4 +241,18 @@ else if (value instanceof Mono) { tester.accept(directiveWiring, env -> Mono.just("hello")); } + @Test //gh-980 + void trivialDataFetcherIsNotDecorated() { + GraphQL graphQl = GraphQlSetup.schemaContent(SCHEMA_CONTENT) + .queryFetcher("greeting", (TrivialDataFetcher) env -> "hello") + .toGraphQl(); + + GraphQLSchema schema = graphQl.getGraphQLSchema(); + FieldCoordinates coordinates = FieldCoordinates.coordinates("Query", "greeting"); + DataFetcher dataFetcher = schema.getCodeRegistry() + .getDataFetcher(coordinates, schema.getFieldDefinition(coordinates)); + + assertThat(dataFetcher).isInstanceOf(TrivialDataFetcher.class); + } + }