Hi there, I'm having a problem saving an object in MongoDB. I'm using Spring Data MongoDB 1.0.0.M2
Code:
@Document
public class Session {
@Id
private String id;
private String name;
private Location lastKnownLocation;
private List<Location> locations = new ArrayList<Location>();
private Date lastUpdated;
getters..setters
}
public class Location implements Comparable<Location>{
private Float latitude;
private Float longitude;
private Date trackedOn;
getters---setters
}
the method in the DAO where it fails is:
Code:
public void setLatestLocationTo(String sessionId, Location location) {
WriteResult result = template.updateFirst("sessions",new Query(whereId().is(sessionId)), new Update().set("lastKnownLocation", location));
logger.info(result.toString());
}
I'm getting the following exception:
Code:
java.lang.IllegalArgumentException: can't serialize class com.x.core.beans.Location
at org.bson.BSONEncoder._putObjectField(BSONEncoder.java:205)
at org.bson.BSONEncoder.putMap(BSONEncoder.java:245)
at org.bson.BSONEncoder._putObjectField(BSONEncoder.java:177)
at org.bson.BSONEncoder.putObject(BSONEncoder.java:121)
at org.bson.BSONEncoder.putObject(BSONEncoder.java:67)
at com.mongodb.DBApiLayer$MyCollection.update(DBApiLayer.java:297)
at com.mongodb.DBCollection.update(DBCollection.java:125)
at com.mongodb.DBCollection.update(DBCollection.java:132)
at org.springframework.data.document.mongodb.MongoTemplate$12.doInCollection(MongoTemplate.java:821)
at org.springframework.data.document.mongodb.MongoTemplate$12.doInCollection(MongoTemplate.java:817)
at org.springframework.data.document.mongodb.MongoTemplate.execute(MongoTemplate.java:315)
at org.springframework.data.document.mongodb.MongoTemplate.updateFirst(MongoTemplate.java:817)
at com.x.core.dao.MongoDBSessionsDao.setLatestLocationTo(MongoDBSessionsDao.java:75)
And this is the template and Mongo Spring config:
Code:
<bean id="mongoTemplate" class="org.springframework.data.document.mongodb.MongoTemplate">
<constructor-arg ref="mongo" />
<constructor-arg name="databaseName" value="#{serviceProperties['db']}" />
</bean>
<mongo:mongo host="localhost"/>
<util:map id="serviceProperties" >
<entry key="db" value="mydb"/>
</util:map>
So it seems that Spring can't convert Location, which is an embedded object of Session, to JSON. I've read in the SpringData Mongo Reference doc, that all JSON marshalling is done automatically? But i've also read that you have to provide converters, which actually confuses me.
Does anyone have any idea? What can I do?
Thanks for your time!
Fede.