Skip to content
This repository was archived by the owner on Dec 19, 2023. It is now read-only.

Using Upload scalar doesn't work with input object #404

Open
ivans opened this issue Apr 27, 2020 · 10 comments
Open

Using Upload scalar doesn't work with input object #404

ivans opened this issue Apr 27, 2020 · 10 comments
Labels

Comments

@ivans
Copy link

ivans commented Apr 27, 2020

File upload works great if Upload is a direct input parameter of a query or nested in an array, but fails if it is nested.

Here are the examples to demonstrate:

with this in schema:

type Query {
    test1(input: Upload): ID!
    test2(input: [Upload]): ID!
    test3(input: FileInput): ID!
    test4(input: [FileInput]): ID!
}

scalar Upload

input FileInput {
    name: String!
    file: Upload
}

FileInput is mapped to this java class:

@lombok.Data
@lombok.NoArgsConstructor
public class FileInputDTO {

  String name;
  
  Part file;
}

The first two queries work great when called like this:

curl --location --request POST 'http://localhost:8080/graphql' \
--form 'operations={ "query": "query test1query($input: Upload) {test1 (input: $input) }", "variables": {"input": null } } }' \
--form 'map={ "file0": ["variables.input"] }' \
--form 'file0=@/home/ivan/Downloads/2020-02-13-raspbian-buster-full.zip'

curl --location --request POST 'http://localhost:8080/graphql' \
--form 'operations={ "query": "query test2query($input: [Upload]) {test2 (input: $input) }", "variables": {"input": [null, null] } } }' \
--form 'map={ "file0": ["variables.input.0"], "file1": ["variables.input.1"] }' \
--form 'file0=@/home/ivan/Slike/GOPR6667.MP4' \
--form 'file1=@/home/ivan/Slike/GOPR6665.MP4'

But the last two (with Upload contained in another input type fail:

# called this way:
curl --location --request POST 'http://localhost:8080/graphql' \
--form 'operations={ "query": "query test3query($input: FileInput) {test3 (input: $input) }", "variables": {"input": {"name": "file0.txt", "file": null } } }' \
--form 'map={ "file0": ["variables.input.file"] }' \
--form 'file0=@/home/ivan/Slike/s gopro/GOPR6667.MP4'

The exception that is thrown:

java.lang.IllegalArgumentException: Cannot construct instance of `javax.servlet.http.Part` (no Creators, like default construct, exist): abstract types either need to be mapped to concrete types, have custom deserializer, or contain additional type information
 at [Source: UNKNOWN; line: -1, column: -1] (through reference chain: hr.verox.engeon.model.dto.FileInputDTO["file"])
	at com.fasterxml.jackson.databind.ObjectMapper._convert(ObjectMapper.java:3922) ~[jackson-databind-2.10.1.jar:2.10.1]
	at com.fasterxml.jackson.databind.ObjectMapper.convertValue(ObjectMapper.java:3863) ~[jackson-databind-2.10.1.jar:2.10.1]
	at graphql.kickstart.tools.MethodFieldResolver$createDataFetcher$$inlined$forEachIndexed$lambda$1.invoke(MethodFieldResolver.kt:100) ~[graphql-java-tools-6.0.2.jar:na]
	at graphql.kickstart.tools.MethodFieldResolver$createDataFetcher$$inlined$forEachIndexed$lambda$1.invoke(MethodFieldResolver.kt:25) ~[graphql-java-tools-6.0.2.jar:na]
	at graphql.kickstart.tools.MethodFieldResolverDataFetcher.get(MethodFieldResolver.kt:201) ~[graphql-java-tools-6.0.2.jar:na]
	at graphql.execution.ExecutionStrategy.fetchField(ExecutionStrategy.java:272) ~[graphql-java-14.0.jar:na]
	at graphql.execution.ExecutionStrategy.resolveFieldWithInfo(ExecutionStrategy.java:200) ~[graphql-java-14.0.jar:na]
	at graphql.execution.AsyncExecutionStrategy.execute(AsyncExecutionStrategy.java:74) ~[graphql-java-14.0.jar:na]
	at graphql.execution.Execution.executeOperation(Execution.java:165) ~[graphql-java-14.0.jar:na]
	at graphql.execution.Execution.execute(Execution.java:106) ~[graphql-java-14.0.jar:na]
	at graphql.GraphQL.execute(GraphQL.java:623) ~[graphql-java-14.0.jar:na]
	at graphql.GraphQL.parseValidateAndExecute(GraphQL.java:556) ~[graphql-java-14.0.jar:na]
	at graphql.GraphQL.executeAsync(GraphQL.java:520) ~[graphql-java-14.0.jar:na]
	at graphql.kickstart.execution.GraphQLInvoker.executeAsync(GraphQLInvoker.java:26) ~[graphql-java-kickstart-9.1.0.jar:na]
	at graphql.kickstart.execution.GraphQLInvoker.query(GraphQLInvoker.java:38) ~[graphql-java-kickstart-9.1.0.jar:na]
	at graphql.kickstart.execution.GraphQLInvoker.query(GraphQLInvoker.java:31) ~[graphql-java-kickstart-9.1.0.jar:na]
	at graphql.kickstart.servlet.HttpRequestHandlerImpl.invoke(HttpRequestHandlerImpl.java:67) ~[graphql-java-servlet-9.1.0.jar:na]
	at graphql.kickstart.servlet.HttpRequestHandlerImpl.execute(HttpRequestHandlerImpl.java:52) ~[graphql-java-servlet-9.1.0.jar:na]
	at graphql.kickstart.servlet.HttpRequestHandlerImpl.handle(HttpRequestHandlerImpl.java:37) ~[graphql-java-servlet-9.1.0.jar:na]
	at graphql.kickstart.servlet.AbstractGraphQLHttpServlet.doRequest(AbstractGraphQLHttpServlet.java:147) ~[graphql-java-servlet-9.1.0.jar:na]
	at graphql.kickstart.servlet.AbstractGraphQLHttpServlet.doRequestAsync(AbstractGraphQLHttpServlet.java:137) ~[graphql-java-servlet-9.1.0.jar:na]
	at graphql.kickstart.servlet.AbstractGraphQLHttpServlet.doPost(AbstractGraphQLHttpServlet.java:169) ~[graphql-java-servlet-9.1.0.jar:na]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:660) ~[tomcat-embed-core-9.0.29.jar:9.0.29]

