Cannot use @Collection on getters
---------------------------------

                 Key: JCR-1928
                 URL: https://issues.apache.org/jira/browse/JCR-1928
             Project: Jackrabbit
          Issue Type: Bug
          Components: jackrabbit-ocm
    Affects Versions: 1.5.0
            Reporter: Yoav Landman


I have a class with no mapped fields that has a collection reference. With JR 
1.4.x, I use to use a collection mapping like this on the getter:

@Node(extend = OcmStorable.class)
public class User implements OcmStorable {

@Collection(elementClassName = String.class, collectionConverter = 
MultiValueCollectionConverterImpl.class)
    public Set<String> getGroups() {
        return info.getGroups();
    }

    public void setGroups(Set<String> groups) {
        info.setGroups(groups);
    }
}

With 1.5 this crashes with:

Caused by: org.apache.jackrabbit.ocm.exception.InitMapperException: Impossible 
to read the mapping descriptor from the getter for class : class 
org.artifactory.security.User for field : groups; nested exception is 
java.lang.NoSuchFieldException: groups
        at 
org.apache.jackrabbit.ocm.mapper.impl.annotation.AnnotationDescriptorReader.addDescriptorsFromGetters(AnnotationDescriptorReader.java:221)
 [jackrabbit-ocm-1.5.0.jar:na]
        at 
org.apache.jackrabbit.ocm.mapper.impl.annotation.AnnotationDescriptorReader.addAttributeDescriptors(AnnotationDescriptorReader.java:159)
 [jackrabbit-ocm-1.5.0.jar:na]
        at 
org.apache.jackrabbit.ocm.mapper.impl.annotation.AnnotationDescriptorReader.buildClassDescriptor(AnnotationDescriptorReader.java:80)
 [jackrabbit-ocm-1.5.0.jar:na]
        at 
org.apache.jackrabbit.ocm.mapper.impl.annotation.AnnotationDescriptorReader.loadClassDescriptors(AnnotationDescriptorReader.java:64)
 [jackrabbit-ocm-1.5.0.jar:na]
        at 
org.apache.jackrabbit.ocm.mapper.impl.AbstractMapperImpl.buildMapper(AbstractMapperImpl.java:60)
 [jackrabbit-ocm-1.5.0.jar:na]
        at 
org.apache.jackrabbit.ocm.mapper.impl.annotation.AnnotationMapperImpl.<init>(AnnotationMapperImpl.java:37)
 [jackrabbit-ocm-1.5.0.jar:na]
        at 
org.artifactory.jcr.InitJcrRepoStrategy.initializeOcm(InitJcrRepoStrategy.java:119)
 [classes/:na]
        at 
org.artifactory.jcr.InitJcrRepoStrategy.init(InitJcrRepoStrategy.java:97) 
[classes/:na]
        ... 31 common frames omitted
Caused by: java.lang.NoSuchFieldException: groups
        at java.lang.Class.getDeclaredField(Class.java:1854) [na:1.5.0_16]
        at 
org.apache.jackrabbit.ocm.mapper.impl.annotation.AnnotationDescriptorReader.addDescriptorsFromGetters(AnnotationDescriptorReader.java:215)
 [jackrabbit-ocm-1.5.0.jar:na]
        ... 38 common frames omitted

Looks like 
org.apache.jackrabbit.ocm.mapper.impl.annotation.AnnotationDescriptorReader#216 
is passing: 
propertyDescriptor.getPropertyType().getDeclaredField(propertyDescriptor.getName()),
and propertyDescriptor.getPropertyType() is, in fact, java.util.Set (so of 
course no 'groups' field).

As a workaround, I have to use a dummy field, annotate it and let the getters 
and setters work as before.

Thanks.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to