Description
This is an exception that is thrown by graphql-java when called from graphql-java-tools. The problem, however, is due to the way graphql-java-tools is using the graphql-java library internal API.
This is evidenced in this issue in graphql-java for a PR created to attempt to fix this issue: graphql-java/graphql-java#1706
Tools does not pass a directiveDefinition -- which is never mapped at any point in the SchemaParser
https://github.com/graphql-java-kickstart/graphql-java-tools/blob/master/src/main/kotlin/graphql/kickstart/tools/SchemaParser.kt#L163
And this causes graphql-java to use a code path that, according to them, is dead code and actually is removed in v15.
I created a test application to demonstrate this issue here: https://github.com/dspenceb/graphqltest
For quick reference, the schema:
type Query {
books: [Book!]
}
type Book {
id: Int!
name: String! @allowed(
allowed: [ALLOWED]
)
author: Author!
}
...
directive @allowed(
allowed: [AllowedState!]
) on FIELD_DEFINITION | OBJECT
enum AllowedState {
ALLOWED
DISALLOWED
}
wiring:
GraphQLSchema schema = SchemaParser.newParser()
.file("schema.graphqls")
.resolvers(new QueryResolver(new BookRepository()), new BookResolver(new AuthorRepository()))
.directive("allowed", new AllowedDirective())
.build()
.makeExecutableSchema();
Stack:
Exception in thread "main" graphql.AssertException: Internal error: should never happen: Directive values of type 'EnumValue' are not supported yet
at graphql.Assert.assertShouldNeverHappen(Assert.java:51)
at graphql.schema.idl.SchemaGeneratorHelper.buildDirectiveInputType(SchemaGeneratorHelper.java:203)
at graphql.schema.idl.SchemaGeneratorHelper.buildDirectiveInputType(SchemaGeneratorHelper.java:201)
at graphql.schema.idl.SchemaGeneratorHelper.buildDirectiveArgument(SchemaGeneratorHelper.java:272)
at graphql.schema.idl.SchemaGeneratorHelper.lambda$buildDirective$6(SchemaGeneratorHelper.java:251)
at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1382)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:482)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:472)
at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
at graphql.schema.idl.SchemaGeneratorHelper.buildDirective(SchemaGeneratorHelper.java:252)
at graphql.kickstart.tools.SchemaParser.buildDirectives(SchemaParser.kt:150)
at graphql.kickstart.tools.SchemaParser.createField(SchemaParser.kt:278)
at graphql.kickstart.tools.SchemaParser.access$createField(SchemaParser.kt:18)
at graphql.kickstart.tools.SchemaParser$createObject$$inlined$forEach$lambda$1.apply(SchemaParser.kt:124)
at graphql.kickstart.tools.SchemaParser$createObject$$inlined$forEach$lambda$1.apply(SchemaParser.kt:18)
at graphql.schema.GraphQLObjectType$Builder.field(GraphQLObjectType.java:308)
at graphql.kickstart.tools.SchemaParser.createObject(SchemaParser.kt:123)
at graphql.kickstart.tools.SchemaParser.parseSchemaObjects(SchemaParser.kt:68)
at graphql.kickstart.tools.SchemaParser.makeExecutableSchema(SchemaParser.kt:98)
at dspenceb.graphqltest.Main.main(Main.java:17)