@oliemansm
Copy link
Member

This has been fixed in graphql-java-tools 6.0.0. You report this in graphql-java-servlet, but this is from the logs it's clear you're using graphql-java-tools as well, and probably using it together with the spring-boot-starter. In those cases register the issue int he graphql-spring-boot-starter project please.

For now try updating to the latest version of graphql-spring-boot-starter and let it pull in the latest version of graphql-java-tools and servlet. As said above it should already be fixed there, because this particular use case was part of that.

@ivans
Copy link
Author

ivans commented Apr 27, 2020

Thanks! I am on the latest version of graphql-spring-boot-starter. And I think all the other libraries are at latest versions:
com.graphql-java-kickstart:graphql-spring-boot-starter:jar:7.0.1
com.graphql-java:graphql-java:jar:14.0
com.graphql-java-kickstart:graphql-java-servlet:jar:9.1.0

@oliemansm
Copy link
Member

Hmm that's strange. There were some more changes after this, so could be it's changed in the snapshot release. If you have time, please check if that's true or not. Otherwise I'll have to take a look at it when I have the time.

I'll transfer this issue to the spring-boot project btw.

@oliemansm oliemansm transferred this issue from graphql-java-kickstart/graphql-java-servlet Apr 27, 2020
@oliemansm oliemansm changed the title Using Upload doesn't always work. Using Upload scalar doesn't work with input object Apr 27, 2020
@ivans
Copy link
Author

ivans commented Apr 27, 2020

Hmm that's strange. There were some more changes after this, so could be it's changed in the snapshot release. If you have time, please check if that's true or not. Otherwise I'll have to take a look at it when I have the time.

Same exception on 7.1.0-SNAPSHOT.

@maxdavidguenther
Copy link

I can confirm and have the same problem with graphql-java-tools:6.0.2. The problem is not actually with Jackson as the exceptions seems to indicate, but that the coercion isn't called for custom scalars within input types.

@antinodes
Copy link

