leangen / graphql-spqr

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

NoSuchMethodError when creating mutation with custom type #397

Closed tcarisland closed 11 months ago

tcarisland commented 3 years ago

I'm trying to create a Mutation using a custom type, but there seems to be a dependency crash causing a serialization error.

@GraphQLMutation(name ="task") public TaskDTO createTask(@GraphQLArgument(name = "entranceId") String entranceId, @GraphQLArgument(name = "task") MyTask task) { ... }

I tried using the exact same Jackson version as this project uses in gradle with

configurations.all { resolutionStrategy.eachDependency { DependencyResolveDetails details -> if (details.requested.group == 'com.fasterxml.jackson.core' && details.requested.name == 'jackson-core') { details.useVersion '2.12.1' details.because 'use specific version of jackson for all imports' } } }

But I still get the same error.

Exception in thread "main" java.lang.NoSuchMethodError: com.fasterxml.jackson.databind.util.BeanUtil.okNameForSetter(Lcom/fasterxml/jackson/databind/introspect/AnnotatedMethod;)Ljava/lang/String; at com.fasterxml.jackson.module.jaxb.JaxbAnnotationIntrospector.findNameForDeserialization(JaxbAnnotationIntrospector.java:1008) at com.fasterxml.jackson.databind.introspect.AnnotationIntrospectorPair.findNameForDeserialization(AnnotationIntrospectorPair.java:775) at com.fasterxml.jackson.databind.introspect.AnnotationIntrospectorPair.findNameForDeserialization(AnnotationIntrospectorPair.java:777) at com.fasterxml.jackson.databind.introspect.AnnotationIntrospectorPair.findNameForDeserialization(AnnotationIntrospectorPair.java:777) at com.fasterxml.jackson.databind.introspect.POJOPropertiesCollector._addSetterMethod(POJOPropertiesCollector.java:790) at com.fasterxml.jackson.databind.introspect.POJOPropertiesCollector._addMethods(POJOPropertiesCollector.java:689) at com.fasterxml.jackson.databind.introspect.POJOPropertiesCollector.collectAll(POJOPropertiesCollector.java:422) at com.fasterxml.jackson.databind.introspect.POJOPropertiesCollector.getPropertyMap(POJOPropertiesCollector.java:386) at com.fasterxml.jackson.databind.introspect.POJOPropertiesCollector.getProperties(POJOPropertiesCollector.java:233) at com.fasterxml.jackson.databind.introspect.BasicBeanDescription._properties(BasicBeanDescription.java:164) at com.fasterxml.jackson.databind.introspect.BasicBeanDescription.findProperties(BasicBeanDescription.java:239) at io.leangen.graphql.metadata.strategy.value.jackson.JacksonValueMapper.getInputFields(JacksonValueMapper.java:117) 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.toGraphQLArgument(OperationMapper.java:265) at io.leangen.graphql.generator.OperationMapper.lambda$toGraphQLField$6(OperationMapper.java:169) at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193) at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175) at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1382) at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481) at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471) 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 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.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193) at java.util.Iterator.forEachRemaining(Iterator.java:116) at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801) at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481) at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471) 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 io.leangen.graphql.generator.OperationMapper.generateMutations(OperationMapper.java:134) at io.leangen.graphql.generator.OperationMapper.(OperationMapper.java:89) at io.leangen.graphql.GraphQLSchemaGenerator.generate(GraphQLSchemaGenerator.java:998) at se.ain.teleq.servlet.graphql.GraphQLProvider.main(GraphQLProvider.java:51)

Any ideas on how to fix this?

tcarisland commented 3 years ago

I found a temporary solution. This library depends on a very specific Jackson-library, I got a different problem with the latest version than if I had a too old version. To override the imports in gradle I had to add:

configurations.all { resolutionStrategy.eachDependency { DependencyResolveDetails details -> if (details.requested.group == 'com.fasterxml.jackson.module' && details.requested.name == 'jackson-module-jaxb-annotations') { details.useVersion '2.10.0' details.because 'use specific version of jackson for all imports' } } }