You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by ad...@apache.org on 2009/11/10 18:18:35 UTC

svn commit: r834552 - /ofbiz/trunk/framework/base/src/org/ofbiz/base/util/ObjectType.java

Author: adrianc
Date: Tue Nov 10 17:18:34 2009
New Revision: 834552

URL: http://svn.apache.org/viewvc?rev=834552&view=rev
Log:
Modified ObjectType.java to use only the new conversion framework.

This change can be reverted if any major issues come up. I will monitor the dev mailing list and fix any issues that are reported.

Modified:
    ofbiz/trunk/framework/base/src/org/ofbiz/base/util/ObjectType.java

Modified: ofbiz/trunk/framework/base/src/org/ofbiz/base/util/ObjectType.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/util/ObjectType.java?rev=834552&r1=834551&r2=834552&view=diff
==============================================================================
--- ofbiz/trunk/framework/base/src/org/ofbiz/base/util/ObjectType.java (original)
+++ ofbiz/trunk/framework/base/src/org/ofbiz/base/util/ObjectType.java Tue Nov 10 17:18:34 2009
@@ -490,8 +490,6 @@
             type = type.substring(0, genericsStart);
         }
 
-        // ----- Try out new conversion code -----
-
         Class<?> sourceClass = obj.getClass();
         Class<?> targetClass = null;
         try {
@@ -500,611 +498,56 @@
             Debug.logError(e, module);
             return obj;
         }
-
+        if (sourceClass.equals(targetClass)) {
+            return obj;
+        }
         Converter<Object,Object> converter = null;
         try {
             converter = (Converter<Object, Object>) Converters.getConverter(sourceClass, targetClass);
         } catch (ClassNotFoundException e) {}
         if (converter != null) {
+            LocalizedConverter<Object, Object> localizedConverter = null;
             try {
-                LocalizedConverter<Object, Object> localizedConverter = (LocalizedConverter) converter;
+                localizedConverter = (LocalizedConverter) converter;
+            } catch (Exception e) {}
+            if (localizedConverter != null) {
                 if (timeZone == null) {
                     timeZone = TimeZone.getDefault();
                 }
                 if (locale == null) {
                     locale = Locale.getDefault();
                 }
-                return localizedConverter.convert(obj, locale, timeZone, format);
-            } catch (Exception e) {}
-            try {
-                return converter.convert(obj);
-            } catch (ConversionException e) {}
-        }
-
-        // ---------------------------------------
-
-        if (obj.getClass().getName().equals(type)) {
-            return obj;
-        }
-        if ("PlainString".equals(type)) {
-            return obj.toString();
-        }
-        if ("Object".equals(type) || "java.lang.Object".equals(type)) {
-            return obj;
-        }
-
-        if (timeZone == null) {
-            timeZone = TimeZone.getDefault();
-        }
-
-        if (locale == null) {
-            locale = Locale.getDefault();
-        }
-
-        String fromType = null;
-
-        if ((type.equals("List") || type.equals("java.util.List")) && obj.getClass().isArray()) {
-            List<Object> newObj = FastList.newInstance();
-            int len = Array.getLength(obj);
-            for (int i = 0; i < len; i++) {
-                newObj.add(Array.get(obj, i));
-            }
-            return newObj;
-        } else if (obj instanceof java.lang.String) {
-            fromType = "String";
-            String str = (String) obj;
-            if ("String".equals(type) || "java.lang.String".equals(type)) {
-                return obj;
-            }
-            if (str.length() == 0) {
-                return null;
-            }
-
-            if ("Boolean".equals(type) || "java.lang.Boolean".equals(type)) {
-                str = StringUtil.removeSpaces(str);
-                return str.equalsIgnoreCase("TRUE") ? Boolean.TRUE : Boolean.FALSE;
-            } else if ("Locale".equals(type) || "java.util.Locale".equals(type)) {
-                Locale loc = UtilMisc.parseLocale(str);
-                if (loc != null) {
-                    return loc;
-                } else {
-                    throw new GeneralException("Could not convert " + str + " to " + type + ": ");
-                }
-            } else if ("TimeZone".equals(type) || "java.util.TimeZone".equals(type)) {
-                TimeZone tz = UtilDateTime.toTimeZone(str);
-                if (tz != null) {
-                    return tz;
-                } else {
-                    throw new GeneralException("Could not convert " + str + " to " + type + ": ");
-                }
-            } else if ("BigDecimal".equals(type) || "java.math.BigDecimal".equals(type)) {
-                str = StringUtil.removeSpaces(str);
-                try {
-                    NumberFormat nf = NumberFormat.getNumberInstance(locale);
-                    Number tempNum = nf.parse(str);
-                    return new BigDecimal(tempNum.toString());
-                } catch (ParseException e) {
-                    throw new GeneralException("Could not convert " + str + " to " + type + ": ", e);
-                }
-            } else if ("Double".equals(type) || "java.lang.Double".equals(type)) {
-                str = StringUtil.removeSpaces(str);
-                try {
-                    NumberFormat nf = NumberFormat.getNumberInstance(locale);
-                    Number tempNum = nf.parse(str);
-
-                    return Double.valueOf(tempNum.doubleValue());
-                } catch (ParseException e) {
-                    throw new GeneralException("Could not convert " + str + " to " + type + ": ", e);
-                }
-            } else if ("Float".equals(type) || "java.lang.Float".equals(type)) {
-                str = StringUtil.removeSpaces(str);
-                try {
-                    NumberFormat nf = NumberFormat.getNumberInstance(locale);
-                    Number tempNum = nf.parse(str);
-
-                    return Float.valueOf(tempNum.floatValue());
-                } catch (ParseException e) {
-                    throw new GeneralException("Could not convert " + str + " to " + type + ": ", e);
-                }
-            } else if ("Long".equals(type) || "java.lang.Long".equals(type)) {
-                str = StringUtil.removeSpaces(str);
-                try {
-                    NumberFormat nf = NumberFormat.getNumberInstance(locale);
-                    nf.setMaximumFractionDigits(0);
-                    Number tempNum = nf.parse(str);
-
-                    return Long.valueOf(tempNum.longValue());
-                } catch (ParseException e) {
-                    throw new GeneralException("Could not convert " + str + " to " + type + ": ", e);
-                }
-            } else if ("Integer".equals(type) || "java.lang.Integer".equals(type)) {
-                str = StringUtil.removeSpaces(str);
                 try {
-                    NumberFormat nf = NumberFormat.getNumberInstance(locale);
-                    nf.setMaximumFractionDigits(0);
-                    Number tempNum = nf.parse(str);
-
-                    return Integer.valueOf(tempNum.intValue());
-                } catch (ParseException e) {
-                    throw new GeneralException("Could not convert " + str + " to " + type + ": ", e);
-                }
-            } else if ("Date".equals(type) || "java.sql.Date".equals(type)) {
-                DateFormat df = null;
-                if (format == null || format.length() == 0) {
-                    df = UtilDateTime.toDateFormat(UtilDateTime.DATE_FORMAT, timeZone, locale);
-                } else {
-                    df = UtilDateTime.toDateFormat(format, timeZone, locale);
-                }
-                try {
-                    Date fieldDate = df.parse(str);
-                    return new java.sql.Date(fieldDate.getTime());
-                } catch (ParseException e1) {
-                    throw new GeneralException("Could not convert " + str + " to " + type + ": ", e1);
-                }
-            } else if ("Time".equals(type) || "java.sql.Time".equals(type)) {
-                DateFormat df = null;
-                if (format == null || format.length() == 0) {
-                    df = UtilDateTime.toTimeFormat(UtilDateTime.TIME_FORMAT, timeZone, locale);
-                } else {
-                    df = UtilDateTime.toTimeFormat(format, timeZone, locale);
-                }
-                try {
-                    Date fieldDate = df.parse(str);
-                    return new java.sql.Time(fieldDate.getTime());
-                } catch (ParseException e1) {
-                    throw new GeneralException("Could not convert " + str + " to " + type + ": ", e1);
-                }
-            } else if ("Timestamp".equals(type) || "java.sql.Timestamp".equals(type)) {
-                DateFormat df = null;
-                if (format == null || format.length() == 0) {
-                    df = UtilDateTime.toDateTimeFormat(UtilDateTime.DATE_TIME_FORMAT, timeZone, locale);
-                    // if time is missing add zeros
-                    if (str.length() > 0 && !str.contains(":")) {
-                        str = str + " 00:00:00.00";
-                    }
-                    // hack to mimic Timestamp.valueOf() method
-                    if (str.length() > 0 && !str.contains(".")) {
-                        str = str + ".0";
-                    } else {
-                        // DateFormat has a funny way of parsing milliseconds:
-                        // 00:00:00.2 parses to 00:00:00.002
-                        // so we'll add zeros to the end to get 00:00:00.200
-                        String[] timeSplit = str.split("[.]");
-                        if (timeSplit.length > 1 && timeSplit[1].length() < 3) {
-                            str = str + "000".substring(timeSplit[1].length());
-                        }
-                    }
-                } else {
-                    df = UtilDateTime.toDateTimeFormat(format, timeZone, locale);
-                }
-                try {
-                    Date fieldDate = df.parse(str);
-                    return new java.sql.Timestamp(fieldDate.getTime());
-                } catch (ParseException e1) {
-                    throw new GeneralException("Could not convert " + str + " to " + type + ": ", e1);
-                }
-            } else if ("List".equals(type) || "java.util.List".equals(type)) {
-                if (str.startsWith("[") && str.endsWith("]")) {
-                    return StringUtil.toList(str);
-                } else {
-                    List<String> tempList = FastList.newInstance();
-                    tempList.add(str);
-                    return tempList;
+                    return localizedConverter.convert(obj, locale, timeZone, format);
+                } catch (ConversionException e) {
+                    Debug.logError(e, module);
                 }
-            } else if ("Set".equals(type) || "java.util.Set".equals(type)) {
-                if (str.startsWith("[") && str.endsWith("]")) {
-                    return StringUtil.toSet(str);
-                } else {
-                    Set<String> tempSet = FastSet.newInstance();
-                    tempSet.add(str);
-                    return tempSet;
-                }
-            } else if (("Map".equals(type) || "java.util.Map".equals(type)) &&
-                    (str.startsWith("{") && str.endsWith("}"))) {
-                return StringUtil.toMap(str);
-            } else if ("TimeDuration".equals(type) || "org.ofbiz.base.util.TimeDuration".equals(type)) {
-                if (!str.contains(":")) {
-                    // Encoded duration
-                    try {
-                        NumberFormat nf = NumberFormat.getNumberInstance(locale);
-                        nf.setMaximumFractionDigits(0);
-                        Number number = nf.parse(str);
-                        return TimeDuration.fromNumber(number);
-                    } catch (ParseException e) {
-                        throw new GeneralException("Could not convert " + str + " to " + type + ": ", e);
-                    }
-                }
-                return TimeDuration.parseDuration(str);
-            } else {
-                throw new GeneralException("Conversion from " + fromType + " to " + type + " not currently supported");
-            }
-        } else if (obj instanceof Double) {
-            fromType = "Double";
-            Double dbl = (Double) obj;
-
-            if ("String".equals(type) || "java.lang.String".equals(type)) {
-                NumberFormat nf = NumberFormat.getNumberInstance(locale);
-                return nf.format(dbl.doubleValue());
-            } else if ("BigDecimal".equals(type) || "java.math.BigDecimal".equals(type)) {
-                return new BigDecimal(dbl.doubleValue());
-            } else if ("Double".equals(type) || "java.lang.Double".equals(type)) {
-                return obj;
-            } else if ("Float".equals(type) || "java.lang.Float".equals(type)) {
-                return Float.valueOf(dbl.floatValue());
-            } else if ("Long".equals(type) || "java.lang.Long".equals(type)) {
-                return Long.valueOf(Math.round(dbl.doubleValue()));
-            } else if ("Integer".equals(type) || "java.lang.Integer".equals(type)) {
-                return Integer.valueOf((int) Math.round(dbl.doubleValue()));
-            } else if ("List".equals(type) || "java.util.List".equals(type)) {
-                List<Double> tempList = FastList.newInstance();
-                tempList.add(dbl);
-                return tempList;
-            } else if ("Set".equals(type) || "java.util.Set".equals(type)) {
-                Set<Double> tempSet = FastSet.newInstance();
-                tempSet.add(dbl);
-                return tempSet;
-            } else if ("TimeDuration".equals(type) || "org.ofbiz.base.util.TimeDuration".equals(type)) {
-                return TimeDuration.fromNumber(dbl);
-            } else {
-                throw new GeneralException("Conversion from " + fromType + " to " + type + " not currently supported");
-            }
-        } else if (obj instanceof Float) {
-            fromType = "Float";
-            Float flt = (Float) obj;
-
-            if ("String".equals(type)) {
-                NumberFormat nf = NumberFormat.getNumberInstance(locale);
-                return nf.format(flt.doubleValue());
-            } else if ("BigDecimal".equals(type) || "java.math.BigDecimal".equals(type)) {
-                return new BigDecimal(flt.doubleValue());
-            } else if ("Double".equals(type)) {
-                return Double.valueOf(flt.doubleValue());
-            } else if ("Float".equals(type)) {
-                return obj;
-            } else if ("Long".equals(type)) {
-                return Long.valueOf(Math.round(flt.doubleValue()));
-            } else if ("Integer".equals(type)) {
-                return Integer.valueOf((int) Math.round(flt.doubleValue()));
-            } else if ("List".equals(type) || "java.util.List".equals(type)) {
-                List<Float> tempList = FastList.newInstance();
-                tempList.add(flt);
-                return tempList;
-            } else if ("Set".equals(type) || "java.util.Set".equals(type)) {
-                Set<Float> tempSet = FastSet.newInstance();
-                tempSet.add(flt);
-                return tempSet;
-            } else if ("TimeDuration".equals(type) || "org.ofbiz.base.util.TimeDuration".equals(type)) {
-                return TimeDuration.fromNumber(flt);
-            } else {
-                throw new GeneralException("Conversion from " + fromType + " to " + type + " not currently supported");
-            }
-        } else if (obj instanceof Long) {
-            fromType = "Long";
-            Long lng = (Long) obj;
-
-            if ("String".equals(type) || "java.lang.String".equals(type)) {
-                NumberFormat nf = NumberFormat.getNumberInstance(locale);
-                return nf.format(lng.longValue());
-            } else if ("BigDecimal".equals(type) || "java.math.BigDecimal".equals(type)) {
-                return BigDecimal.valueOf(lng.longValue());
-            } else if ("Double".equals(type) || "java.lang.Double".equals(type)) {
-                return Double.valueOf(lng.doubleValue());
-            } else if ("Float".equals(type) || "java.lang.Float".equals(type)) {
-                return Float.valueOf(lng.floatValue());
-            } else if ("Long".equals(type) || "java.lang.Long".equals(type)) {
-                return obj;
-            } else if ("Integer".equals(type) || "java.lang.Integer".equals(type)) {
-                return Integer.valueOf(lng.intValue());
-            } else if ("List".equals(type) || "java.util.List".equals(type)) {
-                List<Long> tempList = FastList.newInstance();
-                tempList.add(lng);
-                return tempList;
-            } else if ("Set".equals(type) || "java.util.Set".equals(type)) {
-                Set<Long> tempSet = FastSet.newInstance();
-                tempSet.add(lng);
-                return tempSet;
-            } else if ("Date".equals(type) || "java.util.Date".equals(type)) {
-                return new Date(lng.longValue());
-            } else if ("Timestamp".equals(type) || "java.sql.Timestamp".equals(type)) {
-                return new java.sql.Timestamp(lng.longValue());
-            } else if ("TimeDuration".equals(type) || "org.ofbiz.base.util.TimeDuration".equals(type)) {
-                return TimeDuration.fromNumber(lng);
-            } else {
-                throw new GeneralException("Conversion from " + fromType + " to " + type + " not currently supported");
-            }
-        } else if (obj instanceof Integer) {
-            fromType = "Integer";
-            Integer intgr = (Integer) obj;
-            if ("String".equals(type) || "java.lang.String".equals(type)) {
-                NumberFormat nf = NumberFormat.getNumberInstance(locale);
-                return nf.format(intgr.longValue());
-            } else if ("BigDecimal".equals(type) || "java.math.BigDecimal".equals(type)) {
-                return BigDecimal.valueOf(intgr.longValue());
-            } else if ("Double".equals(type) || "java.lang.Double".equals(type)) {
-                return Double.valueOf(intgr.doubleValue());
-            } else if ("Float".equals(type) || "java.lang.Float".equals(type)) {
-                return Float.valueOf(intgr.floatValue());
-            } else if ("Long".equals(type) || "java.lang.Long".equals(type)) {
-                return Long.valueOf(intgr.longValue());
-            } else if ("Integer".equals(type) || "java.lang.Integer".equals(type)) {
-                return obj;
-            } else if ("List".equals(type) || "java.util.List".equals(type)) {
-                List<Integer> tempList = FastList.newInstance();
-                tempList.add(intgr);
-                return tempList;
-            } else if ("Set".equals(type) || "java.util.Set".equals(type)) {
-                Set<Integer> tempSet = FastSet.newInstance();
-                tempSet.add(intgr);
-                return tempSet;
-            } else if ("TimeDuration".equals(type) || "org.ofbiz.base.util.TimeDuration".equals(type)) {
-                return TimeDuration.fromNumber(intgr);
-            } else {
-                throw new GeneralException("Conversion from " + fromType + " to " + type + " not currently supported");
-            }
-        } else if (obj instanceof BigDecimal) {
-            fromType = "BigDecimal";
-            BigDecimal bigDec = (BigDecimal) obj;
-            if ("String".equals(type) || "java.lang.String".equals(type)) {
-                NumberFormat nf = NumberFormat.getNumberInstance(locale);
-                return nf.format(bigDec.doubleValue());
-            } else if ("BigDecimal".equals(type) || "java.math.BigDecimal".equals(type)) {
-                return obj;
-            } else if ("Double".equals(type) || "java.lang.Double".equals(type)) {
-                return Double.valueOf(bigDec.doubleValue());
-            } else if ("Float".equals(type) || "java.lang.Float".equals(type)) {
-                return Float.valueOf(bigDec.floatValue());
-            } else if ("Long".equals(type) || "java.lang.Long".equals(type)) {
-                return Long.valueOf(bigDec.longValue());
-            } else if ("Integer".equals(type) || "java.lang.Integer".equals(type)) {
-                return Integer.valueOf(bigDec.intValue());
-            } else if ("List".equals(type) || "java.util.List".equals(type)) {
-                List<BigDecimal> tempList = FastList.newInstance();
-                tempList.add(bigDec);
-                return tempList;
-            } else if ("Set".equals(type) || "java.util.Set".equals(type)) {
-                Set<BigDecimal> tempSet = FastSet.newInstance();
-                tempSet.add(bigDec);
-                return tempSet;
-            } else if ("TimeDuration".equals(type) || "org.ofbiz.base.util.TimeDuration".equals(type)) {
-                return TimeDuration.fromNumber(bigDec);
-            } else {
-                throw new GeneralException("Conversion from " + fromType + " to " + type + " not currently supported");
             }
-        } else if (obj instanceof java.sql.Date) {
-            fromType = "Date";
-            java.sql.Date dte = (java.sql.Date) obj;
-            if ("String".equals(type) || "java.lang.String".equals(type)) {
-                DateFormat df = null;
-                if (format == null || format.length() == 0) {
-                    df = UtilDateTime.toDateFormat(UtilDateTime.DATE_FORMAT, timeZone, locale);
-                } else {
-                    df = UtilDateTime.toDateFormat(format, timeZone, locale);
-                }
-                return df.format(new java.util.Date(dte.getTime()));
-            } else if ("Date".equals(type) || "java.sql.Date".equals(type)) {
-                return obj;
-            } else if ("Time".equals(type) || "java.sql.Time".equals(type)) {
-                throw new GeneralException("Conversion from " + fromType + " to " + type + " not currently supported");
-            } else if ("Timestamp".equals(type) || "java.sql.Timestamp".equals(type)) {
-                return new java.sql.Timestamp(dte.getTime());
-            } else if ("List".equals(type) || "java.util.List".equals(type)) {
-                List<java.sql.Date> tempList = FastList.newInstance();
-                tempList.add(dte);
-                return tempList;
-            } else if ("Set".equals(type) || "java.util.Set".equals(type)) {
-                Set<java.sql.Date> tempSet = FastSet.newInstance();
-                tempSet.add(dte);
-                return tempSet;
-            } else if ("Long".equals(type) || "java.lang.Long".equals(type)) {
-                return Long.valueOf(dte.getTime());
-            } else {
-                throw new GeneralException("Conversion from " + fromType + " to " + type + " not currently supported");
-            }
-        } else if (obj instanceof java.sql.Time) {
-            fromType = "Time";
-            java.sql.Time tme = (java.sql.Time) obj;
-
-            if ("String".equals(type) || "java.lang.String".equals(type)) {
-                DateFormat df = null;
-                if (format == null || format.length() == 0) {
-                    df = UtilDateTime.toTimeFormat(UtilDateTime.TIME_FORMAT, timeZone, locale);
-                } else {
-                    df = UtilDateTime.toTimeFormat(format, timeZone, locale);
-                }
-                return df.format(new java.util.Date(tme.getTime()));
-            } else if ("Date".equals(type) || "java.sql.Date".equals(type)) {
-                throw new GeneralException("Conversion from " + fromType + " to " + type + " not currently supported");
-            } else if ("Time".equals(type) || "java.sql.Time".equals(type)) {
-                return obj;
-            } else if ("Timestamp".equals(type) || "java.sql.Timestamp".equals(type)) {
-                return new java.sql.Timestamp(tme.getTime());
-            } else if ("List".equals(type) || "java.util.List".equals(type)) {
-                List<java.sql.Time> tempList = FastList.newInstance();
-                tempList.add(tme);
-                return tempList;
-            } else if ("Set".equals(type) || "java.util.Set".equals(type)) {
-                Set<java.sql.Time> tempSet = FastSet.newInstance();
-                tempSet.add(tme);
-                return tempSet;
-            } else {
-                throw new GeneralException("Conversion from " + fromType + " to " + type + " not currently supported");
-            }
-        } else if (obj instanceof java.sql.Timestamp) {
-            fromType = "Timestamp";
-            java.sql.Timestamp tme = (java.sql.Timestamp) obj;
-
-            if ("String".equals(type) || "java.lang.String".equals(type)) {
-                DateFormat df = null;
-                if (format == null || format.length() == 0) {
-                    df = UtilDateTime.toDateTimeFormat(UtilDateTime.DATE_TIME_FORMAT, timeZone, locale);
-                } else {
-                    df = UtilDateTime.toDateTimeFormat(format, timeZone, locale);
-                }
-                return df.format(new java.util.Date(tme.getTime()));
-            } else if ("Date".equals(type) || "java.sql.Date".equals(type)) {
-                return new java.sql.Date(tme.getTime());
-            } else if ("Time".equals(type) || "java.sql.Time".equals(type)) {
-                return new java.sql.Time(tme.getTime());
-            } else if ("Timestamp".equals(type) || "java.sql.Timestamp".equals(type)) {
-                return obj;
-            } else if ("List".equals(type) || "java.util.List".equals(type)) {
-                List<java.sql.Timestamp> tempList = FastList.newInstance();
-                tempList.add(tme);
-                return tempList;
-            } else if ("Set".equals(type) || "java.util.Set".equals(type)) {
-                Set<java.sql.Timestamp> tempSet = FastSet.newInstance();
-                tempSet.add(tme);
-                return tempSet;
-            } else if ("Long".equals(type) || "java.lang.Long".equals(type)) {
-                return Long.valueOf(tme.getTime());
-            } else {
-                throw new GeneralException("Conversion from " + fromType + " to " + type + " not currently supported");
-            }
-        } else if (obj instanceof java.lang.Boolean) {
-            fromType = "Boolean";
-            Boolean bol = (Boolean) obj;
-            if ("Boolean".equals(type) || "java.lang.Boolean".equals(type)) {
-                return bol;
-            } else if ("String".equals(type) || "java.lang.String".equals(type)) {
-                return bol.toString();
-            } else if ("Integer".equals(type) || "java.lang.Integer".equals(type)) {
-                if (bol.booleanValue()) {
-                    return Integer.valueOf(1);
-                } else {
-                    return Integer.valueOf(0);
-                }
-            } else if ("List".equals(type) || "java.util.List".equals(type)) {
-                List<Boolean> tempList = FastList.newInstance();
-                tempList.add(bol);
-                return tempList;
-            } else if ("Set".equals(type) || "java.util.Set".equals(type)) {
-                Set<Boolean> tempSet = FastSet.newInstance();
-                tempSet.add(bol);
-                return tempSet;
-            } else {
-                throw new GeneralException("Conversion from " + fromType + " to " + type + " not currently supported");
-            }
-        } else if (obj instanceof java.util.Locale) {
-            fromType = "Locale";
-            Locale loc = (Locale) obj;
-            if ("Locale".equals(type) || "java.util.Locale".equals(type)) {
-                return loc;
-            } else if ("String".equals(type) || "java.lang.String".equals(type)) {
-                return loc.toString();
-            } else {
-                throw new GeneralException("Conversion from " + fromType + " to " + type + " not currently supported");
-            }
-        } else if (obj instanceof java.util.TimeZone) {
-            fromType = "TimeZone";
-            TimeZone tz = (TimeZone) obj;
-            if ("TimeZone".equals(type) || "java.util.TimeZone".equals(type)) {
-                return tz;
-            } else if ("String".equals(type) || "java.lang.String".equals(type)) {
-                return tz.getID();
-            } else {
-                throw new GeneralException("Conversion from " + fromType + " to " + type + " not currently supported");
-            }
-        } else if (obj.getClass().getName().equals("org.ofbiz.entity.GenericValue")) {
-            fromType = "GenericValue";
-            if ("GenericValue".equals(type) || "org.ofbiz.entity.GenericValue".equals(type)) {
-                return obj;
-            } else if ("Map".equals(type) || "java.util.Map".equals(type)) {
-                return obj;
-            } else if ("String".equals(type) || "java.lang.String".equals(type)) {
-                return obj.toString();
-            } else if ("List".equals(type) || "java.util.List".equals(type)) {
-                List<Object> tempList = FastList.newInstance();
-                tempList.add(obj);
-                return tempList;
-            } else if ("Set".equals(type) || "java.util.Set".equals(type)) {
-                Set<Object> tempSet = FastSet.newInstance();
-                tempSet.add(obj);
-                return tempSet;
-            } else {
-                throw new GeneralException("Conversion from " + fromType + " to " + type + " not currently supported");
-            }
-        } else if (obj instanceof java.util.Map) {
-            fromType = "Map";
-            Map<?,?> map = (Map<?,?>) obj;
-            if ("Map".equals(type) || "java.util.Map".equals(type)) {
-                return map;
-            } else if ("String".equals(type) || "java.lang.String".equals(type)) {
-                return map.toString();
-            } else if ("List".equals(type) || "java.util.List".equals(type)) {
-                List<Map<?,?>> tempList = FastList.newInstance();
-                tempList.add(map);
-                return tempList;
-            } else if ("Set".equals(type) || "java.util.Set".equals(type)) {
-                Set<Map<?,?>> tempSet = FastSet.newInstance();
-                tempSet.add(map);
-                return tempSet;
-            } else {
-                throw new GeneralException("Conversion from " + fromType + " to " + type + " not currently supported");
-            }
-        } else if (obj instanceof java.util.List) {
-            fromType = "List";
-            List<?> list = (List<?>) obj;
-            if ("List".equals(type) || "java.util.List".equals(type)) {
-                return list;
-            } else if ("String".equals(type) || "java.lang.String".equals(type)) {
-                return list.toString();
-            } else {
-                throw new GeneralException("Conversion from " + fromType + " to " + type + " not currently supported");
-            }
-        } else if (obj instanceof java.nio.Buffer) {
-            fromType = "Buffer";
-            Buffer buffer = (Buffer) obj;
-            if ("java.nio.ByteBuffer".equals(type)) {
-                return buffer;
-            } else {
-                throw new GeneralException("Conversion from " + fromType + " to " + type + " not currently supported");
+            try {
+                return converter.convert(obj);
+            } catch (ConversionException e) {
+                Debug.logError(e, module);
             }
-        } else if (obj instanceof Node) {
+        }
+        if (obj instanceof Node) {
             Node node = (Node) obj;
             String nodeValue =  node.getTextContent();
-            if ("String".equals(type) || "java.lang.String".equals(type)) {
+            if (targetClass.equals(String.class)) {
                 return nodeValue;
             } else {
                 return simpleTypeConvert(nodeValue, type, format, timeZone, locale, noTypeFail);
             }
-        } else if (obj instanceof TimeDuration) {
-            TimeDuration duration = (TimeDuration) obj;
-            if ("String".equals(type) || "java.lang.String".equals(type)) {
-                return obj.toString();
-            }
-            long durationLong = TimeDuration.toLong(duration);
-            if ("BigDecimal".equals(type) || "java.math.BigDecimal".equals(type)) {
-                return BigDecimal.valueOf(durationLong);
-            } else if ("Double".equals(type) || "java.lang.Double".equals(type)) {
-                return Double.valueOf(durationLong);
-            } else if ("Float".equals(type) || "java.lang.Float".equals(type)) {
-                return Float.valueOf(durationLong);
-            } else if ("Long".equals(type) || "java.lang.Long".equals(type)) {
-                return Long.valueOf(durationLong);
-            } else if ("List".equals(type) || "java.util.List".equals(type)) {
-                List<TimeDuration> tempList = FastList.newInstance();
-                tempList.add(duration);
-                return tempList;
-            } else if ("Set".equals(type) || "java.util.Set".equals(type)) {
-                Set<TimeDuration> tempSet = FastSet.newInstance();
-                tempSet.add(duration);
-                return tempSet;
-            } else {
-                throw new GeneralException("Conversion from " + fromType + " to " + type + " not currently supported");
-            }
+        }
+        // we can pretty much always do a conversion to a String, so do that here
+        if (targetClass.equals(String.class)) {
+            Debug.logWarning("No special conversion available for " + obj.getClass().getName() + " to String, returning object.toString().", module);
+            return obj.toString();
+        }
+        if (noTypeFail) {
+            throw new GeneralException("Conversion from " + obj.getClass().getName() + " to " + type + " not currently supported");
         } else {
-            // we can pretty much always do a conversion to a String, so do that here
-            if ("String".equals(type) || "java.lang.String".equals(type)) {
-                Debug.logWarning("No special conversion available for " + obj.getClass().getName() + " to String, returning object.toString().", module);
-                return obj.toString();
-            }
-
-            if (noTypeFail) {
-                throw new GeneralException("Conversion from " + obj.getClass().getName() + " to " + type + " not currently supported");
-            } else {
-                if (Debug.infoOn()) Debug.logInfo("No type conversion available for " + obj.getClass().getName() + " to " + type + ", returning original object.", module);
-                return obj;
-            }
+            if (Debug.infoOn()) Debug.logInfo("No type conversion available for " + obj.getClass().getName() + " to " + targetClass.getName() + ", returning original object.", module);
+            return obj;
         }
     }