Issue 204 in morphia: Mapping Classes with generic super-class or super-interface

89 views
Skip to first unread message

mor...@googlecode.com

unread,
Jan 4, 2011, 6:41:26 AM1/4/11
to morphia...@googlegroups.com
Status: New
Owner: ----
Labels: Type-Defect Priority-Low

New issue 204 by sign2k: Mapping Classes with generic super-class or
super-interface
http://code.google.com/p/morphia/issues/detail?id=204

What version are you using? svn-1550

As mentioned in ticket #189 we had some problems with generic
super-interfaces of our i18n system.

This hasn't changed with revision 1550. we still get null-pointer
exceptions with the unpatched version of morphia.

with a bit of testing i found a solution to get type parameters from
super-classes or interfaces. i will attach the patch. with it validation,
index-creation and queries are allowed to pass these classes.

best regards,
Stefan Meißner


Attachments:
morphia-1550-super-inspection.patch 4.9 KB

mor...@googlecode.com

unread,
Jan 4, 2011, 7:40:51 AM1/4/11
to morphia...@googlegroups.com

Comment #1 on issue 204 by sign2k: Mapping Classes with generic super-class
or super-interface
http://code.google.com/p/morphia/issues/detail?id=204

some more fixes to the patch to allow something like:

import java.util.ArrayList;
import com.google.code.morphia.annotations.Embedded;

@Embedded
public class PermissionStore extends ArrayList<String> {

private static final long serialVersionUID = 5169307300210092559L;

}

to work without warnings about ArrayList's elementData field to be
heterogenous.

greetings
Stefan Meißner

Attachments:
morphia-1565-super-inspection.patch 6.4 KB

mor...@googlecode.com

unread,
Jan 4, 2011, 9:46:41 AM1/4/11
to morphia...@googlegroups.com

Comment #2 on issue 204 by sign2k: Mapping Classes with generic super-class
or super-interface
http://code.google.com/p/morphia/issues/detail?id=204

There was an class-cast exception when the embeddedmapper tried to cast the
getSubType to parameterizedType directly:

Caused by: java.lang.RuntimeException: java.lang.RuntimeException:
java.lang.ClassCastException: java.lang.Class cannot be cast to
java.lang.reflect.ParameterizedType
at com.google.code.morphia.mapping.Mapper.fromDb(Mapper.java:483)
~[morphia-1550.jar:na]
at
com.google.code.morphia.mapping.ReferenceMapper.resolveObject(ReferenceMapper.java:277)
~[morphia-1550.jar:na]
at
com.google.code.morphia.mapping.ReferenceMapper.readCollection(ReferenceMapper.java:225)
~[morphia-1550.jar:na]
at
com.google.code.morphia.mapping.ReferenceMapper.fromDBObject(ReferenceMapper.java:143)
~[morphia-1550.jar:na]
at com.google.code.morphia.mapping.Mapper.readMappedField(Mapper.java:501)
~[morphia-1550.jar:na]
at com.google.code.morphia.mapping.Mapper.fromDb(Mapper.java:480)
~[morphia-1550.jar:na]
... 111 common frames omitted
Caused by: java.lang.RuntimeException: java.lang.ClassCastException:
java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType
at
com.google.code.morphia.mapping.EmbeddedMapper.fromDBObject(EmbeddedMapper.java:146)
~[morphia-1550.jar:na]
at com.google.code.morphia.mapping.Mapper.readMappedField(Mapper.java:499)
~[morphia-1550.jar:na]
at com.google.code.morphia.mapping.Mapper.fromDb(Mapper.java:480)
~[morphia-1550.jar:na]
... 116 common frames omitted
Caused by: java.lang.ClassCastException: java.lang.Class cannot be cast to
java.lang.reflect.ParameterizedType
at
com.google.code.morphia.mapping.EmbeddedMapper.readMapOrCollectionOrEntity(EmbeddedMapper.java:226)
~[morphia-1550.jar:na]
at
com.google.code.morphia.mapping.EmbeddedMapper.readMap(EmbeddedMapper.java:207)
~[morphia-1550.jar:na]
at
com.google.code.morphia.mapping.EmbeddedMapper.fromDBObject(EmbeddedMapper.java:117)
~[morphia-1550.jar:na]
... 118 common frames omitted

