-
-
Notifications
You must be signed in to change notification settings - Fork 143
Closed
Labels
Description
Given:
package test
trait T
case class A(a:Int) extends T
case class X(x: Option[T])
When:
val om = new ObjectMapper with ScalaObjectMapper {
registerModule(DefaultScalaModule)
enableDefaultTypingAsProperty(ObjectMapper.DefaultTyping.OBJECT_AND_NON_CONCRETE, "_t")
}
val v = X(Some(A(1)))
val str = om.writeValueAsString(v)
println(str) // 1
val d = om.readValue[X](str) // 2
println(d)
Line 1
prints {"x":{"_t":"test.A","a":1}}
and line 2
crashes:
com.fasterxml.jackson.databind.exc.InvalidTypeIdException: Could not resolve type id 'test.A' as a subtype of [reference type, class scala.Option<test.T<[simple type, class test.T]>]: Not a subtype
at [Source: (String)"{"x":{"_t":"test.A","a":1}}"; line: 1, column: 12] (through reference chain: test.X["x"])
at com.fasterxml.jackson.databind.exc.InvalidTypeIdException.from(InvalidTypeIdException.java:43)
at com.fasterxml.jackson.databind.DeserializationContext.invalidTypeIdException(DeserializationContext.java:1628)
at com.fasterxml.jackson.databind.DatabindContext.resolveSubType(DatabindContext.java:200)
at com.fasterxml.jackson.databind.jsontype.impl.ClassNameIdResolver._typeFromId(ClassNameIdResolver.java:49)
at com.fasterxml.jackson.databind.jsontype.impl.ClassNameIdResolver.typeFromId(ClassNameIdResolver.java:44)
at com.fasterxml.jackson.databind.jsontype.impl.TypeDeserializerBase._findDeserializer(TypeDeserializerBase.java:156)
at com.fasterxml.jackson.databind.jsontype.impl.AsPropertyTypeDeserializer._deserializeTypedForId(AsPropertyTypeDeserializer.java:113)
at com.fasterxml.jackson.databind.jsontype.impl.AsPropertyTypeDeserializer.deserializeTypedFromObject(AsPropertyTypeDeserializer.java:97)
at com.fasterxml.jackson.databind.jsontype.impl.AsPropertyTypeDeserializer.deserializeTypedFromAny(AsPropertyTypeDeserializer.java:193)
at com.fasterxml.jackson.module.scala.deser.OptionDeserializer.deserializeWithType(OptionDeserializerModule.scala:71)
at com.fasterxml.jackson.module.scala.deser.OptionDeserializer.deserializeWithType(OptionDeserializerModule.scala:11)
at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:527)
at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeWithErrorWrapping(BeanDeserializer.java:528)
at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeUsingPropertyBased(BeanDeserializer.java:417)
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1280)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:326)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:159)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4001)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3030)
at com.fasterxml.jackson.module.scala.experimental.ScalaObjectMapper$class.readValue(ScalaObjectMapper.scala:190)
gaeljw