Author: niallp
Date: Tue Jun 26 22:34:15 2007
New Revision: 551047
URL: http://svn.apache.org/viewvc?view=rev&rev=551047
Log:
BEANUTILS-258 Improve ConvertUtilsBean's new convert(Object, Class) method - if
the registered Converter cannot handle conversion to String then try using the
registered String converter, before trying the Object's toString() method.
Highlighted by the problems BeanUtils changes caused to Betwixt - thanks to
Martin van den Bemt - see http://tinyurl.com/26ahat
Modified:
jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/ConvertUtilsBean.java
jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/ConvertUtilsTestCase.java
Modified:
jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/ConvertUtilsBean.java
URL:
http://svn.apache.org/viewvc/jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/ConvertUtilsBean.java?view=diff&rev=551047&r1=551046&r2=551047
==============================================================================
---
jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/ConvertUtilsBean.java
(original)
+++
jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/ConvertUtilsBean.java
Tue Jun 26 22:34:15 2007
@@ -544,7 +544,23 @@
}
if (targetType == String.class && converted != null &&
!(converted instanceof String)) {
- converted = converted.toString();
+
+ // NOTE: For backwards compatibility, if the Converter
+ // doesn't handle conversion-->String then
+ // use the registered String Converter
+ converter = lookup(String.class);
+ if (converter != null) {
+ if (log.isTraceEnabled()) {
+ log.trace(" Using converter " + converter);
+ }
+ converted = converter.convert(String.class, converted);
+ }
+
+ // If the object still isn't a String, use toString() method
+ if (converted != null && !(converted instanceof String)) {
+ converted = converted.toString();
+ }
+
}
return converted;
Modified:
jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/ConvertUtilsTestCase.java
URL:
http://svn.apache.org/viewvc/jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/ConvertUtilsTestCase.java?view=diff&rev=551047&r1=551046&r2=551047
==============================================================================
---
jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/ConvertUtilsTestCase.java
(original)
+++
jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/ConvertUtilsTestCase.java
Tue Jun 26 22:34:15 2007
@@ -614,23 +614,46 @@
}
public void testConvertToString() throws Exception {
+ Converter dummyConverter = new Converter() {
+ public Object convert(Class type, Object value) {
+ return value;
+ }
+ };
- ConvertUtilsBean utils = new ConvertUtilsBean();
+ Converter fooConverter = new Converter() {
+ public Object convert(Class type, Object value) {
+ return "Foo-Converter";
+ }
+ };
- // Register a DateConverter using Locale.US
DateConverter dateConverter = new DateConverter();
dateConverter.setLocale(Locale.US);
+
+ ConvertUtilsBean utils = new ConvertUtilsBean();
utils.register(dateConverter, java.util.Date.class);
+ utils.register(fooConverter, String.class);
+ // Convert using registerd DateConverter
java.util.Date today = new java.util.Date();
DateFormat fmt = new SimpleDateFormat("M/d/yy"); /* US Short Format */
String expected = fmt.format(today);
-
- assertEquals("date M/d/yy", expected, utils.convert(today,
String.class));
+ assertEquals("DateConverter M/d/yy", expected, utils.convert(today,
String.class));
- // Remove the registered DateConverter
+ // Date converter doesn't do String conversion - use String Converter
+ utils.register(dummyConverter, java.util.Date.class);
+ assertEquals("Date Converter doesn't do String conversion",
"Foo-Converter", utils.convert(today, String.class));
+
+ // No registered Date converter - use String Converter
utils.deregister(java.util.Date.class);
- assertEquals("Date.toString()", today.toString(), utils.convert(today,
String.class));
+ assertEquals("No registered Date converter", "Foo-Converter",
utils.convert(today, String.class));
+
+ // String Converter doesn't do Strings!!!
+ utils.register(dummyConverter, String.class);
+ assertEquals("String Converter doesn't do Strings!!!",
today.toString(), utils.convert(today, String.class));
+
+ // No registered Date or String converter - use Object's toString()
+ utils.deregister(String.class);
+ assertEquals("Object's toString()", today.toString(),
utils.convert(today, String.class));
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]