Skip to content

JsonScalaEnumeration annotation not picked up when using a Mixin #399

Closed
@seanrohead

Description

@seanrohead

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)

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions