Skip to content

Exception in thread "main" com.fasterxml.jackson.databind.JsonMappingException: Invalid type=INT #526

@cozima0210

Description

@cozima0210

When I use this library with my scala project, below Exception occurs. It seems that it occurs when I try to deserialize a value of BigDecimal serialized by Messagepack.

scalaVersion := "2.13.3"

libraryDependencies ++= Seq(
  "com.fasterxml.jackson.module" %% "jackson-module-scala"      % "2.11.1",
  "org.msgpack"                  % "jackson-dataformat-msgpack" % "0.8.20"
)
import com.fasterxml.jackson.databind.{DeserializationFeature, ObjectMapper}
import com.fasterxml.jackson.module.scala.DefaultScalaModule
import com.fasterxml.jackson.module.scala.experimental.ScalaObjectMapper
import org.msgpack.jackson.dataformat.MessagePackFactory

object Main extends App {

  case class Hoge(d: BigDecimal)

  val obj = Hoge(BigDecimal(0))

  val mapper = new ObjectMapper(new MessagePackFactory) with ScalaObjectMapper
  mapper.registerModule(DefaultScalaModule)
  mapper.enable(DeserializationFeature.USE_BIG_DECIMAL_FOR_FLOATS)

  val bytes = mapper.writeValueAsBytes(obj)

  val hoge = mapper.readValue[Hoge](bytes)
}
Exception in thread "main" com.fasterxml.jackson.databind.JsonMappingException: Invalid type=INT (through reference chain: Main$Hoge["d"])
	at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:397)
	at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:356)
	at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.wrapAndThrow(BeanDeserializerBase.java:1726)
	at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeWithErrorWrapping(BeanDeserializer.java:537)
	at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeUsingPropertyBased(BeanDeserializer.java:419)
	at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1322)
	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:4482)
	at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3529)
	at com.fasterxml.jackson.module.scala.ScalaObjectMapper.readValue(ScalaObjectMapper.scala:203)
	at com.fasterxml.jackson.module.scala.ScalaObjectMapper.readValue$(ScalaObjectMapper.scala:202)
	at Main$$anon$1.readValue(Main.scala:13)
	at Main$.delayedEndpoint$Main$1(Main.scala:21)
	at Main$delayedInit$body.apply(Main.scala:7)
	at scala.Function0.apply$mcV$sp(Function0.scala:39)
	at scala.Function0.apply$mcV$sp$(Function0.scala:39)
	at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:17)
	at scala.App.$anonfun$main$1(App.scala:73)
	at scala.App.$anonfun$main$1$adapted(App.scala:73)
	at scala.collection.IterableOnceOps.foreach(IterableOnce.scala:553)
	at scala.collection.IterableOnceOps.foreach$(IterableOnce.scala:551)
	at scala.collection.AbstractIterable.foreach(Iterable.scala:920)
	at scala.App.main(App.scala:73)
	at scala.App.main$(App.scala:71)
	at Main$.main(Main.scala:7)
	at Main.main(Main.scala)
Caused by: java.lang.IllegalStateException: Invalid type=INT
	at org.msgpack.jackson.dataformat.MessagePackParser.getText(MessagePackParser.java:387)
	at com.fasterxml.jackson.module.scala.deser.BigNumberDeserializer.deserialize(ScalaNumberDeserializersModule.scala:20)
	at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:542)
	at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeWithErrorWrapping(BeanDeserializer.java:535)
	... 23 more

I have already found that the workaround is to fix getText in MessagePackParser.java(msgpack/msgpack-java) like below.
cozima0210@d11ecc5

But I know that there is another workaround to solve it. It is to fix deserialize in ScalaNumberDeserializersModule.scala(FasterXML/jackson-module-scala) like below.
cozima0210/jackson-module-scala@a6f7420

Therefore, I want to hear you which repositories I should send PR. Thanks.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions