Closed
Description
I'm using version 2.9.8 and found that the JsonScalaEnumeration annotation does not get picked up when using a Mixin. Here is code that demonstrates the behavior.
object TestEnum extends Enumeration {
type TestEnum = Value
val Value1, Value2 = Value
}
class TestEnumClass extends TypeReference[TestEnum.type]
case class TestObject1(@JsonScalaEnumeration(classOf[TestEnumClass]) field: TestEnum)
case class TestObject2(field: TestEnum)
abstract class TestObject2Mixin {
@JsonScalaEnumeration(classOf[TestEnumClass]) val field: TestEnum = null
}
object JacksonBug extends App {
val mapper = new ObjectMapper() with ScalaObjectMapper
mapper.registerModule(DefaultScalaModule)
mapper.addMixIn(classOf[TestObject2], classOf[TestObject2Mixin])
val json = """{"field": "Value1"}"""
val obj1 = mapper.readValue[TestObject1](json)
println(s"With annotation: $obj1")
val obj2 = mapper.readValue[TestObject2](json)
println(s"With mixin: $obj2")
}
OUTPUT
With annotation: TestObject1(Value1)
Exception in thread "main" com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `scala.Enumeration$Value` out of VALUE_STRING token
at [Source: (String)"{"field": "Value1"}"; line: 1, column: 11] (through reference chain: TestObject2["field"])
at com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:63)
at com.fasterxml.jackson.databind.DeserializationContext.reportInputMismatch(DeserializationContext.java:1343)
at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1139)
at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1093)
at com.fasterxml.jackson.module.scala.deser.EnumerationDeserializer.deserialize(EnumerationDeserializerModule.scala:24)
at com.fasterxml.jackson.module.scala.deser.EnumerationDeserializer.deserialize(EnumerationDeserializerModule.scala:21)
at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:530)
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:1287)
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:4013)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3042)
at com.fasterxml.jackson.module.scala.experimental.ScalaObjectMapper.readValue(ScalaObjectMapper.scala:191)
at com.fasterxml.jackson.module.scala.experimental.ScalaObjectMapper.readValue$(ScalaObjectMapper.scala:190)
at JacksonBug$$anon$1.readValue(JacksonBug.scala:23)
at JacksonBug$.delayedEndpoint$JacksonBug$1(JacksonBug.scala:32)
at JacksonBug$delayedInit$body.apply(JacksonBug.scala:22)
at scala.Function0.apply$mcV$sp(Function0.scala:34)
at scala.Function0.apply$mcV$sp$(Function0.scala:34)
at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:12)
at scala.App.$anonfun$main$1$adapted(App.scala:76)
at scala.collection.immutable.List.foreach(List.scala:388)
at scala.App.main(App.scala:76)
at scala.App.main$(App.scala:74)
at JacksonBug$.main(JacksonBug.scala:22)
at JacksonBug.main(JacksonBug.scala)