Author: niallp
Date: Mon May 21 17:59:25 2007
New Revision: 540381

URL: http://svn.apache.org/viewvc?view=rev&rev=540381
Log:
Improvements to AbstractConverter:
- convertToString() to declare throwing Throwable (was declaring any errors on 
method signature)
- convertToType() methods to declare throwing Throwable (rather than Exception)
- error handling to now include errors thrown by convertToString() (previously 
just convertToType())
- error handling to handle Throwable (was Exception)
- error handling to initialize the cause for JDK 1.4+
- change Log instance to transient and change all logging methods to use the 
log() method
- modify Converters affected by AbstractConverter API change

Modified:
    
jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/converters/AbstractConverter.java
    
jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/converters/ArrayConverter.java
    
jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/converters/BooleanConverter.java
    
jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/converters/ClassConverter.java
    
jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/converters/DateTimeConverter.java
    
jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/converters/FileConverter.java
    
jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/converters/NumberConverter.java
    
jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/converters/URLConverter.java

Modified: 
jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/converters/AbstractConverter.java
URL: 
http://svn.apache.org/viewvc/jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/converters/AbstractConverter.java?view=diff&rev=540381&r1=540380&r2=540381
==============================================================================
--- 
jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/converters/AbstractConverter.java
 (original)
+++ 
jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/converters/AbstractConverter.java
 Mon May 21 17:59:25 2007
@@ -18,6 +18,7 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.commons.beanutils.BeanUtils;
 import org.apache.commons.beanutils.ConversionException;
 import org.apache.commons.beanutils.Converter;
 
@@ -58,7 +59,7 @@
     /**
      * Logging for this instance.
      */
-    private Log log = LogFactory.getLog(getClass());
+    private transient Log _log;
 
     /**
      * The default type this <code>Converter</code> handles.
@@ -123,8 +124,8 @@
         Class sourceType  = value == null ? null : value.getClass();
         Class targetType  = primitive(type  == null ? getDefaultType() : type);
 
-        if (log.isDebugEnabled()) {
-            log.debug("Converting"
+        if (log().isDebugEnabled()) {
+            log().debug("Converting"
                     + (value == null ? "" : " '" + toString(sourceType) + "'")
                     + " value '" + value + "' to type '" + 
toString(targetType) + "'");
         }
@@ -132,31 +133,32 @@
         // Missing Value
         if (value == null) {
             return handleMissing(targetType);
+        }
 
-        // Convert --> String
-        } else if (targetType.equals(String.class)) {
-            return convertToString(value);
-
-        // No conversion necessary
-        } else if (targetType.equals(sourceType)) {
-            if (log.isDebugEnabled()) {
-                log.debug("    No conversion required, value is already a "
-                                + toString(targetType));
-            }
-            return value;
+        try {
+            // Convert --> String
+            if (targetType.equals(String.class)) {
+                return convertToString(value);
+
+            // No conversion necessary
+            } else if (targetType.equals(sourceType)) {
+                if (log().isDebugEnabled()) {
+                    log().debug("    No conversion required, value is already 
a "
+                                    + toString(targetType));
+                }
+                return value;
 
-        // Convert --> Type
-        } else {
-            try {
+            // Convert --> Type
+            } else {
                 Object result = convertToType(targetType, value);
-                if (log.isDebugEnabled()) {
-                    log.debug("    Converted to " + toString(targetType) +
+                if (log().isDebugEnabled()) {
+                    log().debug("    Converted to " + toString(targetType) +
                                    " value '" + result + "'");
                 }
                 return result;
-            } catch (Exception ex) {
-                return handleError(targetType, value, ex);
             }
+        } catch (Throwable t) {
+            return handleError(targetType, value, t);
         }
 
     }
@@ -171,8 +173,9 @@
      *
      * @param value The input value to be converted.
      * @return the converted String value.
+     * @throws Throwable if an error occurs converting to a String
      */
