json - Gson:Unable to invoke no-args constructor for interface scala.collection.mutable.Seq -
i have list of objects want store in mongodb after doing research found need serialize our class object in json , deserialize original object form
i have list var messagelist : mutablelist[message] list of message's want store list in mongodb after serializing objects in list stored list(consist of json strings)
val result:writeresult= collection.insert(new basicdbobject("_id",inbox.uuid) .append("messagelist",messageobjstr) ,writeconcern.acknowledged) in mongodb here documents in mongodb
{ "_id" : 333, "messagelist" : [ "{\"uuid\":123,\"subject\":\"subject\",\"body\":\"bodytext\",\"artworkuuid\":100,\"datetime\":{\"date\":{\"year\":2015,\"month\":7,\"day\":7},\"time\":{\"hour\":16,\"minute\":46,\"second\":17,\"nano\":487000000}},\"readstatusstr\":\"read\",\"deletestatusstr\":\"deleted\",\"idlist\":{\"first0\":{\"elem\":123,\"next\":{}},\"last0\":{\"elem\":123,\"next\":{}},\"len\":1}}", "{\"uuid\":321,\"subject\":\"subject1\",\"body\":\"bodytext1\",\"artworkuuid\":101,\"datetime\":{\"date\":{\"year\":2015,\"month\":7,\"day\":7},\"time\":{\"hour\":16,\"minute\":46,\"second\":17,\"nano\":562000000}},\"readstatusstr\":\"read\",\"deletestatusstr\":\"deleted\",\"idlist\":{\"first0\":{\"elem\":321,\"next\":{}},\"last0\":{\"elem\":321,\"next\":{}},\"len\":1}}" ] } now want fetch document doing
val cursor=collection.find() var obj=new basicdbobject try { while(cursor.hasnext) { obj=cursor.next().asinstanceof[basicdbobject] id=obj.getstring("_id").toint var list:basicdblist=obj.get("messagelist").asinstanceof[basicdblist] for(value<-list) { var gsonmsg=value.tostring() println("what stored in mongo db "+gsonmsg) var msgobj=gson.fromjson(gsonmsg, classof[message]) messagelist+=msgobj } for(n<-messagelist) { println("values of messagelist "+n +" uuid "+n.getuuid +" body "+n.getbody + " subject " +n.getsubject +" datetime "+n.getdatetime+ " artworkuuid "+n.getartworkuuid) } } } finally{ cursor.close() client.close() } the code works till line
println("what stored in mongo db "+gsonmsg) and on line
var msgobj=gson.fromjson(gsonmsg, classof[message]) following exception thrown
java.lang.runtimeexception: unable invoke no-args constructor interface scala.collection.mutable.seq. register instancecreator gson type may fix problem. package models.usernotifications.mailmessages import org.joda.time.datetime import models.usernotifications.mailmessages.readstatus._ import models.usernotifications.mailmessages.deletestatus._ import models.usernotifications.mailmessages.deletereason._ import scala.collection.mutable.mutablelist import java.time.localdatetime; @serialversionuid(1) class message(val uuid: int ,val subject : string, val body : string, var artworkuuid : int, val datetime : localdatetime = localdatetime.now()) extends ordered[message] serializable{ /* def this(){ this(0,"", "",0, localdatetime.now()) } */ def this(){ this(0,"", "",0) } def this(uuid: int, subject : string, body : string, artworkuuid : int, datetime : localdatetime, readstatus : readstatus, delete : deletestatus ){ this( uuid , subject , body , artworkuuid,datetime) this.readstatus = readstatus this.deletestatus= delete } /* * returns sorted datetime */ def compare(other: message): int = other.datetime.compareto(this.datetime) @transient var readstatus : readstatus = read @transient var deletestatus : deletestatus = deleted var readstatusstr = readstatus.tostring() var deletestatusstr= deletestatus.tostring() var idlist = new mutablelist[int]() adduuidtolist(uuid) /* * setters */ def setbody(setartworkuuid : int)={ artworkuuid = setartworkuuid } def setreadstatus(readstatus : string)={ readstatus = readstatus.withname(readstatus) } def setdelete(setdelete : string) = { deletestatus = deletestatus.withname(setdelete) } def adduuidtolist(uuid : int) = { idlist += uuid } /* * getters */ def getuuid : int ={ uuid } def getsubject : string = { subject } def getbody : string ={ body } def getartworkuuid : int = { artworkuuid } def getdatetime : localdatetime = { datetime } def getreadstatus : readstatus = { readstatus } def getdeletestatus : deletestatus = { deletestatus } def getreadstatusstr : string = { readstatusstr } def getdeletestatusstr : string = { deletestatusstr } def getuuidslist:mutablelist[int] = { idlist } } here output printed on console stored in mongodb
{"uuid":123,"subject":"subject","body":"bodytext","artworkuuid":100,"datetime":{"date":{"year":2015,"month":7,"day":7},"time":{"hour":16,"minute":51,"second":52,"nano":359000000}},"readstatusstr":"read","deletestatusstr":"deleted","idlist":{"first0":{"elem":123,"next":{}},"last0":{"elem":123,"next":{}},"len":1}} 2015-07-07 16:51:54.812 error oneforonestrategy [testactorsystem-akka.actor.default-dispatcher-3] akka://testactorsystem/user/inboxwriteinmongoactor/artistuserreadmongoactor/inboxqueryactor -unable invoke no-args constructor interface scala.collection.mutable.seq. register instancecreator gson type may fix problem. java.lang.runtimeexception: unable invoke no-args constructor interface scala.collection.mutable.seq. register instancecreator gson type may fix problem. @ com.google.gson.internal.constructorconstructor$12.construct(constructorconstructor.java:210) ~[gson-2.3.1.jar:na] @ com.google.gson.internal.bind.reflectivetypeadapterfactory$adapter.read(reflectivetypeadapterfactory.java:186) ~[gson-2.3.1.jar:na] @ com.google.gson.internal.bind.reflectivetypeadapterfactory$1.read(reflectivetypeadapterfactory.java:103) ~[gson-2.3.1.jar:na] @ com.google.gson.internal.bind.reflectivetypeadapterfactory$adapter.read(reflectivetypeadapterfactory.java:196) ~[gson-2.3.1.jar:na] @ com.google.gson.internal.bind.reflectivetypeadapterfactory$1.read(reflectivetypeadapterfactory.java:103) ~[gson-2.3.1.jar:na] @ com.google.gson.internal.bind.reflectivetypeadapterfactory$adapter.read(reflectivetypeadapterfactory.java:196) ~[gson-2.3.1.jar:na] @ com.google.gson.internal.bind.reflectivetypeadapterfactory$1.read(reflectivetypeadapterfactory.java:103) ~[gson-2.3.1.jar:na] @ com.google.gson.internal.bind.reflectivetypeadapterfactory$adapter.read(reflectivetypeadapterfactory.java:196) ~[gson-2.3.1.jar:na] @ com.google.gson.gson.fromjson(gson.java:810) ~[gson-2.3.1.jar:na] @ com.google.gson.gson.fromjson(gson.java:775) ~[gson-2.3.1.jar:na] @ com.google.gson.gson.fromjson(gson.java:724) ~[gson-2.3.1.jar:na] @ com.google.gson.gson.fromjson(gson.java:696) ~[gson-2.3.1.jar:na] @ models.usernotifications.mailmessages.mailmessagesmongoreadwrite.inboxqueryactor$$anonfun$readall$1.apply(inboxqueryactor.scala:77) ~[classes/:na] @ models.usernotifications.mailmessages.mailmessagesmongoreadwrite.inboxqueryactor$$anonfun$readall$1.apply(inboxqueryactor.scala:73) ~[classes/:na] @ scala.collection.iterator$class.foreach(iterator.scala:743) ~[scala-library-2.11.1.jar:0.13.5] @ scala.collection.abstractiterator.foreach(iterator.scala:1174) ~[scala-library-2.11.1.jar:0.13.5] @ scala.collection.iterablelike$class.foreach(iterablelike.scala:72) ~[scala-library-2.11.1.jar:0.13.5] @ com.mongodb.casbah.commons.mongodblist.foreach(mongodblist.scala:33) ~[casbah-commons_2.11-2.8.0.jar:2.8.0] all want there list(msgobj1,msgob2) after converted json string list(jsonstringofmsgobj1,jsonstringofmsgobj2) stored in mongo db [jsonstringofmsgobj1,jsonstringofmsgobj2] when try fetch using basicdblist jsonstringofmsgobj1 first iteration -> want deserialize jsonstringofmsgobj1 msgobj1 same next iteration please me .thanks
Comments
Post a Comment