henning     2004/09/20 10:00:03

  Modified:    src/java/org/apache/turbine/services/intake Tag:
                        TURBINE_2_3_BRANCH TurbineIntakeService.java
  Log:
  This is a patch that I run for many moons without any bad effects. It
  makes the getter/setter reflection code in intake a bit more robust
  and makes it possible to reflect on beans that have only a setter or
  only a getter.
  
  Revision  Changes    Path
  No                   revision
  No                   revision
  1.14.2.4  +80 -34    
jakarta-turbine-2/src/java/org/apache/turbine/services/intake/TurbineIntakeService.java
  
  Index: TurbineIntakeService.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-turbine-2/src/java/org/apache/turbine/services/intake/TurbineIntakeService.java,v
  retrieving revision 1.14.2.3
  retrieving revision 1.14.2.4
  diff -u -r1.14.2.3 -r1.14.2.4
  --- TurbineIntakeService.java 16 Aug 2004 22:57:49 -0000      1.14.2.3
  +++ TurbineIntakeService.java 20 Sep 2004 17:00:03 -0000      1.14.2.4
  @@ -39,6 +39,8 @@
   
   import javax.servlet.ServletConfig;
   
  +import org.apache.commons.lang.StringUtils;
  +
   import org.apache.commons.logging.Log;
   import org.apache.commons.logging.LogFactory;
   
  @@ -649,13 +651,31 @@
   
           if (setter == null)
           {
  -            PropertyDescriptor pd =
  -                    new PropertyDescriptor(propName,
  -                            Class.forName(className));
  +            PropertyDescriptor pd = null;
  +
               synchronized (setterMap)
               {
  +                try
  +                {
  +                    pd = new PropertyDescriptor(propName,
  +                            Class.forName(className));
  +                }
  +                catch (IntrospectionException ie)
  +                {
  +                    if (log.isWarnEnabled())
  +                    {
  +                        log.warn("Trying to find only a setter for " + propName);
  +                    }
  +                    
  +                    pd = new PropertyDescriptor(propName,
  +                            Class.forName(className),
  +                            "set" + StringUtils.capitalise(propName),
  +                            null); // Java sucks.
  +                }
  +                
                   setter = pd.getWriteMethod();
                   settersForClassName.put(propName, setter);
  +
                   if (setter == null)
                   {
                       log.error("Intake: setter for '" + propName
  @@ -663,25 +683,29 @@
                               + "' could not be found.");
                   }
               }
  -            // we have already completed the reflection on the getter, so
  -            // save it so we do not have to repeat
  -            synchronized (getterMap)
  -            {
  -                Map gettersForClassName = (Map) getterMap.get(className);
   
  -                if (gettersForClassName != null)
  +            if (pd.getReadMethod() != null)
  +            {
  +                // we have already completed the reflection on the getter, so
  +                // save it so we do not have to repeat
  +                synchronized (getterMap)
                   {
  -                    try
  +                    Map gettersForClassName = (Map) getterMap.get(className);
  +                    
  +                    if (gettersForClassName != null)
                       {
  -                        Method getter = pd.getReadMethod();
  -                        if (getter != null)
  +                        try
                           {
  -                            gettersForClassName.put(propName, getter);
  +                            Method getter = pd.getReadMethod();
  +                            if (getter != null)
  +                            {
  +                                gettersForClassName.put(propName, getter);
  +                            }
  +                        }
  +                        catch (Exception e)
  +                        {
  +                            // Do nothing
                           }
  -                    }
  -                    catch (Exception e)
  -                    {
  -                        // Do nothing
                       }
                   }
               }
  @@ -713,12 +737,30 @@
           if (getter == null)
           {
               PropertyDescriptor pd = null;
  +
               synchronized (getterMap)
               {
  -                pd = new PropertyDescriptor(propName,
  -                        Class.forName(className));
  +                try
  +                {
  +                    pd = new PropertyDescriptor(propName,
  +                            Class.forName(className));
  +                }
  +                catch (IntrospectionException ie)
  +                {
  +                    if (log.isWarnEnabled())
  +                    {
  +                        log.warn("Trying to find only a getter for " + propName);
  +                    }
  +                    
  +                    pd = new PropertyDescriptor(propName,
  +                            Class.forName(className),
  +                            "get" + StringUtils.capitalise(propName),
  +                            null); // Java sucks some more.
  +                }
  +                
                   getter = pd.getReadMethod();
                   gettersForClassName.put(propName, getter);
  +
                   if (getter == null)
                   {
                       log.error("Intake: getter for '" + propName
  @@ -726,25 +768,29 @@
                               + "' could not be found.");
                   }
               }
  -            // we have already completed the reflection on the setter, so
  -            // save it so we do not have to repeat
  -            synchronized (setterMap)
  -            {
  -                Map settersForClassName = (Map) getterMap.get(className);
   
  -                if (settersForClassName != null)
  +            if (pd.getWriteMethod() != null)
  +            {
  +                // we have already completed the reflection on the setter, so
  +                // save it so we do not have to repeat
  +                synchronized (setterMap)
                   {
  -                    try
  +                    Map settersForClassName = (Map) getterMap.get(className);
  +                    
  +                    if (settersForClassName != null)
                       {
  -                        Method setter = pd.getWriteMethod();
  -                        if (setter != null)
  +                        try
                           {
  -                            settersForClassName.put(propName, setter);
  +                            Method setter = pd.getWriteMethod();
  +                            if (setter != null)
  +                            {
  +                                settersForClassName.put(propName, setter);
  +                            }
  +                        }
  +                        catch (Exception e)
  +                        {
  +                            // Do nothing
                           }
  -                    }
  -                    catch (Exception e)
  -                    {
  -                        // Do nothing
                       }
                   }
               }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to