fixed with a new patch. are there some informations on how to run all these
good tests within the repository at once?

Attachments:
morphia-1565-super-inspection.patch 9.4 KB

mor...@googlecode.com

unread,
Jan 4, 2011, 10:19:18 AM1/4/11
to morphia...@googlegroups.com

Comment #3 on issue 204 by sign2k: Mapping Classes with generic super-class
or super-interface
http://code.google.com/p/morphia/issues/detail?id=204

latest patch with all tests-running without errors but one failure:

com.google.code.morphia.TestPerf
testAddressInsertPerf(com.google.code.morphia.TestPerf)
junit.framework.AssertionFailedError: Insert (10000) performance is too
slow: 1.20X slower

trying to get this patch stable.
best regards
Stefan Meißner

Attachments:
morphia-1565-super-inspection.patch 10.1 KB

mor...@googlecode.com

unread,
Mar 21, 2011, 2:23:48 PM3/21/11
to morphia...@googlegroups.com

Comment #4 on issue 204 by scotthernandez: Mapping Classes with generic

Do you have a test case that shows the problem?

mor...@googlecode.com

unread,
Mar 23, 2011, 7:15:12 AM3/23/11
to morphia...@googlegroups.com

Comment #5 on issue 204 by sign2k: Mapping Classes with generic super-class
or super-interface
http://code.google.com/p/morphia/issues/detail?id=204

Hi again,

added the Test. Tested with the latest svn version of morphia.

Unpatched - LOG:

23.03.2011 12:09:54 com.google.code.morphia.logging.MorphiaLoggerFactory
chooseLoggerFactory
INFO: LoggerImplFactory set to
com.google.code.morphia.logging.jdk.JDKLoggerFactory
23.03.2011 12:09:55 com.google.code.morphia.mapping.MappedField discover
WARNUNG: The multi-valued
field 'com.google.code.morphia.issue204.SuperInspectionTest$E1.embLabel' is
a possible heterogenous collection. It cannot be verified. Please declare a
valid type to get rid of this warning. null
23.03.2011 12:09:55
com.google.code.morphia.mapping.validation.MappingValidator$LogLine log
WARNUNG: MapKeyDifferentFromString complained about
com.google.code.morphia.issue204.SuperInspectionTest$E1.embLabel : Maps
cannot be keyed by Object (Map<Object,?>); Use a parametrized type that is
supported (Map<String/Enum/Long/ObjectId/..., ?>)
23.03.2011 12:09:55
com.google.code.morphia.mapping.validation.MappingValidator$LogLine log
INFO: MapKeyDifferentFromString complained about
com.google.code.morphia.issue204.SuperInspectionTest$E1.embLabel : Maps
cannot be keyed by Object (Map<Object,?>); Use a parametrized type that is
supported (Map<String/Enum/Long/ObjectId/..., ?>)
23.03.2011 12:09:55 com.google.code.morphia.mapping.MappedField discover
WARNUNG: The multi-valued field 'java.util.HashSet.map' is a possible
heterogenous collection. It cannot be verified. Please declare a valid type
to get rid of this warning. class java.lang.Object

java.lang.RuntimeException: java.lang.RuntimeException:
java.lang.ClassCastException: java.lang.Class cannot be cast to
java.lang.reflect.ParameterizedType

at com.google.code.morphia.mapping.Mapper.fromDb(Mapper.java:487)
at com.google.code.morphia.mapping.Mapper.fromDBObject(Mapper.java:267)
at
com.google.code.morphia.query.MorphiaIterator.convertItem(MorphiaIterator.java:66)
at
com.google.code.morphia.query.MorphiaIterator.processItem(MorphiaIterator.java:53)
at
com.google.code.morphia.query.MorphiaIterator.next(MorphiaIterator.java:48)
at com.google.code.morphia.query.QueryImpl.get(QueryImpl.java:366)
at com.google.code.morphia.DatastoreImpl.get(DatastoreImpl.java:521)
at com.google.code.morphia.DatastoreImpl.getByKey(DatastoreImpl.java:531)
at
com.google.code.morphia.issue204.SuperInspectionTest.test(SuperInspectionTest.java:209)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at
org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
at
org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at
org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
at
org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at
org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
at
org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
at
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76)
at
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
at
org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49)
at
org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)


Caused by: java.lang.RuntimeException: java.lang.ClassCastException:
java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType
at
com.google.code.morphia.mapping.EmbeddedMapper.fromDBObject(EmbeddedMapper.java:146)

at com.google.code.morphia.mapping.Mapper.readMappedField(Mapper.java:507)
at com.google.code.morphia.mapping.Mapper.fromDb(Mapper.java:484)
... 32 more


Caused by: java.lang.ClassCastException: java.lang.Class cannot be cast to
java.lang.reflect.ParameterizedType
at
com.google.code.morphia.mapping.EmbeddedMapper.readMapOrCollectionOrEntity(EmbeddedMapper.java:226)

at
com.google.code.morphia.mapping.EmbeddedMapper.readMap(EmbeddedMapper.java:207)
at
com.google.code.morphia.mapping.EmbeddedMapper.fromDBObject(EmbeddedMapper.java:117)
... 34 more

Patched - LOG:

23.03.2011 12:13:49 com.google.code.morphia.logging.MorphiaLoggerFactory
chooseLoggerFactory
INFO: LoggerImplFactory set to
com.google.code.morphia.logging.jdk.JDKLoggerFactory


Attachments:
SuperInspectionTest.java 4.8 KB

mor...@googlecode.com

unread,
Mar 23, 2011, 9:52:32 AM3/23/11
to morphia...@googlegroups.com

Comment #6 on issue 204 by goudreau...@gmail.com: Mapping Classes with
generic super-class or super-interface
http://code.google.com/p/morphia/issues/detail?id=204

Can we have any update on this please ? We need that patch into an official
release please.

mor...@googlecode.com

unread,
Oct 12, 2011, 9:39:35 AM10/12/11
to morphia...@googlegroups.com

Comment #7 on issue 204 by sign2k: Mapping Classes with generic super-class
or super-interface
http://code.google.com/p/morphia/issues/detail?id=204

seems that there is no progress at this issue :( waited for about 10 months
now. will there be any progress in future?

mor...@googlecode.com

unread,
Jan 26, 2012, 11:03:23 AM1/26/12
to morphia...@googlegroups.com

Comment #8 on issue 204 by daniel.a...@gmail.com: Mapping Classes with
generic super-class or super-interface
http://code.google.com/p/morphia/issues/detail?id=204

Don't know why this is low priority, bumping into this as well.

mor...@googlecode.com

unread,
Feb 23, 2012, 5:34:13 PM2/23/12
to morphia...@googlegroups.com

Comment #10 on issue 204 by ones...@gmail.com: Mapping Classes with generic


Does this mean I will have trouble embedding a class that extends TreeMap ?

I have something like this :

@Entity
public class User implements IUser, Comparable {

.....

@Embedded
Tree profile;

====

@Embedded
public class Tree extends TreeMap {

mor...@googlecode.com

unread,
Feb 23, 2012, 5:38:16 PM2/23/12
to morphia...@googlegroups.com

Comment #9 on issue 204 by ones...@gmail.com: Mapping Classes with generic
Reply all
Reply to author
Forward
0 new messages