Hi. I just spent more time than I would have liked tracking down an IllegalArgumentException with a useless message from java.lang.reflect.Method.invoke(). I added some trace-level logging to PropertyUtils (everywhere it calls a write method) and discovered the source of my troubles right away.
I thought the logging might be useful to others, so I'm submitting it here for your consideration in a future release. Oh, the patch also fixes a little spelling mistake in the javadoc. :-) -- Jonathan Fuerth - SQL Power Group Inc. (416)221-4220 (Toronto); 1-866-SQL-POWR (Toll-Free) Unleash the Power of your Corporate Data - http://www.sqlpower.ca/
--- PropertyUtils.java.1.6.1 Thu Oct 9 12:51:14 2003 +++ PropertyUtils.java Thu Oct 9 12:53:30 2003 @@ -77,6 +77,8 @@ import java.util.Map; import org.apache.commons.collections.FastHashMap; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; /** @@ -142,7 +144,7 @@ /** - * The delimiter that preceeds the zero-relative subscript for an + * The delimiter that precedes the zero-relative subscript for an * indexed reference. */ public static final char INDEXED_DELIM = '['; @@ -156,7 +158,7 @@ /** - * The delimiter that preceeds the key of a mapped property. + * The delimiter that precedes the key of a mapped property. */ public static final char MAPPED_DELIM = '('; @@ -196,6 +198,10 @@ debug = newDebug; } + /** + * All logging goes through this logger + */ + private static Log log = LogFactory.getLog(BeanUtils.class); /** * The cache of PropertyDescriptor arrays for beans we have already @@ -1432,6 +1438,15 @@ subscript[0] = new Integer(index); subscript[1] = value; try { + if (log.isTraceEnabled()) { + String valueClassName = + value == null ? "<null>" + : value.getClass().getName(); + log.trace("setSimpleProperty: Invoking method " + +writeMethod+" with index="+index + +", value="+value + +" (class "+valueClassName+")"); + } writeMethod.invoke(bean, subscript); } catch (InvocationTargetException e) { if (e.getTargetException() instanceof @@ -1580,6 +1595,14 @@ Object params[] = new Object[2]; params[0] = key; params[1] = value; + if (log.isTraceEnabled()) { + String valueClassName = + value == null ? "<null>" : value.getClass().getName(); + log.trace("setSimpleProperty: Invoking method " + +mappedWriteMethod+" with key="+key + +", value="+value + +" (class "+valueClassName+")"); + } mappedWriteMethod.invoke(bean, params); } else { throw new NoSuchMethodException @@ -1786,6 +1809,12 @@ // Call the property setter method Object values[] = new Object[1]; values[0] = value; + if (log.isTraceEnabled()) { + String valueClassName = + value == null ? "<null>" : value.getClass().getName(); + log.trace("setSimpleProperty: Invoking method "+writeMethod + +" with value "+value+" (class "+valueClassName+")"); + } writeMethod.invoke(bean, values); }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]