Building schema parser fails when java.util.List is used with a type parameter from a generic class · Issue #460 · graphql-java-kickstart/graphql-java-tools · GitHub
You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Building schema parser fails when java.util.List is used with a type parameter from a generic class #460
Then building the SchemaParser object fails with this exception:
Caused by: java.lang.IllegalStateException: TypeUtils.getRawType(type, declaringType) must not be null
at graphql.kickstart.tools.GenericType$RelativeTo.replaceTypeVariable(GenericType.kt:156) ~[graphql-java-tools-6.2.0.jar:na]
It seems the parameters passed to TypeUtils.getRawType(Type, Type) do not carry sufficient information for determining the raw type. The required information would to be contained in this.mostSpecificType.
A few things I have already tried:
It does not matter if Item is a nested class or not. The issue occurs in either case.
The issue does not occur if String is used for type parameter T instead of MutationInput.Item.
The issue does not occur if MutationInput has an own property java.util.List<MutationInput.Item> and has no generic super class:
Run ./mvnw clean spring-boot:run "-Dspring-boot.run.profiles=generics".
Expected behavior: Starting the Spring Boot application succeeds.
Actual behavior: Starting the Spring Boot application fails with this root cause:
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [graphql.kickstart.tools.SchemaParser]: Factory method 'schemaParser' threw exception; nested exception is java.lang.IllegalStateException: TypeU
tils.getRawType(type, declaringType) must not be null
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185) ~[spring-beans-5.3.1.jar:5.3.1]
at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:651) ~[spring-beans-5.3.1.jar:5.3.1]
... 138 common frames omitted
Caused by: java.lang.IllegalStateException: TypeUtils.getRawType(type, declaringType) must not be null
at graphql.kickstart.tools.GenericType$RelativeTo.replaceTypeVariable(GenericType.kt:156) ~[graphql-java-tools-6.2.0.jar:na]
at graphql.kickstart.tools.GenericType$RelativeTo.replaceTypeVariable(GenericType.kt:143) ~[graphql-java-tools-6.2.0.jar:na]
at graphql.kickstart.tools.GenericType$RelativeTo.unwrapGenericType(GenericType.kt:86) ~[graphql-java-tools-6.2.0.jar:na]
at graphql.kickstart.tools.TypeClassMatcher.match(TypeClassMatcher.kt:28) ~[graphql-java-tools-6.2.0.jar:na]
Starting the application with an alternative profile that replaces the backing class with a “non-generic” one succeeds: ./mvnw clean spring-boot:run "-Dspring-boot.run.profiles=nogenerics".
Caused by: java.lang.IllegalStateException: TypeUtils.getRawType(type, declaringType) must not be null
at graphql.kickstart.tools.GenericType$RelativeTo.replaceTypeVariable(GenericType.kt:156)
at graphql.kickstart.tools.GenericType$RelativeTo.unwrapGenericType(GenericType.kt:86)
at graphql.kickstart.tools.TypeClassMatcher.match(TypeClassMatcher.kt:28)
at graphql.kickstart.tools.TypeClassMatcher.match(TypeClassMatcher.kt:23)
at graphql.kickstart.tools.SchemaClassScanner.scanResolverInfoForPotentialMatches(SchemaClassScanner.kt:274)
at graphql.kickstart.tools.SchemaClassScanner.scanQueueItemForPotentialMatches(SchemaClassScanner.kt:264)
at graphql.kickstart.tools.SchemaClassScanner.scanQueue(SchemaClassScanner.kt:113)
at graphql.kickstart.tools.SchemaClassScanner.scanForClasses(SchemaClassScanner.kt:74)
at graphql.kickstart.tools.SchemaParserBuilder.scan(SchemaParserBuilder.kt:154)
at graphql.kickstart.tools.SchemaParserBuilder.build(SchemaParserBuilder.kt:195)
at graphql.kickstart.tools.boot.GraphQLJavaToolsAutoConfiguration.schemaParser(GraphQLJavaToolsAutoConfiguration.java:152)
Is there any way to work around this without completely duplicating the graphql APage and A types in this situation? Or any update on when this might be resolved?
Activity
marcust commentedon Jan 6, 2021
The same issue happens when the type that it tries to figure out is actually generic over multiple levels:
And backing Java classes like:
leads to the same exception
laszlopalfi commentedon Jul 13, 2021
Hello guys,
I'm experiencing the same issue, any idea if this is going to be fixed?
cornwe19 commentedon Aug 31, 2021
It seems like this issue also happens when a generic has a non-generic, non-concrete (interface or abstract class) type as well. For example,
Schema
Is there any way to work around this without completely duplicating the graphql
APageandAtypes in this situation? Or any update on when this might be resolved?