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]