-
-
Notifications
You must be signed in to change notification settings - Fork 143
Closed
Description
Now that Scala 3 is in Milestone releases (https://dotty.epfl.ch/blog/2020/11/09/scala3-m1.html) it would be great if we can support Scala 3.
I tried to make it work with the dottyCompat
mode in the sbt-dotty
plugin (https://scalacenter.github.io/scala-3-migration-guide/docs/tutorials/sbt-migration.html) but then things start to break :)
The following snippet works on Scala 2.x, but fails with Scala 3.0.0-M1.
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.module.scala.DefaultScalaModule
case class T(x: String)
val mapper = new ObjectMapper()
mapper.registerModule(DefaultScalaModule)
val result: T = mapper.readValue("""{"x": "Hello"}""", classOf[T])
fails with:
com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of `T` (although at least one Creator exists): cannot deserialize from Object value (no delegate- or property-based Creator)
at [Source: (String)"{"x": "Hello"}"; line: 1, column: 2]
at com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:63)
at com.fasterxml.jackson.databind.DeserializationContext.reportInputMismatch(DeserializationContext.java:1455)
at com.fasterxml.jackson.databind.DeserializationContext.handleMissingInstantiator(DeserializationContext.java:1081)
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1332)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:331)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:164)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4526)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3468)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3436)
at Json$.run(main.scala:12)
at run.main(main.scala:4)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at sbt.Run.invokeMain(Run.scala:115)
at sbt.Run.execute$1(Run.scala:79)
at sbt.Run.$anonfun$runWithLoader$4(Run.scala:92)
at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23)
at sbt.util.InterfaceUtil$$anon$1.get(InterfaceUtil.scala:10)
at sbt.TrapExit$App.run(TrapExit.scala:257)
at java.lang.Thread.run(Thread.java:748)
This is the scastie to play with: https://scastie.scala-lang.org/2dYNr8u9TciEOU9rOCQJPQ
plokhotnyuk, gaeljw and grzegorz-bielski