Saving new Object java.lang.IllegalArgumentException: can't serialize

1,181 views
Skip to first unread message

MaRaVaN

unread,
Nov 15, 2011, 6:00:35 AM11/15/11
to mongodb-user
My code:

public class MongoTest {

public static void main(String[] args) {
saveObj();
}


public static void saveObj(){
Mongo mongo = null;
try {
mongo = new Mongo();
} catch (UnknownHostException | MongoException e) {
e.printStackTrace();
}
DB db = mongo.getDB("sampleDB");
DBCollection collection = db.getCollection("sampleColl");
MongoSample sample = new MongoSample();
sample.setId(new ObjectId());
sample.setField("SOmeFIELD");
sample.setData(new BasicDBObject("BASIC", "VAL"));
collection.save(new BasicDBObject("SampleENtity", sample));
System.out.println(sample);
}
}

public class MongoSample{

public ObjectId id;
public String field;
public BasicDBObject data;

public ObjectId getId() {
return id;
}

public void setId(ObjectId id) {
this.id = id;
}

public String getField() {
return field;
}

public void setField(String field) {
this.field = field;
}

public BasicDBObject getData() {
return data;
}

public void setData(BasicDBObject data) {
this.data = data;
}

}

The saveObj method throws,

Exception in thread "main" java.lang.IllegalArgumentException: can't
serialize class mongo.test.MongoSample
at org.bson.BSONEncoder._putObjectField(BSONEncoder.java:205)
at org.bson.BSONEncoder.putObject(BSONEncoder.java:121)
at org.bson.BSONEncoder.putObject(BSONEncoder.java:67)
at com.mongodb.DBApiLayer$MyCollection.insert(DBApiLayer.java:231)
at com.mongodb.DBApiLayer$MyCollection.insert(DBApiLayer.java:197)
at com.mongodb.DBCollection.insert(DBCollection.java:73)
at com.mongodb.DBCollection.save(DBCollection.java:524)
at com.mongodb.DBCollection.save(DBCollection.java:504)
at mongo.test.MongoTest.saveObj(MongoTest.java:37)
at mongo.test.MongoTest.main(MongoTest.java:18)


I even tried by implementing java.io.Serializable for MongoSample
class. Why its throwing that exception.
PS: I am in java 7. But i tried with Java 6 too. The same result.

Any suggesstions!!!


Thanks


Nat

unread,
Nov 15, 2011, 6:04:29 AM11/15/11
to mongod...@googlegroups.com
It can only serialize primitive objects and object inherits from DBObject etc.
--
You received this message because you are subscribed to the Google Groups "mongodb-user" group.
To post to this group, send email to mongod...@googlegroups.com.
To unsubscribe from this group, send email to mongodb-user...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/mongodb-user?hl=en.

Tamil Vendhan

unread,
Nov 15, 2011, 6:10:27 AM11/15/11
to mongodb-user
Thanks for your reply.

But, I am not able to get it. Can you be more elaborate??!!

Did you meant that "MongoSample" should not contain objects which are
not primitive and not inherited from DBObject.

Tamil Vendhan

unread,
Nov 15, 2011, 6:12:07 AM11/15/11
to mongodb-user
What should i do to save this Object?!

On Nov 15, 4:04 pm, "Nat" <nat.lu...@gmail.com> wrote:

Nat

unread,
Nov 15, 2011, 6:12:35 AM11/15/11
to mongod...@googlegroups.com
I mean MongoSample should probably implement DBObject or you should simply use BasicDBObject.

Tamil Vendhan

unread,
Nov 15, 2011, 6:19:14 AM11/15/11
to mongodb-user
Hi Nat,

Actually that was my first idea. I tried that earlier. But it throws,

Exception in thread "main" java.lang.NullPointerException
at com.mongodb.DBCollection._checkKeys(DBCollection.java:826)
at com.mongodb.DBCollection._checkObject(DBCollection.java:817)
at com.mongodb.DBCollection.save(DBCollection.java:516)
at com.mongodb.DBCollection.save(DBCollection.java:504)
at mongo.test.MongoTest.saveObj(MongoTest.java:41)
at mongo.test.MongoTest.main(MongoTest.java:18)

(I re generated it again, now).

The code now looks like,

public class MongoTest {

public static void main(String[] args) {
saveObj();
}

public static void saveObj() {
Mongo mongo = null;
try {
mongo = new Mongo();
} catch (UnknownHostException | MongoException e) {
e.printStackTrace();
}

DB db = mongo.getDB("sampleDB");
DBCollection collection = db.getCollection("sampleColl");

MongoSample sample = new MongoSample();
sample.put("KEY", "VAL");

collection.save(sample);
System.out.println(sample);
}
}

public class MongoSample implements DBObject {

@Override
public Object put(String key, Object v) {
// TODO Auto-generated method stub
return null;
}

@Override
public void putAll(BSONObject o) {
// TODO Auto-generated method stub

}

@Override
public void putAll(Map m) {
// TODO Auto-generated method stub

}

@Override
public Object get(String key) {
// TODO Auto-generated method stub
return null;
}

@Override
public Map toMap() {
// TODO Auto-generated method stub
return null;
}

@Override
public Object removeField(String key) {
// TODO Auto-generated method stub
return null;
}

@Override
public boolean containsKey(String s) {
// TODO Auto-generated method stub
return false;
}

@Override
public boolean containsField(String s) {
// TODO Auto-generated method stub
return false;
}

@Override
public Set<String> keySet() {
// TODO Auto-generated method stub
return null;
}

@Override
public void markAsPartialObject() {
// TODO Auto-generated method stub

}

@Override
public boolean isPartialObject() {
// TODO Auto-generated method stub
return false;

Tamil Vendhan

unread,
Nov 15, 2011, 6:23:36 AM11/15/11
to mongodb-user

Hi Nat,
Do i need to create another post for my issue!!??

Tamil Vendhan

unread,
Nov 15, 2011, 7:05:55 AM11/15/11
to mongodb-user
I'm extremely sorry. I totally got it. Errr.

Scott Hernandez

unread,
Nov 15, 2011, 8:09:51 AM11/15/11
to mongod...@googlegroups.com
If you want to work with POJOs then you might want to take a look at
one of the mapping frameworks which support this:
http://www.mongodb.org/display/DOCS/Java+Language+Center#JavaLanguageCenter-ThirdPartyFrameworksandLibs

These will provide more natural java persistence for POJOs and beans.

bruce yang

unread,
Nov 15, 2011, 8:24:52 PM11/15/11
to mongod...@googlegroups.com
you cant use http://code.google.com/p/morphia/wiki

2011/11/15 Scott Hernandez <scotthe...@gmail.com>
Reply all
Reply to author
Forward
0 new messages