Hi,
in a project using mongoDB I have a bean with a custom id type that I want to get mapped to a DBObject. I followed the documentation (http://static.springsource.org/sprin.../html/#d0e2654) but the custom Id does not get converted.
This is my bean:
The converter:Code:@Document(collection = "products") public class ProductGroup { @Id private PortalContentId id; public PortalContentId getId() { return id; } public void setId(final PortalContentId id) { this.id = id; } }
I have registered this in applicationContext.xml:Code:public class PortalContentIdWriteConverter implements Converter<PortalContentId, DBObject> { @Override public DBObject convert(final PortalContentId source) { return BasicDBObjectBuilder.start("cid", source.getContentId()).add("appId", source.getAppId()).get(); } }
When I invokeCode:<mongo:mapping-converter id="mongoMappingConverter" base-package="com.s24.dataexport" db-factory-ref="mongoDbFactory"> <mongo:custom-converters> <mongo:converter><bean class="....PortalContentIdWriteConverter" /></mongo:converter> </mongo:custom-converters> </mongo:mapping-converter> <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate"> <constructor-arg name="mongoDbFactory" ref="mongoDbFactory" /> <constructor-arg ref="mongoMappingConverter" /> </bean>
the following exception is thrown:Code:mongoTemplate.insert(Arrays.asList(someProductGroup), ProductGroup.class);
Is this simply not (yet) supported, or what is the problem here?Code:java.lang.IllegalArgumentException: can't serialize class ....PortalContentId at org.bson.BSONEncoder._putObjectField(BSONEncoder.java:234) at org.bson.BSONEncoder.putObject(BSONEncoder.java:121) at org.bson.BSONEncoder.putObject(BSONEncoder.java:86) at com.mongodb.OutMessage.putObject(OutMessage.java:190) at com.mongodb.DBApiLayer$MyCollection.insert(DBApiLayer.java:253) at com.mongodb.DBApiLayer$MyCollection.insert(DBApiLayer.java:217) at com.mongodb.DBCollection.insert(DBCollection.java:102) at org.springframework.data.mongodb.core.MongoTemplate$11.doInCollection(MongoTemplate.java:690) at org.springframework.data.mongodb.core.MongoTemplate$11.doInCollection(MongoTemplate.java:686) at org.springframework.data.mongodb.core.MongoTemplate.execute(MongoTemplate.java:329) at org.springframework.data.mongodb.core.MongoTemplate.insertDBObjectList(MongoTemplate.java:686) at org.springframework.data.mongodb.core.MongoTemplate.doInsertBatch(MongoTemplate.java:629) at org.springframework.data.mongodb.core.MongoTemplate.insert(MongoTemplate.java:578)
Thanx && cheers,
Martin


Reply With Quote
