You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@sling.apache.org by "Markus Pallo (JIRA)" <ji...@apache.org> on 2009/07/30 16:25:14 UTC
[jira] Issue Comment Edited: (SLING-1064) missing attribute
mappings in ocm ClassDescriptorReader
[ https://issues.apache.org/jira/browse/SLING-1064?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12737113#action_12737113 ]
Markus Pallo edited comment on SLING-1064 at 7/30/09 7:24 AM:
--------------------------------------------------------------
patchfile for ClassDescriptor reader to fix all three issues
was (Author: pallo):
patchfile for ClassDescriptor reader
> missing attribute mappings in ocm ClassDescriptorReader
> -------------------------------------------------------
>
> Key: SLING-1064
> URL: https://issues.apache.org/jira/browse/SLING-1064
> Project: Sling
> Issue Type: Bug
> Affects Versions: JCR OCM 2.0.4
> Reporter: Markus Pallo
> Attachments: slingclassdescriptor.patch
>
>
> I started using ocm mapping and there are attributes missing in ClassDescriptor reader.
> ---mappings.xml-----------------------------------------------------
> <!--
> Class: de.dig.cms.common.ocm.Base
> -->
> <class-descriptor
> className="de.dig.cms.common.ocm.Base"
> jcrMixinTypes="mix:referenceable">
>
> <field-descriptor
> fieldName="id"
> uuid="true" />
>
> <field-descriptor
> fieldName="name"
> jcrName="true" />
>
> <field-descriptor
> fieldName="path"
> path="true" />
> <bean-descriptor
> fieldName="parentBase"
> converter="org.apache.jackrabbit.ocm.manager.beanconverter.impl.ReferenceBeanConverterImpl" />
> </class-descriptor>
>
> ---Base.class------------------------------------
> package ocm;
>
> /**
> * @ocm.mapped discriminator="true" jcrMixinTypes="mix:referenceable, mix:lockable"
> */
> public class Base {
> private String resourceType;
>
> /**
> * @ocm.field uuid="true"
> */
> private String id;
>
> /**
> * @ocm.field jcrName="true"
> */
> private String name;
>
> /**
> * @ocm.field path="true"
> */
> private String path;
> /**
> * @ocm.bean converter="org.apache.jackrabbit.ocm.manager.beanconverter.impl.ReferenceBeanConverterImpl
> */
> Base parentBase;
> public Base() {
> }
>
> public String getUuid() {
> return uuid;
> }
>
> public void setUuid(String uuid) {
> this.uuid = uuid;
> }
>
> public String getName() {
> return name;
> }
>
> public void setName(String name) {
> this.name = name;
> }
>
> public String getPath() {
> return path;
> }
>
> public void setPath(String path) {
> this.path = path;
> }
>
> ....
>
> }
>
> 1. "Uuid" missing in parseFieldDescriptor
> i have a mapped class (see below) and after inserting and retrieving the
> object out of the repository, the id (uuid) is not filled.
>
> Base base = new Base();
> base.setPath("/ocmtestpath");
> base.setTitle("ocmtesttitle");
> base.setName("ocmtestname");
>
> objectContentManager.insert(base);
> try {
> Base base = (Base) objectContentManager.getObject(base.getPath());
> // error id is not filled with uuid
> } catch (Exception e) {
> }
> The generated (jcrocm) mappings.xml file has the entry for uuid.
> After patching sling ClassDescriptorReader.parseFieldDescriptor and add
> the following line
> fd.setUuid(this.getOptionalAttribute("uuid", false));
> it works.
> 2. "converter" attribute missing in parseBeanDescriptor
> I have a relation to another bean and i am unable to specify the converter class, its not set to jackrabbit in ClassReader
> 3. unable to set JcrMixinTypes to more than one, due to an error in setting setJcrMixinTypes in parseClassDescriptor reason strange jackrabbit behaviour.
> In ClassDescriptor you call
> fd.setJcrMixinTypes(this.getOptionalAttribute("jcrMixinTypes", (String[]) null));
> with a String[], thats correct.
> Jackrabbit ClassDescriptor looks like
> /**
> * Sets a comma separated list of mixin types.
> *
> * @param mixinTypes command separated list of mixins
> */
> public void setJcrMixinTypes(String[] mixinTypes) {
> if (null != mixinTypes && mixinTypes.length == 1) {
> jcrMixinTypes = mixinTypes[0].split(" *, *");
> }
> }
> public void setJcrMixinTypes(String mixinTypes) {
> if (mixinTypes != null && ! mixinTypes.equals(""))
> {
> jcrMixinTypes = mixinTypes.split(" *, *");
> }
> }
> as you see "setJcrMixinTypes(String[] mixinTypes)" uses only the first!!! array entry and only if it has a length of 1 !
> so i prefer calling the method setJcrMixinTypes(String mixinTypes), it will split by themself and then it will work.
> fd.setJcrMixinTypes(this.getOptionalAttribute("jcrMixinTypes", (String) null));
> Markus
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.