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]