I'm pretty sure I'm having the same or similar problem. I have a custom scalar GeoJson which wraps a GeoJson Geometry. If I use it in a query or as a direct input to a mutation it works great. However, if I use it nested in an input type with a mutation I get an error. As far as I can tell, my scalar is being coerced, but somewhere in graphql.kickstart.tools.MethodFieldResolverDataFetcher.get(MethodFieldResolver.kt:201) it is being serialized and deserialized and this ser/deser is dropping the type field from the json for the geometry.

scalar GeoJson

type Mutation {
    test1(geom: GeoJson!): String! #works
    test2(namedGeom: GeomWithName): String! #doesn't work
}

input GeomWithName {
    name: String!
    geom: GeoJson!
}

Sample Input:

mutation($geom: GeoJson!){
  test2(namedGeom: {name: "Foo", geom: $geom})
}

{"geom": {"type":"Point","coordinates":[19.335937499999996,35.460669951495305]}}
@AllArgsConstructor
@Builder(toBuilder = true)
@Data
@NoArgsConstructor
public class GeomWithName {
    String name;
    GeoJsonObject geom;
}
@Component
@RequiredArgsConstructor
@Slf4j
public class AlertEventMutationResolver implements GraphQLMutationResolver {
    CompletableFuture<String> test1(GeoJsonObject geom) {
        log.info(geom.toString());
        return CompletableFuture.completedFuture("Success");
    }

    CompletableFuture<String> test2(GeomWithName geom) {
        //Never gets here
        log.info(geom.toString());
        return CompletableFuture.completedFuture("Fails");
    }
}
n.g.e.SimpleDataFetcherExceptionHandler  : Exception while fetching data (/test2) : Missing type id when trying to resolve subtype of [simple type, class org.geojson.GeoJsonObject]: missing type id property 'type' (for POJO property 'geom')
 at [Source: UNKNOWN; line: -1, column: -1] (through reference chain: com.he360.alerting.events.GeomWithName["geom"])

java.lang.IllegalArgumentException: Missing type id when trying to resolve subtype of [simple type, class org.geojson.GeoJsonObject]: missing type id property 'type' (for POJO property 'geom')
 at [Source: UNKNOWN; line: -1, column: -1] (through reference chain: com.he360.alerting.events.GeomWithName["geom"])
	at com.fasterxml.jackson.databind.ObjectMapper._convert(ObjectMapper.java:4234) ~[jackson-databind-2.11.2.jar:2.11.2]
	at com.fasterxml.jackson.databind.ObjectMapper.convertValue(ObjectMapper.java:4175) ~[jackson-databind-2.11.2.jar:2.11.2]
	at graphql.kickstart.tools.MethodFieldResolver$createDataFetcher$$inlined$forEachIndexed$lambda$1.invoke(MethodFieldResolver.kt:100) ~[graphql-java-tools-6.0.2.jar:na]
	at graphql.kickstart.tools.MethodFieldResolver$createDataFetcher$$inlined$forEachIndexed$lambda$1.invoke(MethodFieldResolver.kt:25) ~[graphql-java-tools-6.0.2.jar:na]
	at graphql.kickstart.tools.MethodFieldResolverDataFetcher.get(MethodFieldResolver.kt:201) ~[graphql-java-tools-6.0.2.jar:na]
	at graphql.execution.instrumentation.dataloader.DataLoaderDispatcherInstrumentation.lambda$instrumentDataFetcher$0(DataLoaderDispatcherInstrumentation.java:86) ~[graphql-java-14.0.jar:na]
	at graphql.execution.ExecutionStrategy.fetchField(ExecutionStrategy.java:272) ~[graphql-java-14.0.jar:na]
	at graphql.execution.ExecutionStrategy.resolveFieldWithInfo(ExecutionStrategy.java:200) ~[graphql-java-14.0.jar:na]
	at graphql.execution.AsyncExecutionStrategy.execute(AsyncExecutionStrategy.java:74) ~[graphql-java-14.0.jar:na]
	at graphql.execution.Execution.executeOperation(Execution.java:165) ~[graphql-java-14.0.jar:na]
	at graphql.execution.Execution.execute(Execution.java:106) ~[graphql-java-14.0.jar:na]
	at graphql.GraphQL.execute(GraphQL.java:623) ~[graphql-java-14.0.jar:na]
	at graphql.GraphQL.parseValidateAndExecute(GraphQL.java:556) ~[graphql-java-14.0.jar:na]
	at graphql.GraphQL.executeAsync(GraphQL.java:520) ~[graphql-java-14.0.jar:na]
	at graphql.kickstart.execution.GraphQLInvoker.executeAsync(GraphQLInvoker.java:26) ~[graphql-java-kickstart-9.1.0.jar:na]
	at graphql.kickstart.spring.webflux.GraphQLController.executeRequest(GraphQLController.java:35) ~[graphql-kickstart-spring-webflux-7.0.1.jar:na]
	at graphql.kickstart.spring.AbstractGraphQLController.graphqlPOST(AbstractGraphQLController.java:56) ~[graphql-kickstart-spring-support-7.0.1.jar:na]
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
	at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
	at org.springframework.web.reactive.result.method.InvocableHandlerMethod.lambda$invoke$0(InvocableHandlerMethod.java:147) ~[spring-webflux-5.2.8.RELEASE.jar:5.2.8.RELEASE]
	at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:118) ~[reactor-core-3.3.9.RELEASE.jar:3.3.9.RELEASE]
	at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1782) ~[reactor-core-3.3.9.RELEASE.jar:3.3.9.RELEASE]
	at reactor.core.publisher.MonoZip$ZipCoordinator.signal(MonoZip.java:247) ~[reactor-core-3.3.9.RELEASE.jar:3.3.9.RELEASE]
	at reactor.core.publisher.MonoZip$ZipInner.onNext(MonoZip.java:329) ~[reactor-core-3.3.9.RELEASE.jar:3.3.9.RELEASE]
	at reactor.core.publisher.MonoPeekTerminal$MonoTerminalPeekSubscriber.onNext(MonoPeekTerminal.java:173) ~[reactor-core-3.3.9.RELEASE.jar:3.3.9.RELEASE]
	at reactor.core.publisher.FluxDefaultIfEmpty$DefaultIfEmptySubscriber.onNext(FluxDefaultIfEmpty.java:92) ~[reactor-core-3.3.9.RELEASE.jar:3.3.9.RELEASE]
	at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onNext(FluxOnErrorResume.java:73) ~[reactor-core-3.3.9.RELEASE.jar:3.3.9.RELEASE]
	at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onNext(FluxMapFuseable.java:121) ~[reactor-core-3.3.9.RELEASE.jar:3.3.9.RELEASE]
	at reactor.core.publisher.FluxContextStart$ContextStartSubscriber.onNext(FluxContextStart.java:96) ~[reactor-core-3.3.9.RELEASE.jar:3.3.9.RELEASE]
	at reactor.core.publisher.FluxMapFuseable$MapFuseableConditionalSubscriber.onNext(FluxMapFuseable.java:287) ~[reactor-core-3.3.9.RELEASE.jar:3.3.9.RELEASE]
	at reactor.core.publisher.FluxFilterFuseable$FilterFuseableConditionalSubscriber.onNext(FluxFilterFuseable.java:330) ~[reactor-core-3.3.9.RELEASE.jar:3.3.9.RELEASE]
	at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1782) ~[reactor-core-3.3.9.RELEASE.jar:3.3.9.RELEASE]
	at reactor.core.publisher.MonoCollect$CollectSubscriber.onComplete(MonoCollect.java:152) ~[reactor-core-3.3.9.RELEASE.jar:3.3.9.RELEASE]
	at reactor.core.publisher.FluxMap$MapSubscriber.onComplete(FluxMap.java:136) ~[reactor-core-3.3.9.RELEASE.jar:3.3.9.RELEASE]
	at reactor.core.publisher.FluxPeek$PeekSubscriber.onComplete(FluxPeek.java:252) ~[reactor-core-3.3.9.RELEASE.jar:3.3.9.RELEASE]
	at reactor.core.publisher.FluxMap$MapSubscriber.onComplete(FluxMap.java:136) ~[reactor-core-3.3.9.RELEASE.jar:3.3.9.RELEASE]
	at reactor.netty.channel.FluxReceive.onInboundComplete(FluxReceive.java:378) ~[reactor-netty-0.9.11.RELEASE.jar:0.9.11.RELEASE]
	at reactor.netty.channel.ChannelOperations.onInboundComplete(ChannelOperations.java:373) ~[reactor-netty-0.9.11.RELEASE.jar:0.9.11.RELEASE]
	at reactor.netty.http.server.HttpServerOperations.onInboundNext(HttpServerOperations.java:492) ~[reactor-netty-0.9.11.RELEASE.jar:0.9.11.RELEASE]
	at reactor.netty.channel.ChannelOperationsHandler.channelRead(ChannelOperationsHandler.java:96) ~[reactor-netty-0.9.11.RELEASE.jar:0.9.11.RELEASE]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final]
	at reactor.netty.http.server.HttpTrafficHandler.channelRead(HttpTrafficHandler.java:214) ~[reactor-netty-0.9.11.RELEASE.jar:0.9.11.RELEASE]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireChannelRead(CombinedChannelDuplexHandler.java:436) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:324) ~[netty-codec-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:296) ~[netty-codec-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:251) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:163) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:714) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:650) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:576) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989) ~[netty-common-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-common-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[netty-common-4.1.51.Final.jar:4.1.51.Final]
	at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na]
Caused by: com.fasterxml.jackson.databind.exc.InvalidTypeIdException: Missing type id when trying to resolve subtype of [simple type, class org.geojson.GeoJsonObject]: missing type id property 'type' (for POJO property 'geom')
 at [Source: UNKNOWN; line: -1, column: -1] (through reference chain: com.he360.alerting.events.GeomWithName["geom"])
	at com.fasterxml.jackson.databind.exc.InvalidTypeIdException.from(InvalidTypeIdException.java:43) ~[jackson-databind-2.11.2.jar:2.11.2]
	at com.fasterxml.jackson.databind.DeserializationContext.missingTypeIdException(DeserializationContext.java:1794) ~[jackson-databind-2.11.2.jar:2.11.2]
	at com.fasterxml.jackson.databind.DeserializationContext.handleMissingTypeId(DeserializationContext.java:1323) ~[jackson-databind-2.11.2.jar:2.11.2]
	at com.fasterxml.jackson.databind.jsontype.impl.TypeDeserializerBase._handleMissingTypeId(TypeDeserializerBase.java:303) ~[jackson-databind-2.11.2.jar:2.11.2]
	at com.fasterxml.jackson.databind.jsontype.impl.AsPropertyTypeDeserializer._deserializeTypedUsingDefaultImpl(AsPropertyTypeDeserializer.java:166) ~[jackson-databind-2.11.2.jar:2.11.2]
	at com.fasterxml.jackson.databind.jsontype.impl.AsPropertyTypeDeserializer.deserializeTypedFromObject(AsPropertyTypeDeserializer.java:107) ~[jackson-databind-2.11.2.jar:2.11.2]
	at com.fasterxml.jackson.databind.deser.AbstractDeserializer.deserializeWithType(AbstractDeserializer.java:254) ~[jackson-databind-2.11.2.jar:2.11.2]
	at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:138) ~[jackson-databind-2.11.2.jar:2.11.2]
	at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:371) ~[jackson-databind-2.11.2.jar:2.11.2]
	at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:164) ~[jackson-databind-2.11.2.jar:2.11.2]
	at com.fasterxml.jackson.databind.ObjectMapper._convert(ObjectMapper.java:4229) ~[jackson-databind-2.11.2.jar:2.11.2]
	... 68 common frames omitted

@oliemansm oliemansm added the bug label Dec 19, 2020
@oliemansm
Copy link
Member

@vojtapol Is this an issue that requires a fix in graphql-java-tools?

@oliemansm
Copy link
Member

graphql-java-tools 6.3.0 contains a fix for scalar issues: graphql-java-kickstart/graphql-java-tools#453. This has been released with graphql-spring-boot version 8.1.0. Can somebody check if that resolves this issue now too?

@oryan-block
Copy link

Opened a new issue for this in java-tools: graphql-java-kickstart/graphql-java-tools#466

@thushar10
Copy link

Is it even appropriate to use the graphql-java-servlet in a netty server? How can it be achieved on a netty server?

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Projects
None yet
Development

No branches or pull requests

6 participants