-2

I am trying to run the code in this link but i get the following error. not sure what i am doing wrong.

Using Jackson to (De)-serialize a Scala Case Class

/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/bin/java
"-javaagent:/Users/Jaisantosh/Library/Application
Support/JetBrains/Toolbox/apps/IDEA-C/ch-0/181.4668.68/IntelliJ IDEA
CE.app/Contents/lib/idea_rt.jar=49300:/Users/Jaisantosh/Library/Application
Support/JetBrains/Toolbox/apps/IDEA-C/ch-0/181.4668.68/IntelliJ IDEA
CE.app/Contents/bin" -Dfile.encoding=UTF-8 -classpath
/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/deploy.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/ext/cldrdata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/ext/dnsns.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/ext/jaccess.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/ext/jfxrt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/ext/localedata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/ext/nashorn.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/ext/sunec.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/ext/sunjce_provider.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/ext/sunpkcs11.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/ext/zipfs.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/javaws.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/jce.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/jfr.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/jfxswt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/jsse.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/management-agent.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/plugin.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/resources.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/rt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/lib/ant-javafx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/lib/dt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/lib/javafx-mx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/lib/jconsole.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/lib/packager.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/lib/sa-jdi.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/lib/tools.jar:/Users/Jaisantosh/Desktop/springapps/prsr/target/scala-2.12/classes:/Users/Jaisantosh/.sbt/boot/scala-2.12.6/lib/scala-library.jar:/Users/Jaisantosh/.sbt/boot/scala-2.12.6/lib/scala-reflect.jar:/Users/Jaisantosh/.ivy2/cache/com.thoughtworks.paranamer/paranamer/bundles/paranamer-2.8.jar:/Users/Jaisantosh/.ivy2/cache/com.fasterxml.jackson.module/jackson-module-scala_2.12/bundles/jackson-module-scala_2.12-2.9.5.jar:/Users/Jaisantosh/.ivy2/cache/com.fasterxml.jackson.module/jackson-module-paranamer/bundles/jackson-module-paranamer-2.9.5.jar:/Users/Jaisantosh/.ivy2/cache/com.fasterxml.jackson.core/jackson-databind/bundles/jackson-databind-2.9.5.jar:/Users/Jaisantosh/.ivy2/cache/com.fasterxml.jackson.core/jackson-core/bundles/jackson-core-2.9.5.jar:/Users/Jaisantosh/.ivy2/cache/com.fasterxml.jackson.core/jackson-annotations/bundles/jackson-annotations-2.9.5.jar
pars objc[5094]: Class JavaLaunchHelper is implemented in both
/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/bin/java
(0x1019674c0) and
/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/libinstrument.dylib
(0x1019eb4e0). One of the two will be used. Which one is undefined.
Exception in thread "main"
com.fasterxml.jackson.databind.JsonMappingException: Cannot
deserialize Class pars$Person$3 (of type local/anonymous) as a Bean 
at [Source: (String)"{"FName":"Mad", "LName": "Max"}"; line: 1,
column: 1]  at
com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:305)
    at
com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(DerializerCache.java:268)
    at
com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCacheValueDeserializer(DeserializerCache.java:244)
    at
com.fasterxml.jackson.databind.deser.DeserializerCache.findValueDeserializer(DeserializerCache.java:142)
    at
com.fasterxml.jackson.databind.DeserializationContext.findRootValueDeserializer(DeserializationContext.java:477)
    at
com.fasterxml.jackson.databind.ObjectMapper._findRootDeserializer(ObjectMapper.java:4178)
    at
com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3997)
    at
com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3030)
    at
com.fasterxml.jackson.module.scala.experimental.ScalaObjectMapper.readValue(ScalaObjectMapper.scala:190)
    at
com.fasterxml.jackson.module.scala.experimental.ScalaObjectMapper.readValue$(ScalaObjectMapper.scala:189)
    at pars$$anon$1.readValue(pars.scala:9)     at
