Skip TrivialDataFetcher in ContextDataFetcherDecorator
The `applyDecorator` method is working to exclude things from graphql-java. The TrivialDataFetcher interface is used to know when to perform instrumentation and is a part of the public SPI and should be preserved. See gh-983
This commit is contained in:
@@ -20,6 +20,7 @@ import java.util.List;
|
||||
|
||||
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 @@ final class ContextDataFetcherDecorator implements DataFetcher<Object> {
|
||||
}
|
||||
|
||||
private boolean applyDecorator(DataFetcher<?> dataFetcher) {
|
||||
if (dataFetcher instanceof TrivialDataFetcher) {
|
||||
return false;
|
||||
}
|
||||
Class<?> type = dataFetcher.getClass();
|
||||
String packageName = type.getPackage().getName();
|
||||
if (packageName.startsWith("graphql.")) {
|
||||
|
||||
@@ -27,9 +27,12 @@ import graphql.ExecutionResult;
|
||||
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 @@ public class ContextDataFetcherDecoratorTests {
|
||||
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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user