-    protected String convertToString(Object value) {
+    protected String convertToString(Object value) throws Throwable {
         return value.toString();
     }
 
@@ -186,9 +189,9 @@
      * @param type Data type to which this value should be converted.
      * @param value The input value to be converted.
      * @return The converted value.
-     * @throws Exception if an error occurs converting to the specified type
+     * @throws Throwable if an error occurs converting to the specified type
      */
-    protected abstract Object convertToType(Class type, Object value) throws 
Exception;
+    protected abstract Object convertToType(Class type, Object value) throws 
Throwable;
 
     /**
      * Handle Conversion Errors.
@@ -198,17 +201,17 @@
      *
      * @param type Data type to which this value should be converted.
      * @param value The input value to be converted
-     * @param ex The exception thrown by the <code>convert</code> method
+     * @param cause The exception thrown by the <code>convert</code> method
      * @return The default value.
      * @throws ConversionException if no default value has been
      * specified for this [EMAIL PROTECTED] Converter}.
      */
-    protected Object handleError(Class type, Object value, Exception ex) {
-        if (log.isDebugEnabled()) {
-            if (ex instanceof ConversionException) {
-                log.debug("    Conversion threw ConversionException: " + 
ex.getMessage());
+    protected Object handleError(Class type, Object value, Throwable cause) {
+        if (log().isDebugEnabled()) {
+            if (cause instanceof ConversionException) {
+                log().debug("    Conversion threw ConversionException: " + 
cause.getMessage());
             } else {
-                log.debug("    Conversion threw " + ex);
+                log().debug("    Conversion threw " + cause);
             }
         }
 
@@ -217,20 +220,21 @@
         }
 
         ConversionException cex = null;
-        if (ex instanceof ConversionException) {
-            cex = (ConversionException)ex;
-            if (log.isDebugEnabled()) {
-                log.debug("    Re-throwing ConversionException: " + 
cex.getMessage());
-                log.debug("    " + DEFAULT_CONFIG_MSG);
+        if (cause instanceof ConversionException) {
+            cex = (ConversionException)cause;
+            if (log().isDebugEnabled()) {
+                log().debug("    Re-throwing ConversionException: " + 
cex.getMessage());
+                log().debug("    " + DEFAULT_CONFIG_MSG);
             }
         } else {
             String msg = "Error converting from '" + 
toString(value.getClass()) +
-                    "' to '" + toString(type) + "' " + ex.getMessage();
-            cex = new ConversionException(msg, ex);
-            if (log.isDebugEnabled()) {
-                log.debug("    Throwing ConversionException: " + msg);
-                log.debug("    " + DEFAULT_CONFIG_MSG);
+                    "' to '" + toString(type) + "' " + cause.getMessage();
+            cex = new ConversionException(msg, cause);
+            if (log().isDebugEnabled()) {
+                log().debug("    Throwing ConversionException: " + msg);
+                log().debug("    " + DEFAULT_CONFIG_MSG);
             }
+            BeanUtils.initCause(cex, cause);
         }
 
         throw cex;
@@ -255,12 +259,13 @@
             if (useDefault && value != null && 
!(type.equals(value.getClass()))) {
                 try {
                     value = convertToType(type, defaultValue);
-                } catch (Exception e) {
-                    // default conversion shouldn't fail
+                } catch (Throwable t) {
+                    log().error("    Default conversion to " + toString(type)
+                            + "failed: " + t);
                 }
             }
-            if (log.isDebugEnabled()) {
-                log.debug("    Using default "
+            if (log().isDebugEnabled()) {
+                log().debug("    Using default "
                         + (value == null ? "" : toString(value.getClass()) + " 
")
                         + "value '" + defaultValue + "'");
             }
@@ -269,9 +274,9 @@
 
         ConversionException cex =  new ConversionException("No value specified 
for '" +
                 toString(type) + "'");
-        if (log.isDebugEnabled()) {
-            log.debug("    Throwing ConversionException: " + cex.getMessage());
-            log.debug("    " + DEFAULT_CONFIG_MSG);
+        if (log().isDebugEnabled()) {
+            log().debug("    Throwing ConversionException: " + 
cex.getMessage());
+            log().debug("    " + DEFAULT_CONFIG_MSG);
         }
         throw cex;
 
@@ -292,8 +297,8 @@
      */
     protected void setDefaultValue(Object defaultValue) {
         useDefault = false;
-        if (log.isDebugEnabled()) {
-            log.debug("Setting default value: " + defaultValue);
+        if (log().isDebugEnabled()) {
+            log().debug("Setting default value: " + defaultValue);
         }
         if (defaultValue == null) {
            this.defaultValue  = null;
@@ -339,7 +344,10 @@
      * @return The Log instance.
      */
     Log log() {
-        return log;
+        if (_log == null) {
+            _log = LogFactory.getLog(getClass());
+        }
+        return _log;
     }
 
     /**

Modified: 
jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/converters/ArrayConverter.java
URL: 
http://svn.apache.org/viewvc/jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/converters/ArrayConverter.java?view=diff&rev=540381&r1=540380&r2=540381
==============================================================================
--- 
jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/converters/ArrayConverter.java
 (original)
+++ 
jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/converters/ArrayConverter.java
 Mon May 21 17:59:25 2007
@@ -214,8 +214,9 @@
      *
      * @param value The value to be converted.
      * @return the converted String value.
+     * @throws Throwable if an error occurs converting to a String
      */
-    protected String convertToString(Object value) {
+    protected String convertToString(Object value) throws Throwable {
 
         int size = 0;
         Iterator iterator = null;
@@ -259,9 +260,9 @@
      * @param type The type to which this value should be converted.
      * @param value The input value to be converted.
      * @return The converted value.
-     * @throws Exception if conversion cannot be performed successfully
+     * @throws Throwable if an error occurs converting to the specified type
      */
-    protected Object convertToType(Class type, Object value) throws Exception {
+    protected Object convertToType(Class type, Object value) throws Throwable {
 
         if (!type.isArray()) {
             throw new ConversionException(toString(getClass())

Modified: 
jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/converters/BooleanConverter.java
URL: 
http://svn.apache.org/viewvc/jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/converters/BooleanConverter.java?view=diff&rev=540381&r1=540380&r2=540381
==============================================================================
--- 
jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/converters/BooleanConverter.java
 (original)
+++ 
jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/converters/BooleanConverter.java
 Mon May 21 17:59:25 2007
@@ -186,11 +186,9 @@
      *  the default value if the value was not recognised and the constructor
      *  was provided with a default value.
      *
-     * @exception ConversionException if conversion cannot be performed
-     *  successfully and the constructor was not provided with a default
-     *  value to return on conversion failure.
+     * @throws Throwable if an error occurs converting to the specified type
      */
-    protected Object convertToType(Class type, Object value) throws Exception {
+    protected Object convertToType(Class type, Object value) throws Throwable {
 
         // All the values in the trueStrings and falseStrings arrays are
         // guaranteed to be lower-case. By converting the input value

Modified: 
jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/converters/ClassConverter.java
URL: 
http://svn.apache.org/viewvc/jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/converters/ClassConverter.java?view=diff&rev=540381&r1=540380&r2=540381
==============================================================================
--- 
jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/converters/ClassConverter.java
 (original)
+++ 
jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/converters/ClassConverter.java
 Mon May 21 17:59:25 2007
@@ -71,9 +71,9 @@
      * @param type Data type to which this value should be converted.
      * @param value The input value to be converted.
      * @return The converted value.
-     * @throws Exception if conversion cannot be performed successfully
+     * @throws Throwable if an error occurs converting to the specified type
      */
-    protected Object convertToType(Class type, Object value) throws Exception {
+    protected Object convertToType(Class type, Object value) throws Throwable {
         ClassLoader classLoader =
             Thread.currentThread().getContextClassLoader();
         if (classLoader == null) {

Modified: 
jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/converters/DateTimeConverter.java
URL: 
http://svn.apache.org/viewvc/jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/converters/DateTimeConverter.java?view=diff&rev=540381&r1=540380&r2=540381
==============================================================================
--- 
jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/converters/DateTimeConverter.java
 (original)
+++ 
jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/converters/DateTimeConverter.java
 Mon May 21 17:59:25 2007
@@ -222,8 +222,9 @@
      *
      * @param value The input value to be converted
      * @return the converted String value.
+     * @throws Throwable if an error occurs converting to a String
      */
-    protected String convertToString(Object value) {
+    protected String convertToString(Object value) throws Throwable {
 
         Date date = null;
         if (value instanceof Date) {

Modified: 
jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/converters/FileConverter.java
URL: 
http://svn.apache.org/viewvc/jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/converters/FileConverter.java?view=diff&rev=540381&r1=540380&r2=540381
==============================================================================
--- 
jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/converters/FileConverter.java
 (original)
+++ 
jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/converters/FileConverter.java
 Mon May 21 17:59:25 2007
@@ -59,9 +59,9 @@
      * @param type Data type to which this value should be converted.
      * @param value The input value to be converted.
      * @return The converted value.
-     * @throws Exception if conversion cannot be performed successfully
+     * @throws Throwable if an error occurs converting to the specified type
      */
-    protected Object convertToType(Class type, Object value) throws Exception {
+    protected Object convertToType(Class type, Object value) throws Throwable {
         return new File(value.toString());
     }
 }

Modified: 
jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/converters/NumberConverter.java
URL: 
http://svn.apache.org/viewvc/jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/converters/NumberConverter.java?view=diff&rev=540381&r1=540380&r2=540381
==============================================================================
--- 
jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/converters/NumberConverter.java
 (original)
+++ 
jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/converters/NumberConverter.java
 Mon May 21 17:59:25 2007
@@ -199,8 +199,9 @@
      *
      * @param value The input value to be converted
      * @return the converted String value.
+     * @throws Throwable if an error occurs converting to a String
      */
-    protected String convertToString(Object value) {
+    protected String convertToString(Object value) throws Throwable {
 
         String result = null;
         if (useLocaleFormat && value instanceof Number) {
@@ -228,9 +229,9 @@
      * @param type Data type to which this value should be converted.
      * @param value The input value to be converted.
      * @return The converted value.
-     * @throws Exception if conversion cannot be performed successfully
+     * @throws Throwable if an error occurs converting to the specified type
      */
-    protected Object convertToType(Class type, Object value) throws Exception {
+    protected Object convertToType(Class type, Object value) throws Throwable {
 
         // Handle Number
         if (value instanceof Number) {

Modified: 
jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/converters/URLConverter.java
URL: 
http://svn.apache.org/viewvc/jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/converters/URLConverter.java?view=diff&rev=540381&r1=540380&r2=540381
==============================================================================
--- 
jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/converters/URLConverter.java
 (original)
+++ 
jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/converters/URLConverter.java
 Mon May 21 17:59:25 2007
@@ -58,9 +58,9 @@
      * @param type Data type to which this value should be converted.
      * @param value The input value to be converted.
      * @return The converted value.
-     * @throws Exception if conversion cannot be performed successfully
+     * @throws Throwable if an error occurs converting to the specified type
      */
-    protected Object convertToType(Class type, Object value) throws Exception {
+    protected Object convertToType(Class type, Object value) throws Throwable {
         return new URL(value.toString());
     }
 



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

Reply via email to