You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2012/04/21 11:24:45 UTC

svn commit: r1328621 - in /camel/branches/camel-2.8.x: ./ camel-core/src/main/java/org/apache/camel/impl/converter/ camel-core/src/main/java/org/apache/camel/support/ camel-core/src/test/java/org/apache/camel/component/bean/issues/ camel-core/src/test/...

Author: davsclaus
Date: Sat Apr 21 09:24:44 2012
New Revision: 1328621

URL: http://svn.apache.org/viewvc?rev=1328621&view=rev
Log:
CAMEL-5172: Fixed and improved TypeConverter to fail faster by throwing TypeConversionException to the caller. Use the new tryConvertTo API for the old behavior. This would also be more in line what people would expect that exceptions to be propated back as is to the caller.

Added:
    camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/support/
    camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/support/TypeConverterSupport.java   (with props)
Modified:
    camel/branches/camel-2.8.x/   (props changed)
    camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/impl/converter/ArrayTypeConverter.java
    camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/impl/converter/AsyncProcessorTypeConverter.java
    camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/impl/converter/EnumTypeConverter.java
    camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/impl/converter/FutureTypeConverter.java
    camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/impl/converter/InstanceMethodFallbackTypeConverter.java
    camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/impl/converter/InstanceMethodTypeConverter.java
    camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/impl/converter/StaticMethodFallbackTypeConverter.java
    camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/impl/converter/StaticMethodTypeConverter.java
    camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/impl/converter/ToStringTypeConverter.java
    camel/branches/camel-2.8.x/camel-core/src/test/java/org/apache/camel/component/bean/issues/MyMessageToProcessorConverter.java
    camel/branches/camel-2.8.x/camel-core/src/test/java/org/apache/camel/impl/TypeConverterRegistryMissesThenAddTest.java
    camel/branches/camel-2.8.x/camel-core/src/test/java/org/apache/camel/impl/TypeConverterRegistryTest.java
    camel/branches/camel-2.8.x/camel-core/src/test/java/org/apache/camel/processor/onexception/OnExceptionWrappedExceptionTest.java

Propchange: camel/branches/camel-2.8.x/
------------------------------------------------------------------------------
  Merged /camel/trunk:r1326487
  Merged /camel/branches/camel-2.9.x:r1327578

Propchange: camel/branches/camel-2.8.x/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.

Modified: camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/impl/converter/ArrayTypeConverter.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/impl/converter/ArrayTypeConverter.java?rev=1328621&r1=1328620&r2=1328621&view=diff
==============================================================================
--- camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/impl/converter/ArrayTypeConverter.java (original)
+++ camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/impl/converter/ArrayTypeConverter.java Sat Apr 21 09:24:44 2012
@@ -23,7 +23,7 @@ import java.util.Collection;
 import java.util.List;
 
 import org.apache.camel.Exchange;
-import org.apache.camel.TypeConverter;
+import org.apache.camel.support.TypeConverterSupport;
 
 /**
  * A type converter which is used to convert to and from array types
@@ -32,10 +32,10 @@ import org.apache.camel.TypeConverter;
  *
  * @version 
  */
