leangen / graphql-spqr

Build a GraphQL service in seconds
Apache License 2.0
1.09k stars 179 forks source link

ClassCastException when generating schema with v0.11.2 #439

Closed gjvoosten closed 1 year ago

gjvoosten commented 1 year ago

This works:

  private byte[] data;

  @GraphQLQuery
  public byte[] getData() {
    // ….
  }

  @GraphQLInputField
  public void setData(byte[] data) {
    // ….
  }

But this doesn't:

  private byte[] data;

  @GraphQLQuery
  public CompletableFuture<byte[]> getData() {
    // ….
  }

  @GraphQLInputField
  public void setData(byte[] data) {
    // ….
  }

When generating the schema, this throws an exception:

java.lang.ClassCastException: class io.leangen.geantyref.AnnotatedParameterizedTypeImpl cannot be cast to class java.lang.reflect.AnnotatedArrayType (io.leangen.geantyref.AnnotatedParameterizedTypeImpl is in unnamed module of loader 'app'; java.lang.reflect.AnnotatedArrayType is in module java.base of loader 'bootstrap')
    at io.leangen.geantyref.GenericTypeReflector.mergeAnnotations(GenericTypeReflector.java:1008)
    at java.base/java.util.stream.ReduceOps$2ReducingSink.accept(ReduceOps.java:123)
    at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
    at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625)
    at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
    at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
    at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921)
    at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
    at java.base/java.util.stream.ReferencePipeline.reduce(ReferencePipeline.java:662)
    at io.leangen.graphql.metadata.TypedElement.<init>(TypedElement.java:28)
    at io.leangen.graphql.metadata.strategy.value.jackson.JacksonValueMapper$ElementFactory.fromProperty(JacksonValueMapper.java:295)
    at io.leangen.graphql.metadata.strategy.value.jackson.JacksonValueMapper.toInputField(JacksonValueMapper.java:125)
    at io.leangen.graphql.metadata.strategy.value.jackson.JacksonValueMapper.lambda$getInputFields$1(JacksonValueMapper.java:119)
    at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
    at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)
    at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625)
    at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
    at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
    at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921)
    at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
    at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682)
    at io.leangen.graphql.metadata.strategy.value.jackson.JacksonValueMapper.getInputFields(JacksonValueMapper.java:120)
    at io.leangen.graphql.generator.DelegatingInputFieldBuilder.getInputFields(DelegatingInputFieldBuilder.java:24)
    at io.leangen.graphql.generator.mapping.common.ObjectTypeMapper.toGraphQLInputType(ObjectTypeMapper.java:78)
    at io.leangen.graphql.generator.mapping.common.ObjectTypeMapper.toGraphQLInputType(ObjectTypeMapper.java:33)
    at io.leangen.graphql.generator.mapping.common.CachingMapper.toGraphQLInputType(CachingMapper.java:41)
    at io.leangen.graphql.generator.OperationMapper.toGraphQLInputType(OperationMapper.java:256)
    at io.leangen.graphql.generator.OperationMapper.toGraphQLInputType(OperationMapper.java:241)
    at io.leangen.graphql.generator.OperationMapper.toGraphQLInputField(OperationMapper.java:228)
    at io.leangen.graphql.generator.mapping.common.ObjectTypeMapper.lambda$toGraphQLInputType$3(ObjectTypeMapper.java:78)
    at java.base/java.lang.Iterable.forEach(Iterable.java:75)
    at io.leangen.graphql.generator.mapping.common.ObjectTypeMapper.toGraphQLInputType(ObjectTypeMapper.java:78)
    at io.leangen.graphql.generator.mapping.common.ObjectTypeMapper.toGraphQLInputType(ObjectTypeMapper.java:33)
    at io.leangen.graphql.generator.mapping.common.CachingMapper.toGraphQLInputType(CachingMapper.java:41)
    at io.leangen.graphql.generator.OperationMapper.toGraphQLInputType(OperationMapper.java:256)
    at io.leangen.graphql.generator.OperationMapper.toGraphQLInputType(OperationMapper.java:241)
    at io.leangen.graphql.generator.mapping.common.ListMapper.toGraphQLInputType(ListMapper.java:28)
    at io.leangen.graphql.generator.OperationMapper.toGraphQLInputType(OperationMapper.java:256)
    at io.leangen.graphql.generator.OperationMapper.toGraphQLInputType(OperationMapper.java:241)
    at io.leangen.graphql.generator.OperationMapper.toGraphQLInputField(OperationMapper.java:228)
    at io.leangen.graphql.generator.mapping.common.ObjectTypeMapper.lambda$toGraphQLInputType$3(ObjectTypeMapper.java:78)
    at java.base/java.lang.Iterable.forEach(Iterable.java:75)
    at io.leangen.graphql.generator.mapping.common.ObjectTypeMapper.toGraphQLInputType(ObjectTypeMapper.java:78)
    at io.leangen.graphql.generator.mapping.common.ObjectTypeMapper.toGraphQLInputType(ObjectTypeMapper.java:33)
    at io.leangen.graphql.generator.mapping.common.CachingMapper.toGraphQLInputType(CachingMapper.java:41)
    at io.leangen.graphql.generator.OperationMapper.toGraphQLInputType(OperationMapper.java:256)
    at io.leangen.graphql.generator.OperationMapper.toGraphQLInputType(OperationMapper.java:241)
    at io.leangen.graphql.generator.mapping.common.ListMapper.toGraphQLInputType(ListMapper.java:28)
    at io.leangen.graphql.generator.OperationMapper.toGraphQLInputType(OperationMapper.java:256)
    at io.leangen.graphql.generator.OperationMapper.toGraphQLInputType(OperationMapper.java:241)
    at io.leangen.graphql.generator.OperationMapper.toGraphQLInputField(OperationMapper.java:228)
    at io.leangen.graphql.generator.mapping.common.ObjectTypeMapper.lambda$toGraphQLInputType$3(ObjectTypeMapper.java:78)
    at java.base/java.lang.Iterable.forEach(Iterable.java:75)
    at io.leangen.graphql.generator.mapping.common.ObjectTypeMapper.toGraphQLInputType(ObjectTypeMapper.java:78)
    at io.leangen.graphql.generator.mapping.common.ObjectTypeMapper.toGraphQLInputType(ObjectTypeMapper.java:33)
    at io.leangen.graphql.generator.mapping.common.CachingMapper.toGraphQLInputType(CachingMapper.java:41)
    at io.leangen.graphql.generator.OperationMapper.toGraphQLInputType(OperationMapper.java:256)
    at io.leangen.graphql.generator.OperationMapper.toGraphQLInputType(OperationMapper.java:241)
    at io.leangen.graphql.generator.OperationMapper.toGraphQLInputField(OperationMapper.java:228)
    at io.leangen.graphql.generator.mapping.common.ObjectTypeMapper.lambda$toGraphQLInputType$3(ObjectTypeMapper.java:78)
    at java.base/java.lang.Iterable.forEach(Iterable.java:75)
    at io.leangen.graphql.generator.mapping.common.ObjectTypeMapper.toGraphQLInputType(ObjectTypeMapper.java:78)
    at io.leangen.graphql.generator.mapping.common.ObjectTypeMapper.toGraphQLInputType(ObjectTypeMapper.java:33)
    at io.leangen.graphql.generator.mapping.common.CachingMapper.toGraphQLInputType(CachingMapper.java:41)
    at io.leangen.graphql.generator.OperationMapper.toGraphQLInputType(OperationMapper.java:256)
    at io.leangen.graphql.generator.OperationMapper.toGraphQLInputType(OperationMapper.java:241)
    at io.leangen.graphql.generator.OperationMapper.toGraphQLArgument(OperationMapper.java:265)
    at io.leangen.graphql.generator.OperationMapper.lambda$toGraphQLField$6(OperationMapper.java:169)
    at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
    at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)
    at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625)
    at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
    at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
    at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921)
    at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
    at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682)
    at io.leangen.graphql.generator.OperationMapper.toGraphQLField(OperationMapper.java:170)
    at io.leangen.graphql.generator.OperationMapper.toGraphQLField(OperationMapper.java:188)
    at io.leangen.graphql.generator.OperationMapper.lambda$generateMutations$2(OperationMapper.java:133)
    at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
    at java.base/java.util.Iterator.forEachRemaining(Iterator.java:133)
    at java.base/java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1845)
    at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
    at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
    at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921)
    at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
    at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682)
    at io.leangen.graphql.generator.OperationMapper.generateMutations(OperationMapper.java:134)
    at io.leangen.graphql.generator.OperationMapper.<init>(OperationMapper.java:89)
    at io.leangen.graphql.GraphQLSchemaGenerator.generate(GraphQLSchemaGenerator.java:998)

Any idea how to solve this?

Edit: tried with v0.12.1, and there it seems to work; need to check whether all my (other/transitive) dependencies are using the same major GraphQL version, and need to fix conflicting logging dependencies. Bear with me for now.

gjvoosten commented 1 year ago

I need v0.12.0 (since one of my other dependencies is still on graphql-java v19.2), but that one works as well. Closing this as "already fixed". :smile: