[jbossseam-issues] [JBoss JIRA] Commented: (JBSEAM-1892) org.jboss.seam.Entity constructor gets methods and fields from wrong instance.

Pete Muir (JIRA) jira-events at lists.jboss.org
Sat Sep 1 05:54:18 EDT 2007


    [ http://jira.jboss.com/jira/browse/JBSEAM-1892?page=comments#action_12374924 ] 
            
Pete Muir commented on JBSEAM-1892:
-----------------------------------

Thanks for the bug report :)

> org.jboss.seam.Entity constructor gets methods and fields from wrong instance.
> ------------------------------------------------------------------------------
>
>                 Key: JBSEAM-1892
>                 URL: http://jira.jboss.com/jira/browse/JBSEAM-1892
>             Project: JBoss Seam
>          Issue Type: Bug
>          Components: Core
>    Affects Versions: 2.0.0.BETA1
>            Reporter: Chris Rudd
>         Assigned To: Pete Muir
>             Fix For: 2.0.0.CR1
>
>
> The constructor for org.jboss.seam.Entity searches the fields and methods of an Entity class. The control loop uses "clazz" for the current class to be scanned, but the code in the for loops access getBeanClass(), so even thogh it checks each super class of the entity, each iteration gets the declared methods/fields from the beanClass.
> Entity.java line 38
>  public Entity(Class<?> beanClass)
>    {
>       super(beanClass);
>       
>       for ( Class<?> clazz=beanClass; clazz!=Object.class; clazz = clazz.getSuperclass() )
>       {
> -         for ( Method method: getBeanClass().getDeclaredMethods() )
> +        for( Method method:clazz.getDeclaredMethods() )
>          {
>             //TODO: does the spec allow multiple lifecycle method
>             //      in the entity class heirarchy?
>             if ( method.isAnnotationPresent(PreRemove.class) )
>             {
>                preRemoveMethod = method;
>             }
>             if ( method.isAnnotationPresent(PrePersist.class) )
>             {
>                prePersistMethod = method;
>             }
>             if ( method.isAnnotationPresent(PreUpdate.class) )
>             {
>                preUpdateMethod = method;
>             }
>             if ( method.isAnnotationPresent(PostLoad.class) )
>             {
>                postLoadMethod = method;
>             }
>             if ( method.isAnnotationPresent(Id.class) || method.isAnnotationPresent(EmbeddedId.class))
>             {
>                identifierGetter = method;
>             }
>             if ( method.isAnnotationPresent(Version.class) )
>             {
>                versionGetter = method;
>             }
>             
>             if ( !method.isAccessible() )
>             {
>                method.setAccessible(true);
>             }
>          }
>          
>          if (identifierGetter==null)
>          {
> -            for ( Field field: getBeanClass().getDeclaredFields() )
> +           for ( Field field: clazz.getDeclaredFields() )
>             {
>                if ( field.isAnnotationPresent(Id.class) || field.isAnnotationPresent(EmbeddedId.class))
>                {
>                   identifierField = field;
>                   if ( !field.isAccessible() )
>                   {
>                      field.setAccessible(true);
>                   }
>                }
>                if ( field.isAnnotationPresent(Version.class) )
>                {
>                   versionField = field;
>                   if ( !field.isAccessible() )
>                   {
>                      field.setAccessible(true);
>                   }
>                }
>             }
>          }
>          
>       }
>       
>    }

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.jboss.com/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        



More information about the seam-issues mailing list