Skip to content

[Scala Worksheet] JsonMappingException Argument of constructor has no property name annotation #199

@harcek

Description

@harcek

Issue from the JsonMappingException family, but most probably it is not duplicate of them, since no release fixes it.
Environment: Scala 10.4, JIdea 13.1.3, tested with jackson module scala versions 2.2.2,2.3.2, 2.4.5, 2.5.2 with identical behaviour. The code works if run as regular Scala.

import com.fasterxml.jackson.databind.{DeserializationFeature, ObjectMapper}
import com.fasterxml.jackson.module.scala.DefaultScalaModule
import com.fasterxml.jackson.module.scala.experimental.ScalaObjectMapper;

val mapper = new ObjectMapper() with ScalaObjectMapper
mapper.registerModule(DefaultScalaModule)
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)

case class Person(name: String, age: Int)
case class Group(name: String, persons: Seq[Person], leader: Person)

val groupJson: String = """{"name":"Scala ppl","persons":[{"name":"Jeroen","age":26},{"name":"Martin","age":54}],"leader":{"name":"Martin","age":54}}"""

val nieco: Group = mapper.readValue[Group](groupJson)
println(Group)

Worksheet results

import com.fasterxml.jackson.databind.{DeserializationFeature, ObjectMapper}
import com.fasterxml.jackson.module.scala.DefaultScalaModule
import com.fasterxml.jackson.module.scala.experimental.ScalaObjectMapper

mapper: com.fasterxml.jackson.databind.ObjectMapper with com.fasterxml.jackson.module.scala.experimental.ScalaObjectMapper = $anon$1@44d0b8cf
res0: com.fasterxml.jackson.databind.ObjectMapper = $anon$1@44d0b8cf
res1: com.fasterxml.jackson.databind.ObjectMapper = $anon$1@44d0b8cf

defined class Person
defined class Group

groupJson: String = {"name":"Scala ppl","persons":[{"name":"Jeroen","age":26},{"name":"Martin","age":54}],"leader":{"name":"Martin","age":54}}

com.fasterxml.jackson.databind.JsonMappingException: Argument #0 of constructor [constructor for A$A0$A$A0$Group, annotations: [null]] has no property name annotation; must have name when multiple-parameter constructor annotated as Creator
    at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2([nw] json-unmarshall-group.sc3788296715618745837.tmp:262)
    at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCacheValueDeserializer([nw] json-unmarshall-group.sc3788296715618745837.tmp:237)
    at com.fasterxml.jackson.databind.deser.DeserializerCache.findValueDeserializer([nw] json-unmarshall-group.sc3788296715618745837.tmp:138)
    at com.fasterxml.jackson.databind.DeserializationContext.findRootValueDeserializer([nw] json-unmarshall-group.sc3788296715618745837.tmp:390)
    at com.fasterxml.jackson.databind.ObjectMapper._findRootDeserializer([nw] json-unmarshall-group.sc3788296715618745837.tmp:3165)
    at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose([nw] json-unmarshall-group.sc3788296715618745837.tmp:3058)
    at com.fasterxml.jackson.databind.ObjectMapper.readValue([nw] json-unmarshall-group.sc3788296715618745837.tmp:2171)
    at com.fasterxml.jackson.module.scala.experimental.ScalaObjectMapper$class.readValue([nw] json-unmarshall-group.sc3788296715618745837.tmp:176)
    at #worksheet#.$anon$1.readValue([nw] json-unmarshall-group.sc3788296715618745837.tmp:3)
    at #worksheet#.nieco$lzycompute([nw] json-unmarshall-group.sc3788296715618745837.tmp:12)
    at #worksheet#.nieco([nw] json-unmarshall-group.sc3788296715618745837.tmp:12)
    at #worksheet#.#worksheet#([nw] json-unmarshall-group.sc3788296715618745837.tmp:12)
Caused by: java.lang.IllegalArgumentException: Argument #0 of constructor [constructor for A$A0$A$A0$Group, annotations: [null]] has no property name annotation; must have name when multiple-parameter constructor annotated as Creator
    at com.fasterxml.jackson.databind.deser.BasicDeserializerFactory.findValueInstantiator(BasicDeserializerFactory.java:286)
    at com.fasterxml.jackson.databind.deser.BeanDeserializerFactory.buildBeanDeserializer(BeanDeserializerFactory.java:266)
    at com.fasterxml.jackson.databind.deser.BeanDeserializerFactory.createBeanDeserializer(BeanDeserializerFactory.java:168)
    at com.fasterxml.jackson.databind.deser.DeserializerCache._createDeserializer2(DeserializerCache.java:399)
    at com.fasterxml.jackson.databind.deser.DeserializerCache._createDeserializer(DeserializerCache.java:348)
    at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializerCache.java:261)
    at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCacheValueDeserializer(DeserializerCache.java:241)
    at com.fasterxml.jackson.databind.deser.DeserializerCache.findValueDeserializer(DeserializerCache.java:142)
    at com.fasterxml.jackson.databind.DeserializationContext.findRootValueDeserializer(DeserializationContext.java:394)
    at com.fasterxml.jackson.databind.ObjectMapper._findRootDeserializer(ObjectMapper.java:3169)
    at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3062)
    at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2175)
    at com.fasterxml.jackson.module.scala.experimental.ScalaObjectMapper$class.readValue(ScalaObjectMapper.scala:180)
    at A$A0$A$A0$$anon$1.readValue([nw] json-unmarshall-group.sc3788296715618745837.tmp:7)
    at A$A0$A$A0.nieco$lzycompute([nw] json-unmarshall-group.sc3788296715618745837.tmp:16)
    at A$A0$A$A0.nieco([nw] json-unmarshall-group.sc3788296715618745837.tmp:16)
    at A$A0$A$A0.get$$instance$$nieco([nw] json-unmarshall-group.sc3788296715618745837.tmp:16)
    at A$A0$.main([nw] json-unmarshall-group.sc3788296715618745837.tmp:44)
    at A$A0.main([nw] json-unmarshall-group.sc3788296715618745837.tmp)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
Output exceeds cutoff limit.

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