[
https://issues.apache.org/jira/browse/JCR-1325?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Christophe Lombart resolved JCR-1325.
-------------------------------------
Resolution: Fixed
Fix Version/s: 1.5
Fixed.
I also reviewed the support for Collection & Map. The mapping definition can be
simplified with parameterized classes. In this case the elementClassName
setting is not necessary. There is a exemple in the unit tests (see the class
org.apache.jackrabbit.ocm.testmodel.collection.Main).
Major interfaces and classes are supported (Collection, List, ArrayList,
Vector,Map, HashMap, ...) without creating extra code.
In summary, there are3 different ways to define a collection or a Map :
1. With a parameterized class, it is not necessary to specify the
elementClassName
@Collection private List<Element> list;
2. Without specifying the element type: in this case, this is mandatory to
define the elementClassName
@Collection (elementClassName=MyContent.class)
private List list;
3. Create a descendant of ManageableCollection & ManageableMap for complex
collections or maps. elementClassName is still mandatory if the descendant is
not parameterized.
> Problems mapping custom collections
> -----------------------------------
>
> Key: JCR-1325
> URL: https://issues.apache.org/jira/browse/JCR-1325
> Project: Jackrabbit
> Issue Type: Bug
> Components: jackrabbit-ocm
> Affects Versions: 1.4
> Reporter: Sebastian Gomez
> Assignee: Christophe Lombart
> Fix For: 1.5
>
> Attachments: ManageableCollectionUtil.java.patch
>
>
> When using a custom list that extends from java.util.AbstractList,
> ManageableCollectionUtil.getManageableCollection raises a JcrMappingException
> because it does not consider the custom list to be a java.util.List. This is
> because it uses "if (object.getClass().equals(List.class))" instead of "if
> (object instanceof List)". The same thing will probably happen when using a
> custom Collection, a custom ArrayList, etc. This is the stack trace:
> org.apache.jackrabbit.ocm.exception.JcrMappingException: Unsupported
> collection
> type : *********** (MyCustomList class)
> at
> org.apache.jackrabbit.ocm.manager.collectionconverter.ManageableColle
> ctionUtil.getManageableCollection(ManageableCollectionUtil.java:153)
> at
> org.apache.jackrabbit.ocm.manager.objectconverter.impl.ObjectConverte
> rImpl.insertCollectionFields(ObjectConverterImpl.java:780)
> at
> org.apache.jackrabbit.ocm.manager.objectconverter.impl.ObjectConverte
> rImpl.insert(ObjectConverterImpl.java:221)
> at
> org.apache.jackrabbit.ocm.manager.objectconverter.impl.ObjectConverte
> rImpl.insert(ObjectConverterImpl.java:146)
> at
> org.apache.jackrabbit.ocm.manager.impl.ObjectContentManagerImpl.inser
> t(ObjectContentManagerImpl.java:407)
> I have come up to this bug using a MyCustomList<MyClass>, with MyCustomList
> extending java.util.AbstractList<MyClass>.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.