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:23:14 UTC

[jira] Created: (SLING-1064) missing attribute mappings in ocm ClassDescriptorReader

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.


[jira] Updated: (SLING-1064) missing attribute mappings in ocm ClassDescriptorReader

Posted by "Carsten Ziegeler (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/SLING-1064?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Carsten Ziegeler updated SLING-1064:
------------------------------------

    Component/s: JCR

> missing attribute mappings in ocm ClassDescriptorReader
> -------------------------------------------------------
>
>                 Key: SLING-1064
>                 URL: https://issues.apache.org/jira/browse/SLING-1064
>             Project: Sling
>          Issue Type: Bug
>          Components: JCR
>    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.


[jira] Updated: (SLING-1064) missing attribute mappings in ocm ClassDescriptorReader

Posted by "Markus Pallo (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/SLING-1064?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Markus Pallo updated SLING-1064:
--------------------------------

    Attachment: slingclassdescriptor.patch

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.


[jira] Issue Comment Edited: (SLING-1064) missing attribute mappings in ocm ClassDescriptorReader

Posted by "Markus Pallo (JIRA)" <ji...@apache.org>.
    [ 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.