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]