pars$.jsonToType(pars.scala:11)     at pars$.main(pars.scala:17)    at
pars.main(pars.scala) Caused by: java.lang.IllegalArgumentException:
Cannot deserialize Class pars$Person$3 (of type local/anonymous) as a
Bean    at
com.fasterxml.jackson.databind.deser.BeanDeserializerFactory.isPotentialBeanType(BeanDeserializerFactory.java:875)
    at
com.fasterxml.jackson.databind.deser.BeanDeserializerFactory.createBeanDeserializer(BeanDeserializerFactory.java:131)
    at
com.fasterxml.jackson.databind.deser.DeserializerCache._createDeserializer2(DeserializerCache.java:411)
    at
com.fasterxml.jackson.databind.deser.DeserializerCache._createDeserializer(DeserializerCache.java:349)
    at
com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializerCache.java:264)
    ... 12 more

Process finished with exit code 1

how can fix the issue?

import com.fasterxml.jackson.annotation.JsonProperty
import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.module.scala.DefaultScalaModule
import com.fasterxml.jackson.module.scala.experimental.ScalaObjectMapper

def jsonToType[T](json:String)(implicit m: Manifest[T]) :T = {
   val objectMapper = new ObjectMapper() with ScalaObjectMapper
   objectMapper.registerModule(DefaultScalaModule)
   objectMapper.readValue[T](json)
}

  case class Person(@JsonProperty("name") Name:String, @JsonProperty("age") Age:Int)

val personName = jsonToType[Person](jsonString).name

SBT

name := "prsr"

version := "0.1"

scalaVersion := "2.12.6"

libraryDependencies ++= Seq(
  "com.fasterxml.jackson.core" % "jackson-databind" % "2.9.5",
  "com.fasterxml.jackson.module" %% "jackson-module-scala" % "2.9.5"
)
pedrorijo91
  • 7,635
  • 9
  • 44
  • 82
oortcloud_domicile
  • 840
  • 6
  • 21
  • 41
  • Please show your code so that someone can help you what is the issue? If you trying same code as in linked question then you need getters and setters or put comment in the same question – prayagupa Jun 02 '18 at 02:17
  • I used the code from the last answer. It says if i use @jsonProperty then it creates getters and setters for me. is it true? – oortcloud_domicile Jun 02 '18 at 02:17
  • Yes @JsonProperty is `Marker annotation that can be used to define a non-static method as a "setter" or "getter" for a logical property`. or there is `@BeanProperty` – prayagupa Jun 02 '18 at 02:24
  • And by the way since you are using `with ScalaObjectMapper` you probably dont need getters/setters explicitly. The example code you posted should be working with or without `@JsonProperty` – prayagupa Jun 02 '18 at 02:25
  • Then why does it complain that "Cannot deserialize Class pars$Person$3 (of type local/anonymous) as a Bean" Could it because of the versions. I am using java 1.8 , scala 2.12.6 and 2.9.5 as jackson version – oortcloud_domicile Jun 02 '18 at 02:27
  • It is perfectly working for me. Please post your sbt or maven dependencies as well. Are you using java too?? or its all scala code? – prayagupa Jun 02 '18 at 02:28
  • Yes i am using java 1.8 in intellij to setup my project but thats it. the only code i used is above. – oortcloud_domicile Jun 02 '18 at 02:38
  • `Source: (String)"{"FName":"Mad", "LName": "Max"}"` in the exception message makes me think that `Person(name, age)` is not an appropriate structure for deserializing the JSON. – Antot Jun 02 '18 at 06:39

1 Answers1

0

Looks like your Mapping is invalid. The JSON object has FName and LName whereas your class has name and age as the corresponding mapping. Can you validate that the mapping is correct?

[Source: (String)"{"FName":"Mad", "LName": "Max"}"; line: 1,
column: 1]
Khanal
  • 788
  • 6
  • 14