morphia
morphia copied to clipboard
No usable constructor
green's 1.3
I have a List of Pairs embedded in the class I save. Shouldn't this work?
private List<Pair<String, Float>> items;
INFO: LoggerImplFactory set to com.github.jmkgreen.morphia.logging.jdk.JDKLoggerFactory
Exception in thread "main" java.lang.RuntimeException: java.lang.RuntimeException: java.lang.RuntimeException: com.github.jmkgreen.morphia.mapping.MappingException: No usable constructor for org.apache.mahout.common.Pair
at com.github.jmkgreen.morphia.mapping.DefaultMapper.fromDb(DefaultMapper.java:531)
Disconnected from the target VM, address: '127.0.0.1:56248', transport: 'socket'
at com.github.jmkgreen.morphia.mapping.DefaultMapper.fromDBObject(DefaultMapper.java:273)
at com.github.jmkgreen.morphia.query.MorphiaIterator.convertItem(MorphiaIterator.java:64)
at com.github.jmkgreen.morphia.query.MorphiaIterator.processItem(MorphiaIterator.java:51)
at com.github.jmkgreen.morphia.query.MorphiaIterator.next(MorphiaIterator.java:46)
at com.github.jmkgreen.morphia.query.QueryImpl.get(QueryImpl.java:383)
at com.github.jmkgreen.morphia.DatastoreImpl.get(DatastoreImpl.java:920)
at com.github.jmkgreen.morphia.dao.BasicDAO.get(BasicDAO.java:174)
at finderbots.recommenders.hadoop.mongo.MongoContext.verify(MongoContext.java:116)
at finderbots.recommenders.hadoop.mongo.PersistMongoRecommendations.main(PersistMongoRecommendations.java:77)
Caused by: java.lang.RuntimeException: java.lang.RuntimeException: com.github.jmkgreen.morphia.mapping.MappingException: No usable constructor for org.apache.mahout.common.Pair
at com.github.jmkgreen.morphia.mapping.EmbeddedMapper.fromDBObject(EmbeddedMapper.java:150)
at com.github.jmkgreen.morphia.mapping.DefaultMapper.readMappedField(DefaultMapper.java:551)
at com.github.jmkgreen.morphia.mapping.DefaultMapper.fromDb(DefaultMapper.java:528)
... 9 more
Caused by: java.lang.RuntimeException: com.github.jmkgreen.morphia.mapping.MappingException: No usable constructor for org.apache.mahout.common.Pair
at com.github.jmkgreen.morphia.mapping.DefaultCreator.createInst(DefaultCreator.java:122)
at com.github.jmkgreen.morphia.mapping.DefaultCreator.createInstance(DefaultCreator.java:30)
at com.github.jmkgreen.morphia.mapping.DefaultCreator.createInstance(DefaultCreator.java:40)
at com.github.jmkgreen.morphia.mapping.DefaultCreator.createInstance(DefaultCreator.java:51)
at com.github.jmkgreen.morphia.mapping.EmbeddedMapper.readMapOrCollectionOrEntity(EmbeddedMapper.java:234)
at com.github.jmkgreen.morphia.mapping.EmbeddedMapper.readCollection(EmbeddedMapper.java:179)
at com.github.jmkgreen.morphia.mapping.EmbeddedMapper.fromDBObject(EmbeddedMapper.java:123)
... 11 more
Caused by: com.github.jmkgreen.morphia.mapping.MappingException: No usable constructor for org.apache.mahout.common.Pair
at com.github.jmkgreen.morphia.mapping.DefaultCreator.getNoArgsConstructor(DefaultCreator.java:147)
at com.github.jmkgreen.morphia.mapping.DefaultCreator.createInst(DefaultCreator.java:120)
... 17 more
Caused by: java.lang.NoSuchMethodException: org.apache.mahout.common.Pair.
Process finished with exit code 1
See my reply on the mailing list - possibly subclass com.github.jmkgreen.morphia.converters.TypeConverter to support Pair and at runtime add your new class to the list of converters in the Mapper of the Datastore.
On 30 May 2013 21:34, Pat Ferrel [email protected] wrote:
green's 1.3
I have a List of Pairs embedded in the class I save. Shouldn't this work?
private List<Pair<String, Float>> items;
INFO: LoggerImplFactory set to com.github.jmkgreen.morphia.logging.jdk.JDKLoggerFactory Exception in thread "main" java.lang.RuntimeException: java.lang.RuntimeException: java.lang.RuntimeException: com.github.jmkgreen.morphia.mapping.MappingException: No usable constructor for org.apache.mahout.common.Pair at com.github.jmkgreen.morphia.mapping.DefaultMapper.fromDb(DefaultMapper.java:531) Disconnected from the target VM, address: '127.0.0.1:56248', transport: 'socket' at com.github.jmkgreen.morphia.mapping.DefaultMapper.fromDBObject(DefaultMapper.java:273) at com.github.jmkgreen.morphia.query.MorphiaIterator.convertItem(MorphiaIterator.java:64) at com.github.jmkgreen.morphia.query.MorphiaIterator.processItem(MorphiaIterator.java:51) at com.github.jmkgreen.morphia.query.MorphiaIterator.next(MorphiaIterator.java:46) at com.github.jmkgreen.morphia.query.QueryImpl.get(QueryImpl.java:383) at com.github.jmkgreen.morphia.DatastoreImpl.get(DatastoreImpl.java:920) at com.github.jmkgreen.morphia.dao.BasicDAO.get(BasicDAO.java:174) at finderbots.recommenders.hadoop.mongo.MongoContext.verify(MongoContext.java:116) at finderbots.recommenders.hadoop.mongo.PersistMongoRecommendations.main(PersistMongoRecommendations.java:77) Caused by: java.lang.RuntimeException: java.lang.RuntimeException: com.github.jmkgreen.morphia.mapping.MappingException: No usable constructor for org.apache.mahout.common.Pair at com.github.jmkgreen.morphia.mapping.EmbeddedMapper.fromDBObject(EmbeddedMapper.java:150) at com.github.jmkgreen.morphia.mapping.DefaultMapper.readMappedField(DefaultMapper.java:551) at com.github.jmkgreen.morphia.mapping.DefaultMapper.fromDb(DefaultMapper.java:528) ... 9 more Caused by: java.lang.RuntimeException: com.github.jmkgreen.morphia.mapping.MappingException: No usable constructor for org.apache.mahout.common.Pair at com.github.jmkgreen.morphia.mapping.DefaultCreator.createInst(DefaultCreator.java:122) at com.github.jmkgreen.morphia.mapping.DefaultCreator.createInstance(DefaultCreator.java:30) at com.github.jmkgreen.morphia.mapping.DefaultCreator.createInstance(DefaultCreator.java:40) at com.github.jmkgreen.morphia.mapping.DefaultCreator.createInstance(DefaultCreator.java:51) at com.github.jmkgreen.morphia.mapping.EmbeddedMapper.readMapOrCollectionOrEntity(EmbeddedMapper.java:234) at com.github.jmkgreen.morphia.mapping.EmbeddedMapper.readCollection(EmbeddedMapper.java:179) at com.github.jmkgreen.morphia.mapping.EmbeddedMapper.fromDBObject(EmbeddedMapper.java:123) ... 11 more Caused by: com.github.jmkgreen.morphia.mapping.MappingException: No usable constructor for org.apache.mahout.common.Pair at com.github.jmkgreen.morphia.mapping.DefaultCreator.getNoArgsConstructor(DefaultCreator.java:147) at com.github.jmkgreen.morphia.mapping.DefaultCreator.createInst(DefaultCreator.java:120) ... 17 more Caused by: java.lang.NoSuchMethodException: org.apache.mahout.common.Pair.() at java.lang.Class.getConstructor0(Class.java:2715) at java.lang.Class.getDeclaredConstructor(Class.java:1987) at com.github.jmkgreen.morphia.mapping.DefaultCreator.getNoArgsConstructor(DefaultCreator.java:143) ... 18 more
Process finished with exit code 1
— Reply to this email directly or view it on GitHubhttps://github.com/jmkgreen/morphia/issues/70 .
Adding a default constructor to the class you are using will fix this problem (I actually dont know why it works like that but it worked for me multiple times). But according to SOLID principles you cannot change the code in a class. You can try to add an extension and use it.