-public class ArrayTypeConverter implements TypeConverter {
+public class ArrayTypeConverter extends TypeConverterSupport {
 
     @SuppressWarnings("unchecked")
-    public <T> T convertTo(Class<T> type, Object value) {
+    public <T> T convertTo(Class<T> type, Exchange exchange, Object value) {
         if (type.isArray()) {
             if (value instanceof Collection) {
                 Collection<?> collection = (Collection<?>)value;
@@ -74,36 +74,4 @@ public class ArrayTypeConverter implemen
         return null;
     }
 
-    @Override
-    public <T> T convertTo(Class<T> type, Exchange exchange, Object value) {
-        return convertTo(type, value);
-    }
-
-    @Override
-    public <T> T mandatoryConvertTo(Class<T> type, Object value) {
-        return convertTo(type, value);
-    }
-
-    @Override
-    public <T> T mandatoryConvertTo(Class<T> type, Exchange exchange, Object value) {
-        return convertTo(type, value);
-    }
-
-    @Override
-    public <T> T tryConvertTo(Class<T> type, Exchange exchange, Object value) {
-        try {
-            return convertTo(type, value);
-        } catch (Exception e) {
-            return null;
-        }
-    }
-
-    @Override
-    public <T> T tryConvertTo(Class<T> type, Object value) {
-        try {
-            return convertTo(type, value);
-        } catch (Exception e) {
-            return null;
-        }
-    }
 }

Modified: camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/impl/converter/AsyncProcessorTypeConverter.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/impl/converter/AsyncProcessorTypeConverter.java?rev=1328621&r1=1328620&r2=1328621&view=diff
==============================================================================
--- camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/impl/converter/AsyncProcessorTypeConverter.java (original)
+++ camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/impl/converter/AsyncProcessorTypeConverter.java Sat Apr 21 09:24:44 2012
@@ -19,9 +19,8 @@ package org.apache.camel.impl.converter;
 import org.apache.camel.AsyncCallback;
 import org.apache.camel.AsyncProcessor;
 import org.apache.camel.Exchange;
-import org.apache.camel.NoTypeConversionAvailableException;
 import org.apache.camel.Processor;
-import org.apache.camel.TypeConverter;
+import org.apache.camel.support.TypeConverterSupport;
 import org.apache.camel.processor.DelegateProcessor;
 
 /**
@@ -31,7 +30,7 @@ import org.apache.camel.processor.Delega
  *
  * @version 
  */
-public class AsyncProcessorTypeConverter implements TypeConverter {
+public class AsyncProcessorTypeConverter extends TypeConverterSupport {
 
     private static final class ProcessorToAsyncProcessorBridge extends DelegateProcessor implements AsyncProcessor {
 
@@ -67,7 +66,7 @@ public class AsyncProcessorTypeConverter
         }
     }
 
-    public <T> T convertTo(Class<T> type, Object value) {
+    public <T> T convertTo(Class<T> type, Exchange exchange, Object value) {
         if (value != null) {
             if (type.equals(AsyncProcessor.class)) {
                 if (value instanceof AsyncProcessor) {
@@ -82,39 +81,6 @@ public class AsyncProcessorTypeConverter
         return null;
     }
 
-    @Override
-    public <T> T convertTo(Class<T> type, Exchange exchange, Object value) {
-        return convertTo(type, value);
-    }
-
-    @Override
-    public <T> T mandatoryConvertTo(Class<T> type, Object value) throws NoTypeConversionAvailableException {
-        return convertTo(type, value);
-    }
-
-    @Override
-    public <T> T mandatoryConvertTo(Class<T> type, Exchange exchange, Object value) throws NoTypeConversionAvailableException {
-        return convertTo(type, exchange, value);
-    }
-
-    @Override
-    public <T> T tryConvertTo(Class<T> type, Exchange exchange, Object value) {
-        try {
-            return convertTo(type, exchange, value);
-        } catch (Exception e) {
-            return null;
-        }
-    }
-
-    @Override
-    public <T> T tryConvertTo(Class<T> type, Object value) {
-        try {
-            return convertTo(type, null, value);
-        } catch (Exception e) {
-            return null;
-        }
-    }
-
     public static AsyncProcessor convert(Processor value) {
         if (value instanceof AsyncProcessor) {
             return (AsyncProcessor)value;

Modified: camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/impl/converter/EnumTypeConverter.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/impl/converter/EnumTypeConverter.java?rev=1328621&r1=1328620&r2=1328621&view=diff
==============================================================================
--- camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/impl/converter/EnumTypeConverter.java (original)
+++ camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/impl/converter/EnumTypeConverter.java Sat Apr 21 09:24:44 2012
@@ -20,7 +20,7 @@ import java.lang.reflect.Method;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.RuntimeCamelException;
-import org.apache.camel.TypeConverter;
+import org.apache.camel.support.TypeConverterSupport;
 import org.apache.camel.util.ObjectHelper;
 
 /**
@@ -30,10 +30,10 @@ import org.apache.camel.util.ObjectHelpe
  *
  * @version 
  */
-public class EnumTypeConverter implements TypeConverter {
+public class EnumTypeConverter extends TypeConverterSupport {
 
     @SuppressWarnings("unchecked")
-    public <T> T convertTo(Class<T> type, Object value) {
+    public <T> T convertTo(Class<T> type, Exchange exchange, Object value) {
         if (type.isEnum() && value != null) {
             String text = value.toString();
             Method method;
@@ -47,40 +47,4 @@ public class EnumTypeConverter implement
         return null;
     }
 
-    @Override
-    public <T> T convertTo(Class<T> type, Exchange exchange, Object value) {
-        // ignore exchange
-        return convertTo(type, value);
-    }
-
-    @Override
-    public <T> T mandatoryConvertTo(Class<T> type, Object value) {
-        // ignore exchange
-        return convertTo(type, value);
-    }
-
-    @Override
-    public <T> T mandatoryConvertTo(Class<T> type, Exchange exchange, Object value) {
-        // ignore exchange
-        return convertTo(type, value);
-    }
-
-    @Override
-    public <T> T tryConvertTo(Class<T> type, Exchange exchange, Object value) {
-        try {
-            return convertTo(type, value);
-        } catch (Exception e) {
-            return null;
-        }
-    }
-
-    @Override
-    public <T> T tryConvertTo(Class<T> type, Object value) {
-        try {
-            // ignore exchange
-            return convertTo(type, value);
-        } catch (Exception e) {
-            return null;
-        }
-    }
 }
\ No newline at end of file

Modified: camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/impl/converter/FutureTypeConverter.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/impl/converter/FutureTypeConverter.java?rev=1328621&r1=1328620&r2=1328621&view=diff
==============================================================================
--- camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/impl/converter/FutureTypeConverter.java (original)
+++ camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/impl/converter/FutureTypeConverter.java Sat Apr 21 09:24:44 2012
@@ -20,11 +20,11 @@ import java.util.concurrent.Future;
 
 import org.apache.camel.Converter;
 import org.apache.camel.Exchange;
-import org.apache.camel.NoTypeConversionAvailableException;
 import org.apache.camel.StreamCache;
+import org.apache.camel.TypeConversionException;
 import org.apache.camel.TypeConverter;
+import org.apache.camel.support.TypeConverterSupport;
 import org.apache.camel.util.ExchangeHelper;
-import org.apache.camel.util.ObjectHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -34,7 +34,7 @@ import org.slf4j.LoggerFactory;
  * @version 
  */
 @Converter
-public final class FutureTypeConverter implements TypeConverter {
+public final class FutureTypeConverter extends TypeConverterSupport {
 
     private static final Logger LOG = LoggerFactory.getLogger(FutureTypeConverter.class);
 
@@ -44,6 +44,15 @@ public final class FutureTypeConverter i
         this.converter = converter;
     }
 
+    @Override
+    public <T> T convertTo(Class<T> type, Exchange exchange, Object value) {
+        try {
+            return doConvertTo(type, exchange, value);
+        } catch (Exception e) {
+            throw new TypeConversionException(value, type, e);
+        }
+    }
+
     @SuppressWarnings("unchecked")
     private <T> T doConvertTo(Class<T> type, Exchange exchange, Object value) throws Exception {
         // do not convert to stream cache
@@ -86,56 +95,4 @@ public final class FutureTypeConverter i
         return null;
     }
 
-    @Override
-    public <T> T convertTo(Class<T> type, Object value) {
-        return convertTo(type, null, value);
-    }
-
-    @Override
-    public <T> T convertTo(Class<T> type, Exchange exchange, Object value) {
-        try {
-            return doConvertTo(type, exchange, value);
-        } catch (Exception e) {
-            throw ObjectHelper.wrapRuntimeCamelException(e);
-        }
-    }
-
-    @Override
-    public <T> T mandatoryConvertTo(Class<T> type, Object value) throws NoTypeConversionAvailableException {
-        return mandatoryConvertTo(type, null, value);
-    }
-
-    @Override
-    public <T> T mandatoryConvertTo(Class<T> type, Exchange exchange, Object value) throws NoTypeConversionAvailableException {
-        T answer;
-        try {
-            answer = doConvertTo(type, exchange, value);
-        } catch (Exception e) {
-            throw new NoTypeConversionAvailableException(value, type, e);
-        }
-
-        if (answer == null) {
-            throw new NoTypeConversionAvailableException(value, type);
-        }
-
-        return answer;
-    }
-
-    @Override
-    public <T> T tryConvertTo(Class<T> type, Exchange exchange, Object value) {
-        try {
-            return convertTo(type, exchange, value);
-        } catch (Exception e) {
-            return null;
-        }
-    }
-
-    @Override
-    public <T> T tryConvertTo(Class<T> type, Object value) {
-        try {
-            return convertTo(type, null, value);
-        } catch (Exception e) {
-            return null;
-        }
-    }
 }

Modified: camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/impl/converter/InstanceMethodFallbackTypeConverter.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/impl/converter/InstanceMethodFallbackTypeConverter.java?rev=1328621&r1=1328620&r2=1328621&view=diff
==============================================================================
--- camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/impl/converter/InstanceMethodFallbackTypeConverter.java (original)
+++ camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/impl/converter/InstanceMethodFallbackTypeConverter.java Sat Apr 21 09:24:44 2012
@@ -20,8 +20,8 @@ import java.lang.reflect.Method;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.RuntimeCamelException;
-import org.apache.camel.TypeConverter;
 import org.apache.camel.spi.TypeConverterRegistry;
+import org.apache.camel.support.TypeConverterSupport;
 import org.apache.camel.util.ObjectHelper;
 
 /**
@@ -30,7 +30,7 @@ import org.apache.camel.util.ObjectHelpe
  *
  * @version 
  */
-public class InstanceMethodFallbackTypeConverter implements TypeConverter {
+public class InstanceMethodFallbackTypeConverter extends TypeConverterSupport {
     private final CachingInjector<?> injector;
     private final Method method;
     private final boolean useExchange;
@@ -48,11 +48,6 @@ public class InstanceMethodFallbackTypeC
         return "InstanceMethodFallbackTypeConverter: " + method;
     }
 
-    @Override
-    public <T> T convertTo(Class<T> type, Object value) {
-        return convertTo(type, null, value);
-    }
-
     @SuppressWarnings("unchecked")
     public <T> T convertTo(Class<T> type, Exchange exchange, Object value) {
         Object instance = injector.newInstance();
@@ -64,32 +59,4 @@ public class InstanceMethodFallbackTypeC
                 .invokeMethod(method, instance, type, value, registry);
     }
 
-    @Override
-    public <T> T mandatoryConvertTo(Class<T> type, Object value) {
-        return convertTo(type, null, value);
-    }
-
-    @Override
-    public <T> T mandatoryConvertTo(Class<T> type, Exchange exchange, Object value) {
-        return convertTo(type, exchange, value);
-    }
-
-    @Override
-    public <T> T tryConvertTo(Class<T> type, Object value) {
-        try {
-            return convertTo(type, null, value);
-        } catch (Exception e) {
-            return null;
-        }
-    }
-
-    @Override
-    public <T> T tryConvertTo(Class<T> type, Exchange exchange, Object value) {
-        try {
-            return convertTo(type, exchange, value);
-        } catch (Exception e) {
-            return null;
-        }
-    }
-
 }
\ No newline at end of file

Modified: camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/impl/converter/InstanceMethodTypeConverter.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/impl/converter/InstanceMethodTypeConverter.java?rev=1328621&r1=1328620&r2=1328621&view=diff
==============================================================================
--- camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/impl/converter/InstanceMethodTypeConverter.java (original)
+++ camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/impl/converter/InstanceMethodTypeConverter.java Sat Apr 21 09:24:44 2012
@@ -23,6 +23,7 @@ import org.apache.camel.RuntimeCamelExce
 import org.apache.camel.TypeConverter;
 import org.apache.camel.spi.TypeConverterAware;
 import org.apache.camel.spi.TypeConverterRegistry;
+import org.apache.camel.support.TypeConverterSupport;
 import org.apache.camel.util.ObjectHelper;
 
 /**
@@ -31,7 +32,7 @@ import org.apache.camel.util.ObjectHelpe
  *
  * @version 
  */
-public class InstanceMethodTypeConverter implements TypeConverter {
+public class InstanceMethodTypeConverter extends TypeConverterSupport {
     private final CachingInjector<?> injector;
     private final Method method;
     private final boolean useExchange;
@@ -49,11 +50,6 @@ public class InstanceMethodTypeConverter
         return "InstanceMethodTypeConverter: " + method;
     }
 
-    @Override
-    public <T> T convertTo(Class<T> type, Object value) {
-        return convertTo(type, null, value);
-    }
-
     @SuppressWarnings("unchecked")
     public <T> T convertTo(Class<T> type, Exchange exchange, Object value) {
         Object instance = injector.newInstance();
@@ -72,31 +68,4 @@ public class InstanceMethodTypeConverter
                 .invokeMethod(method, instance, value);
     }
 
-    @Override
-    public <T> T mandatoryConvertTo(Class<T> type, Object value) {
-        return convertTo(type, null, value);
-    }
-
-    @Override   
-    public <T> T mandatoryConvertTo(Class<T> type, Exchange exchange, Object value) {
-        return convertTo(type, exchange, value);
-    }
-
-    @Override
-    public <T> T tryConvertTo(Class<T> type, Exchange exchange, Object value) {
-        try {
-            return convertTo(type, exchange, value);
-        } catch (Exception e) {
-            return null;
-        }
-    }
-
-    @Override
-    public <T> T tryConvertTo(Class<T> type, Object value) {
-        try {
-            return convertTo(type, null, value);
-        } catch (Exception e) {
-            return null;
-        }
-    }
 }

Modified: camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/impl/converter/StaticMethodFallbackTypeConverter.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/impl/converter/StaticMethodFallbackTypeConverter.java?rev=1328621&r1=1328620&r2=1328621&view=diff
==============================================================================
--- camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/impl/converter/StaticMethodFallbackTypeConverter.java (original)
+++ camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/impl/converter/StaticMethodFallbackTypeConverter.java Sat Apr 21 09:24:44 2012
@@ -19,8 +19,8 @@ package org.apache.camel.impl.converter;
 import java.lang.reflect.Method;
 
 import org.apache.camel.Exchange;
-import org.apache.camel.TypeConverter;
 import org.apache.camel.spi.TypeConverterRegistry;
+import org.apache.camel.support.TypeConverterSupport;
 import org.apache.camel.util.ObjectHelper;
 
 /**
@@ -29,7 +29,7 @@ import org.apache.camel.util.ObjectHelpe
  *
  * @version 
  */
-public class StaticMethodFallbackTypeConverter implements TypeConverter {
+public class StaticMethodFallbackTypeConverter extends TypeConverterSupport {
     private final Method method;
     private final boolean useExchange;
     private final TypeConverterRegistry registry;
@@ -45,42 +45,10 @@ public class StaticMethodFallbackTypeCon
         return "StaticMethodFallbackTypeConverter: " + method;
     }
 
-    @Override
-    public <T> T convertTo(Class<T> type, Object value) {
-        return convertTo(type, null, value);
-    }
-
     @SuppressWarnings("unchecked")
     public <T> T convertTo(Class<T> type, Exchange exchange, Object value) {
         return useExchange ? (T)ObjectHelper.invokeMethod(method, null, type, exchange, value, registry)
             : (T)ObjectHelper.invokeMethod(method, null, type, value, registry);
     }
 
-    @Override
-    public <T> T mandatoryConvertTo(Class<T> type, Object value) {
-        return convertTo(type, null, value);
-    }
-
-    @Override
-    public <T> T mandatoryConvertTo(Class<T> type, Exchange exchange, Object value) {
-        return convertTo(type, exchange, value);
-    }
-
-    @Override
-    public <T> T tryConvertTo(Class<T> type, Exchange exchange, Object value) {
-        try {
-            return convertTo(type, exchange, value);
-        } catch (Exception e) {
-            return null;
-        }
-    }
-
-    @Override
-    public <T> T tryConvertTo(Class<T> type, Object value) {
-        try {
-            return convertTo(type, null, value);
-        } catch (Exception e) {
-            return null;
-        }
-    }
 }
\ No newline at end of file

Modified: camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/impl/converter/StaticMethodTypeConverter.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/impl/converter/StaticMethodTypeConverter.java?rev=1328621&r1=1328620&r2=1328621&view=diff
==============================================================================
--- camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/impl/converter/StaticMethodTypeConverter.java (original)
+++ camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/impl/converter/StaticMethodTypeConverter.java Sat Apr 21 09:24:44 2012
@@ -20,6 +20,7 @@ import java.lang.reflect.Method;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.TypeConverter;
+import org.apache.camel.support.TypeConverterSupport;
 import org.apache.camel.util.ObjectHelper;
 
 /**
@@ -27,7 +28,7 @@ import org.apache.camel.util.ObjectHelpe
  *
  * @version 
  */
-public class StaticMethodTypeConverter implements TypeConverter {
+public class StaticMethodTypeConverter extends TypeConverterSupport {
     private final Method method;
     private final boolean useExchange;
 
@@ -41,42 +42,10 @@ public class StaticMethodTypeConverter i
         return "StaticMethodTypeConverter: " + method;
     }
 
-    @Override
-    public <T> T convertTo(Class<T> type, Object value) {
-        return convertTo(type, null, value);
-    }
-
     @SuppressWarnings("unchecked")
     public <T> T convertTo(Class<T> type, Exchange exchange, Object value) {
         return useExchange ? (T)ObjectHelper.invokeMethod(method, null, value, exchange)
             : (T)ObjectHelper.invokeMethod(method, null, value);
     }
 
-    @Override
-    public <T> T mandatoryConvertTo(Class<T> type, Object value) {
-        return convertTo(type, null, value);
-    }
-
-    @Override
-    public <T> T mandatoryConvertTo(Class<T> type, Exchange exchange, Object value) {
-        return convertTo(type, exchange, value);
-    }
-
-    @Override
-    public <T> T tryConvertTo(Class<T> type, Exchange exchange, Object value) {
-        try {
-            return convertTo(type, exchange, value);
-        } catch (Exception e) {
-            return null;
-        }
-    }
-
-    @Override
-    public <T> T tryConvertTo(Class<T> type, Object value) {
-        try {
-            return convertTo(type, null, value);
-        } catch (Exception e) {
-            return null;
-        }
-    }
 }

Modified: camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/impl/converter/ToStringTypeConverter.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/impl/converter/ToStringTypeConverter.java?rev=1328621&r1=1328620&r2=1328621&view=diff
==============================================================================
--- camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/impl/converter/ToStringTypeConverter.java (original)
+++ camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/impl/converter/ToStringTypeConverter.java Sat Apr 21 09:24:44 2012
@@ -20,9 +20,9 @@ import java.util.concurrent.Future;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
-import org.apache.camel.TypeConverter;
 import org.apache.camel.component.bean.BeanInvocation;
 import org.apache.camel.component.file.GenericFile;
+import org.apache.camel.support.TypeConverterSupport;
 
 /**
  * A simple converter that can convert any object to a String type by using the
@@ -30,11 +30,11 @@ import org.apache.camel.component.file.G
  *
  * @version 
  */
-public class ToStringTypeConverter implements TypeConverter {
+public class ToStringTypeConverter extends TypeConverterSupport {
 
     @SuppressWarnings("unchecked")
     @Override
-    public <T> T convertTo(Class<T> toType, Object value) {
+    public <T> T convertTo(Class<T> toType, Exchange exchange, Object value) {
         if (value != null) {
 
             // should not try to convert Message
@@ -64,36 +64,4 @@ public class ToStringTypeConverter imple
         return null;
     }
 
-    @Override
-    public <T> T convertTo(Class<T> type, Exchange exchange, Object value) {
-        return convertTo(type, value);
-    }
-
-    @Override
-    public <T> T mandatoryConvertTo(Class<T> type, Object value) {
-        return convertTo(type, value);
-    }
-
-    @Override
-    public <T> T mandatoryConvertTo(Class<T> type, Exchange exchange, Object value) {
-        return convertTo(type, value);
-    }
-
-    @Override
-    public <T> T tryConvertTo(Class<T> type, Exchange exchange, Object value) {
-        try {
-            return convertTo(type, value);
-        } catch (Exception e) {
-            return null;
-        }
-    }
-
-    @Override
-    public <T> T tryConvertTo(Class<T> type, Object value) {
-        try {
-            return convertTo(type, value);
-        } catch (Exception e) {
-            return null;
-        }
-    }
 }

Added: camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/support/TypeConverterSupport.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/support/TypeConverterSupport.java?rev=1328621&view=auto
==============================================================================
--- camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/support/TypeConverterSupport.java (added)
+++ camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/support/TypeConverterSupport.java Sat Apr 21 09:24:44 2012
@@ -0,0 +1,76 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.support;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.NoTypeConversionAvailableException;
+import org.apache.camel.TypeConversionException;
+import org.apache.camel.TypeConverter;
+
+/**
+ * Base class for {@link TypeConverter} implementations.
+ * <p/>
+ * Implementators need only to implement the {@link TypeConverter#convertTo(Class, org.apache.camel.Exchange, Object)}
+ * method, and can rely on the default implementations of the other methods from this support class.
+ */
+public abstract class TypeConverterSupport implements TypeConverter {
+
+    @Override
+    public <T> T convertTo(Class<T> type, Object value) throws TypeConversionException {
+        return convertTo(type, null, value);
+    }
+
+    @Override
+    public <T> T mandatoryConvertTo(Class<T> type, Object value) throws TypeConversionException, NoTypeConversionAvailableException {
+        T t = convertTo(type, null, value);
+        if (t == null) {
+            throw new NoTypeConversionAvailableException(value, type);
+        } else {
+            return t;
+        }
+    }
+
+    @Override
+    public <T> T mandatoryConvertTo(Class<T> type, Exchange exchange, Object value) throws TypeConversionException, NoTypeConversionAvailableException {
+        T t = convertTo(type, exchange, value);
+        if (t == null) {
+            throw new NoTypeConversionAvailableException(value, type);
+        } else {
+            return t;
+        }
+    }
+
+    @Override
+    public <T> T tryConvertTo(Class<T> type, Object value) {
+        try {
+            return convertTo(type, null, value);
+        } catch (Exception e) {
+            // ignore
+        }
+        return null;
+    }
+
+    @Override
+    public <T> T tryConvertTo(Class<T> type, Exchange exchange, Object value) {
+        try {
+            return convertTo(type, exchange, value);
+        } catch (Exception e) {
+            // ignore
+        }
+        return null;
+    }
+}

Propchange: camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/support/TypeConverterSupport.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/support/TypeConverterSupport.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: camel/branches/camel-2.8.x/camel-core/src/test/java/org/apache/camel/component/bean/issues/MyMessageToProcessorConverter.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.8.x/camel-core/src/test/java/org/apache/camel/component/bean/issues/MyMessageToProcessorConverter.java?rev=1328621&r1=1328620&r2=1328621&view=diff
==============================================================================
--- camel/branches/camel-2.8.x/camel-core/src/test/java/org/apache/camel/component/bean/issues/MyMessageToProcessorConverter.java (original)
+++ camel/branches/camel-2.8.x/camel-core/src/test/java/org/apache/camel/component/bean/issues/MyMessageToProcessorConverter.java Sat Apr 21 09:24:44 2012
@@ -17,17 +17,16 @@
 package org.apache.camel.component.bean.issues;
 
 import org.apache.camel.Exchange;
-import org.apache.camel.NoTypeConversionAvailableException;
 import org.apache.camel.Processor;
-import org.apache.camel.TypeConverter;
+import org.apache.camel.support.TypeConverterSupport;
 
 /**
  * @version 
  */
-public class MyMessageToProcessorConverter implements TypeConverter {
+public class MyMessageToProcessorConverter extends TypeConverterSupport {
 
     @SuppressWarnings("unchecked")
-    public <T> T convertTo(Class<T> type, Object value) {
+    public <T> T convertTo(Class<T> type, Exchange exchange, Object value) {
         return (T) new Processor() {
             public void process(Exchange exchange) throws Exception {
                 exchange.getIn().setBody("Bye World");
@@ -35,24 +34,4 @@ public class MyMessageToProcessorConvert
         };
     }
 
-    public <T> T convertTo(Class<T> type, Exchange exchange, Object value) {
-        return convertTo(type, value);
-    }
-
-    public <T> T mandatoryConvertTo(Class<T> type, Object value) throws NoTypeConversionAvailableException {
-        return convertTo(type, value);
-    }
-
-    public <T> T mandatoryConvertTo(Class<T> type, Exchange exchange, Object value) throws NoTypeConversionAvailableException {
-        return convertTo(type, value);
-    }
-
-    public <T> T tryConvertTo(Class<T> type, Object value) {
-        return convertTo(type, value);
-    }
-
-    public <T> T tryConvertTo(Class<T> type, Exchange exchange, Object value) {
-        return convertTo(type, value);
-    }
-
 }

Modified: camel/branches/camel-2.8.x/camel-core/src/test/java/org/apache/camel/impl/TypeConverterRegistryMissesThenAddTest.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.8.x/camel-core/src/test/java/org/apache/camel/impl/TypeConverterRegistryMissesThenAddTest.java?rev=1328621&r1=1328620&r2=1328621&view=diff
==============================================================================
--- camel/branches/camel-2.8.x/camel-core/src/test/java/org/apache/camel/impl/TypeConverterRegistryMissesThenAddTest.java (original)
+++ camel/branches/camel-2.8.x/camel-core/src/test/java/org/apache/camel/impl/TypeConverterRegistryMissesThenAddTest.java Sat Apr 21 09:24:44 2012
@@ -18,7 +18,7 @@ package org.apache.camel.impl;
 
 import junit.framework.TestCase;
 import org.apache.camel.Exchange;
-import org.apache.camel.TypeConverter;
+import org.apache.camel.support.TypeConverterSupport;
 
 /**
  * @version 
@@ -40,7 +40,7 @@ public class TypeConverterRegistryMisses
         assertEquals(123, order.getId());
     }
 
-    private class MyOrder {
+    private static class MyOrder {
         private int id;
 
         public int getId() {
@@ -52,38 +52,16 @@ public class TypeConverterRegistryMisses
         }
     }
 
-    private class MyOrderTypeConverter implements TypeConverter {
+    private static class MyOrderTypeConverter extends TypeConverterSupport {
 
         @SuppressWarnings("unchecked")
-        public <T> T convertTo(Class<T> type, Object value) {
+        public <T> T convertTo(Class<T> type, Exchange exchange, Object value) {
             // converter from value to the MyOrder bean
             MyOrder order = new MyOrder();
             order.setId(Integer.parseInt(value.toString()));
             return (T) order;
         }
 
-        public <T> T convertTo(Class<T> type, Exchange exchange, Object value) {
-            // this method with the Exchange parameter will be preferred by Camel to invoke
-            // this allows you to fetch information from the exchange during conversions
-            // such as an encoding parameter or the likes
-            return convertTo(type, value);
-        }
-
-        public <T> T mandatoryConvertTo(Class<T> type, Object value) {
-            return convertTo(type, value);
-        }
-
-        public <T> T mandatoryConvertTo(Class<T> type, Exchange exchange, Object value) {
-            return convertTo(type, value);
-        }
-
-        public <T> T tryConvertTo(Class<T> type, Exchange exchange, Object value) {
-            return convertTo(type, value);
-        }
-
-        public <T> T tryConvertTo(Class<T> type, Object value) {
-            return convertTo(type, value);
-        }
     }
 
 }

Modified: camel/branches/camel-2.8.x/camel-core/src/test/java/org/apache/camel/impl/TypeConverterRegistryTest.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.8.x/camel-core/src/test/java/org/apache/camel/impl/TypeConverterRegistryTest.java?rev=1328621&r1=1328620&r2=1328621&view=diff
==============================================================================
--- camel/branches/camel-2.8.x/camel-core/src/test/java/org/apache/camel/impl/TypeConverterRegistryTest.java (original)
+++ camel/branches/camel-2.8.x/camel-core/src/test/java/org/apache/camel/impl/TypeConverterRegistryTest.java Sat Apr 21 09:24:44 2012
@@ -22,6 +22,7 @@ import java.io.InputStream;
 import junit.framework.TestCase;
 import org.apache.camel.Exchange;
 import org.apache.camel.TypeConverter;
+import org.apache.camel.support.TypeConverterSupport;
 
 /**
  * @version 
@@ -32,7 +33,7 @@ public class TypeConverterRegistryTest e
         DefaultCamelContext ctx = new DefaultCamelContext();
         assertNotNull(ctx.getTypeConverterRegistry());
 
-        // file to inputstream is a default converter in Camel 
+        // file to input stream is a default converter in Camel
         TypeConverter tc = ctx.getTypeConverterRegistry().lookup(InputStream.class, File.class);
         assertNotNull(tc);
     }
@@ -53,7 +54,7 @@ public class TypeConverterRegistryTest e
         assertEquals(123, order.getId());
     }
 
-    private class MyOrder {
+    private static class MyOrder {
         private int id;
 
         public int getId() {
@@ -66,46 +67,15 @@ public class TypeConverterRegistryTest e
     }
 
     // START SNIPPET: e2
-    private class MyOrderTypeConverter implements TypeConverter {
+    private static class MyOrderTypeConverter extends TypeConverterSupport {
 
         @SuppressWarnings("unchecked")
-        public <T> T convertTo(Class<T> type, Object value) {
+        public <T> T convertTo(Class<T> type, Exchange exchange, Object value) {
             // converter from value to the MyOrder bean
             MyOrder order = new MyOrder();
             order.setId(Integer.parseInt(value.toString()));
             return (T) order;
         }
-
-        public <T> T convertTo(Class<T> type, Exchange exchange, Object value) {
-            // this method with the Exchange parameter will be preferred by Camel to invoke
-            // this allows you to fetch information from the exchange during conversions
-            // such as an encoding parameter or the likes
-            return convertTo(type, value);
-        }
-
-        public <T> T mandatoryConvertTo(Class<T> type, Object value) {
-            return convertTo(type, value);
-        }
-
-        public <T> T mandatoryConvertTo(Class<T> type, Exchange exchange, Object value) {
-            return convertTo(type, value);
-        }
-
-        public <T> T tryConvertTo(Class<T> type, Object value) {
-            try {
-                return convertTo(type, null, value);
-            } catch (Exception e) {
-                return null;
-            }
-        }
-
-        public <T> T tryConvertTo(Class<T> type, Exchange exchange, Object value) {
-            try {
-                return convertTo(type, exchange, value);
-            } catch (Exception e) {
-                return null;
-            }
-        }
     }
     // END SNIPPET: e2
 

Modified: camel/branches/camel-2.8.x/camel-core/src/test/java/org/apache/camel/processor/onexception/OnExceptionWrappedExceptionTest.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.8.x/camel-core/src/test/java/org/apache/camel/processor/onexception/OnExceptionWrappedExceptionTest.java?rev=1328621&r1=1328620&r2=1328621&view=diff
==============================================================================
--- camel/branches/camel-2.8.x/camel-core/src/test/java/org/apache/camel/processor/onexception/OnExceptionWrappedExceptionTest.java (original)
+++ camel/branches/camel-2.8.x/camel-core/src/test/java/org/apache/camel/processor/onexception/OnExceptionWrappedExceptionTest.java Sat Apr 21 09:24:44 2012
@@ -18,8 +18,9 @@ package org.apache.camel.processor.onexc
 
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.Exchange;
-import org.apache.camel.TypeConverter;
 import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.support.TypeConverterSupport;
+
 import static org.apache.camel.util.ObjectHelper.wrapRuntimeCamelException;
 
 /**
@@ -56,32 +57,13 @@ public class OnExceptionWrappedException
     public static class LocalDateTime {
     }
 
-    private class MyLocalDateTimeConverter implements TypeConverter {
+    private static class MyLocalDateTimeConverter extends TypeConverterSupport {
 
-        public <T> T convertTo(Class<T> type, Object value) {
+        public <T> T convertTo(Class<T> type, Exchange exchange, Object value) {
             // simulate @Converter where we wrap thrown exception in RuntimeCamelException
             throw wrapRuntimeCamelException(new IllegalArgumentException("Bad Data"));
         }
 
-        public <T> T convertTo(Class<T> type, Exchange exchange, Object value) {
-            return convertTo(type, value);
-        }
-
-        public <T> T mandatoryConvertTo(Class<T> type, Object value) {
-            return convertTo(type, value);
-        }
-
-        public <T> T mandatoryConvertTo(Class<T> type, Exchange exchange, Object value) {
-            return convertTo(type, value);
-        }
-
-        public <T> T tryConvertTo(Class<T> type, Object value) {
-            return convertTo(type, value);
-        }
-
-        public <T> T tryConvertTo(Class<T> type, Exchange exchange, Object value) {
-            return convertTo(type, value);
-        }
     }
 
 }
\ No newline at end of file