★ wanayoo — archive 1999 https://github.com/graphql-java-kickstart/graphql-java-tools/issues/411Nouvelle recherche | Portail wanayoo
Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Exception in thread "main" graphql.AssertException: Internal error: should never happen: Directive values of type 'EnumValue' are not supported yet #411

Open
dspenceb opened this issue Jun 23, 2020 · 4 comments

Comments

@dspenceb
Copy link

@dspenceb dspenceb commented Jun 23, 2020

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)
@vojtapol
Copy link
Member

@vojtapol vojtapol commented Jun 29, 2020

Thanks for reporting this. This will be likely fixed in the next version when we support GraphQL Java 15.

@dspenceb
Copy link
Author

@dspenceb dspenceb commented Jun 30, 2020

hi @vojtapol thanks for the response! Is there any kind of timeline or ETA on when that may be?

Thanks!

@jamesmartinpp
Copy link

@jamesmartinpp jamesmartinpp commented Jul 2, 2020

@vojtapol do you know which version this would be fixed in? we're trying to plan around the fix.

@vojtapol
Copy link
Member

@vojtapol vojtapol commented Jul 7, 2020

@jamesmartinpp We may need to do a significant rewrite to fix all the issues around directives. In general, we need to defer more work to graphql-java so that it's easier to stay up to date with their releases. I have no ETA on when the work is going to be finished.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Linked pull requests

Successfully merging a pull request may close this issue.

None yet
3 participants
You can’t perform that action at this time.