Closed
Description
In the following code, parsing the non-inner case classes with Foo works, but parsing the inner case classes with Bar fails.
val om = new com.fasterxml.jackson.databind.ObjectMapper
om.registerModule(com.fasterxml.jackson.module.scala.DefaultScalaModule)
case class FooTuple(s:String,i:Int)
class FooParse {
def parse(json:String) = om.readValue(json,classOf[FooTuple])
}
new FooParse().parse("""{"s":"Hello","i":42}""")
class BarParse {
case class BarTuple(s:String,i:Int)
def parse(json:String) = om.readValue(json, classOf[BarTuple])
}
new BarParse().parse("""{"s":"Hello","i":42}""")
Foo parse goes like this:
scala> new FooParse().parse("""{"s":"Hello","i":42}""")
res16: FooTuple = FooTuple(Hello,42)
Bar parse like this:
scala> new BarParse().parse("""{"s":"Hello","i":42}""")
com.fasterxml.jackson.databind.JsonMappingException: Argument #0 of constructor [constructor for BarParse$BarTuple, annotations: [null]] has no property name annotation; must have name when multiple-paramater constructor annotated as Creator
at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializerCache.java:252)
at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCacheValueDeserializer(DeserializerCache.java:227)
at com.fasterxml.jackson.databind.deser.DeserializerCache.findValueDeserializer(DeserializerCache.java:126)
at com.fasterxml.jackson.databind.DeserializationContext.findRootValueDeserializer(DeserializationContext.java:331)
at com.fasterxml.jackson.databind.ObjectMapper._findRootDeserializer(ObjectMapper.java:2679)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:2573)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:1810)
at BarParse.parse(<console>:20)
at .<init>(<console>:19)
at .<clinit>(<console>)
at .<init>(<console>:11)
at .<clinit>(<console>)
at $print(<console>)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at scala.tools.nsc.interpreter.IMain$ReadEvalPrint.call(IMain.scala:704)
at scala.tools.nsc.interpreter.IMain$Request$$anonfun$14.apply(IMain.scala:920)
at scala.tools.nsc.interpreter.Line$$anonfun$1.apply$mcV$sp(Line.scala:43)
at scala.tools.nsc.io.package$$anon$2.run(package.scala:25)
at java.lang.Thread.run(Thread.java:680)
Caused by: java.lang.IllegalArgumentException: Argument #0 of constructor [constructor for BarParse$BarTuple, annotations: [null]] has no property name annotation; must have name when multiple-paramater constructor annotated as Creator
at com.fasterxml.jackson.databind.deser.BasicDeserializerFactory._addDeserializerConstructors(BasicDeserializerFactory.java:450)
at com.fasterxml.jackson.databind.deser.BasicDeserializerFactory._constructDefaultValueInstantiator(BasicDeserializerFactory.java:352)
at com.fasterxml.jackson.databind.deser.BasicDeserializerFactory.findValueInstantiator(BasicDeserializerFactory.java:293)
at com.fasterxml.jackson.databind.deser.BeanDeserializerFactory.buildBeanDeserializer(BeanDeserializerFactory.java:260)
at com.fasterxml.jackson.databind.deser.BeanDeserializerFactory.createBeanDeserializer(BeanDeserializerFactory.java:168)
at com.fasterxml.jackson.databind.deser.DeserializerCache._createDeserializer(DeserializerCache.java:363)
at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializerCache.java:247)
... 21 more
Metadata
Metadata
Assignees
Labels
No labels