FasterXML / jackson-module-scala

Add-on module for Jackson (https://github.com/FasterXML/jackson) to support Scala-specific datatypes
Apache License 2.0
500 stars 141 forks source link

error when deserializing yaml #653

Closed chenbo-again closed 10 months ago

chenbo-again commented 10 months ago
  val p = Person("cb", 12, List("h1", "h2"), true)
  val mapper = new ObjectMapper(new YAMLFactory())
  mapper.registerModule(DefaultScalaModule)

  val str = mapper.writeValueAsString(p)
  println(str)
  val p1 = mapper.readValue(str, classOf[Person])
  println(p1.age, p1.habbit, p1.isStudent, p1.name)

output

---
name: "cb"
age: 12
habbit:
- "h1"
- "h2"
isStudent: true

Exception in thread "main" com.fasterxml.jackson.databind.JsonMappingException: (was java.lang.NullPointerException) (through reference chain: fusespinal.Person["age"])
    at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:390)
    at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:349)
    at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.wrapAndThrow(BeanDeserializerBase.java:1822)
    at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeWithErrorWrapping(BeanDeserializer.java:567)
    at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeUsingPropertyBased(BeanDeserializer.java:449)
    at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1405)
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:362)
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:195)
    at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:322)
    at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4593)
    at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3548)
    at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3516)
    at fusespinal.MyTopLevelVerilog$.delayedEndpoint$fusespinal$MyTopLevelVerilog$1(MyTopLevel.scala:63)
    at fusespinal.MyTopLevelVerilog$delayedInit$body.apply(MyTopLevel.scala:56)
    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$adapted(App.scala:80)
    at scala.collection.immutable.List.foreach(List.scala:431)
    at scala.App.main(App.scala:80)
    at scala.App.main$(App.scala:78)
    at fusespinal.MyTopLevelVerilog$.main(MyTopLevel.scala:56)
    at fusespinal.MyTopLevelVerilog.main(MyTopLevel.scala)
Caused by: java.lang.NullPointerException
    at com.fasterxml.jackson.core.io.NumberInput.parseInt(NumberInput.java:37)
    at com.fasterxml.jackson.core.util.TextBuffer.contentsAsInt(TextBuffer.java:543)
    at com.fasterxml.jackson.core.base.ParserBase._parseIntValue(ParserBase.java:840)
    at com.fasterxml.jackson.core.base.ParserBase.getIntValue(ParserBase.java:680)
    at com.fasterxml.jackson.databind.deser.std.NumberDeserializers$IntegerDeserializer.deserialize(NumberDeserializers.java:526)
    at com.fasterxml.jackson.databind.deser.std.NumberDeserializers$IntegerDeserializer.deserialize(NumberDeserializers.java:506)
    at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:542)
    at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeWithErrorWrapping(BeanDeserializer.java:565)
    ... 19 more

and it works well for json

pjfanning commented 10 months ago

I tested this in a branch - see https://github.com/FasterXML/jackson-module-scala/tree/yaml-spec (latest commits).

No exception happens.

This branch uses the latest code (basically 2.16.0-rc1).

cowtowncoder commented 10 months ago

@chenbo-again going forward, it'd be very useful to include Jackson version you are using when reporting issues. And definitely trying with a recently released version (ideally last available).