[jbossseam-issues] [JBoss JIRA] Commented: (JBSEAM-1867) NPE in org.jboss.seam.util.Reflections when an exception arise while accessing a static field

Thomas Bauer (JIRA) jira-events at lists.jboss.org
Mon Aug 27 12:49:18 EDT 2007


    [ http://jira.jboss.com/jira/browse/JBSEAM-1867?page=comments#action_12374024 ] 
            
Thomas Bauer commented on JBSEAM-1867:
--------------------------------------

Yes of course, but as it will get detected at runtime it will produce an NPE with no clue what the problem is.
This way (I used commons-logging) I stumbled upon the bug.

But if you analyze the code (org.jboss.seam.Component:840 calls org.jboss.seam.util.Reflections:60) you will see that it's possible that the NPE arises if Field.set throws an IAE.

The issues I see:
Problem 1: Developer gets no response that he used the wrong type on the static field (as the error message gets discarded)

Problem 2: There might be a case where this issue arise with another type than the logger. And the code obviously has a weakness (as passing null as target is typical for static fields)

> NPE in org.jboss.seam.util.Reflections when an exception arise while accessing a static field
> ---------------------------------------------------------------------------------------------
>
>                 Key: JBSEAM-1867
>                 URL: http://jira.jboss.com/jira/browse/JBSEAM-1867
>             Project: JBoss Seam
>          Issue Type: Bug
>          Components: Core
>    Affects Versions: 2.0.0.BETA1
>         Environment: MAC OS X 10.4.10, Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_07-164)
> Java HotSpot(TM) Client VM (build 1.5.0_07-87, mixed mode, sharing), G5 PPC
>            Reporter: Thomas Bauer
>
> When an exception is thrown while accessing a static field in org.jboss.seam.util.Reflections.get/set (org/jboss/seam/util/Reflections line 46 and 60) the catch-block will throw a NPE when accessing the variable "target" (which is null):
> Static Fields may have target == null (e.g. call from org.jboss.seam.Component:840:
>     if ( Modifier.isStatic( field.getModifiers() ) )
>          {
>             Reflections.setAndWrap(field, null, logInstance); // <== HERE 'null' is passed as target
>          }
> )
>    public static void set(Field field, Object target, Object value) throws Exception
>    {
>       try
>       {
>          field.set(target, value);
>       }
>       catch (IllegalArgumentException iae)
>       {
>          String message = "Could not set field value by reflection: " + toString(field) +
>             " on: " + target.getClass().getName(); // <== HERE target == null -> NPE!
>  /* snipped */
>       }
>    }
> This appears in:
> cvs status Reflections.java 
> ===================================================================
> File: Reflections.java  Status: Up-to-date
>    Working revision:    1.22
>    Repository revision: 1.22    /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/util/Reflections.java,v
>    Sticky Tag:          (none)
>    Sticky Date:         (none)
>    Sticky Options:      (none)
> You can reproduce the Bug when creating a bean:
> * import org.apache.commons.logging.Log instead of org.jboss.seam.log.Log
> * Inject the logger: @Logger private static Log log;
> Reflections.java:64: field.set(target, value);
> will throw an IllegalArgumentException because it can't assign the object because of type-mismatch

-- 
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