Agreed - would have thought something like using
Class.isAssignableFrom() (which I always tend to get the wrong way
around first time I use it :)
2008/8/21 Claus Ibsen <[EMAIL PROTECTED]>:
> Hi
>
> Hadrian. Nice patch, lovely that we got a type convert with the Exchange now.
>
> I looked at the patch as I was wondering how you had implemented this and how
> to use it as its something I need also - especially for encoding.
>
> However I was wondering if the == Exchange.class is in order? We wont get in
> trouble if it's a FileExchange or something?
>
>
> + protected boolean isValidConverterMethod(Method method) {
> + Class<?>[] parameterTypes = method.getParameterTypes();
> + return (parameterTypes != null) &&
> + (parameterTypes.length == 1 || (parameterTypes.length == 2 &&
> parameterTypes[1] == Exchange.class));
> + }
>
> Med venlig hilsen
>
> Claus Ibsen
> ......................................
> Silverbullet
> Skovsgårdsvænget 21
> 8362 Hørning
> Tlf. +45 2962 7576
> Web: www.silverbullet.dk
>
> -----Original Message-----
> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
> Sent: 21. august 2008 02:13
> To: [EMAIL PROTECTED]
> Subject: svn commit: r687515 - in /activemq/camel/trunk:
> camel-core/src/main/java/org/apache/camel/
> camel-core/src/main/java/org/apache/camel/builder/
> camel-core/src/main/java/org/apache/camel/impl/
> camel-core/src/main/java/org/apache/camel/impl/converter/ came...
>
> Author: hadrian
> Date: Wed Aug 20 17:13:01 2008
> New Revision: 687515
>
> URL: http://svn.apache.org/viewvc?rev=687515&view=rev
> Log:
> CAMEL-115.
>
> Added:
>
> activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/converter/InstanceMethodWithExchangeTestConverter.java
>
> activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/converter/MyBean.java
>
> activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/converter/StaticMethodWithExchangeTestConverter.java
> Modified:
>
> activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/TypeConverter.java
>
> activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java
>
> activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultExchange.java
>
> activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultMessage.java
>
> activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/MessageSupport.java
>
> activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/AnnotationTypeConverterLoader.java
>
> activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/ArrayTypeConverter.java
>
> activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/AsyncProcessorTypeConverter.java
>
> activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/DefaultTypeConverter.java
>
> activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/EnumTypeConverter.java
>
> activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/InstanceMethodTypeConverter.java
>
> activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/PropertyEditorTypeConverter.java
>
> activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/StaticMethodTypeConverter.java
>
> activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/ToStringTypeConverter.java
>
> activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ExchangeHelper.java
>
> activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ExpressionHelper.java
>
> activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/converter/ConverterTest.java
>
> activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/converter/JaxpTest.java
>
> activemq/camel/trunk/components/camel-hl7/src/main/java/org/apache/camel/dataformat/hl7/HL7Converter.java
>
> activemq/camel/trunk/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/FallbackTypeConverter.java
>
> activemq/camel/trunk/components/camel-jaxb/src/test/java/org/apache/camel/example/JAXBConvertTest.java
>
> activemq/camel/trunk/components/camel-jcr/src/main/java/org/apache/camel/component/jcr/JcrProducer.java
>
> activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailBinding.java
>
> Modified:
> activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/TypeConverter.java
> URL:
> http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/TypeConverter.java?rev=687515&r1=687514&r2=687515&view=diff
> ==============================================================================
> ---
> activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/TypeConverter.java
> (original)
> +++
> activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/TypeConverter.java
> Wed Aug 20 17:13:01 2008
> @@ -33,4 +33,17 @@
> * @return the converted value or null if it can not be converted
> */
> <T> T convertTo(Class<T> type, Object value);
> +
> + /**
> + * Converts the value to the specified type in the context of an exchange
> + *
> + * @param type the requested type
> + * @param current exchange
> + * @param value the value to be converted
> + * @return the converted value or null if it can not be converted
> + *
> + * Used when conversion requires extra information from the current
> + * exchange (such as encoding).
> + */
> + <T> T convertTo(Class<T> type, Exchange exchange, Object value);
> }
>
> Modified:
> activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java
> URL:
> http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java?rev=687515&r1=687514&r2=687515&view=diff
> ==============================================================================
> ---
> activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java
> (original)
> +++
> activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java
> Wed Aug 20 17:13:01 2008
> @@ -384,7 +384,7 @@
> return new Expression<E>() {
> public Object evaluate(E exchange) {
> Object value = expression.evaluate(exchange);
> - return
> exchange.getContext().getTypeConverter().convertTo(type, value);
> + return
> exchange.getContext().getTypeConverter().convertTo(type, exchange, value);
> }
>
> @Override
> @@ -520,7 +520,7 @@
> */
> public static <E extends Exchange> String
> evaluateStringExpression(Expression<E> expression, E exchange) {
> Object value = expression.evaluate(exchange);
> - return
> exchange.getContext().getTypeConverter().convertTo(String.class, value);
> + return
> exchange.getContext().getTypeConverter().convertTo(String.class, exchange,
> value);
> }
>
> /**
>
> Modified:
> activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultExchange.java
> URL:
> http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultExchange.java?rev=687515&r1=687514&r2=687515&view=diff
> ==============================================================================
> ---
> activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultExchange.java
> (original)
> +++
> activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultExchange.java
> Wed Aug 20 17:13:01 2008
> @@ -144,7 +144,7 @@
> validateExchangePropertyIsExpectedType(property, type, value);
> }
>
> - return getContext().getTypeConverter().convertTo(type, value);
> + return getContext().getTypeConverter().convertTo(type, this, value);
> }
>
> public void setProperty(String name, Object value) {
>
> Modified:
> activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultMessage.java
> URL:
> http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultMessage.java?rev=687515&r1=687514&r2=687515&view=diff
> ==============================================================================
> ---
> activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultMessage.java
> (original)
> +++
> activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultMessage.java
> Wed Aug 20 17:13:01 2008
> @@ -22,6 +22,7 @@
>
> import javax.activation.DataHandler;
>
> +import org.apache.camel.Exchange;
> import org.apache.camel.Message;
>
> /**
> @@ -44,7 +45,8 @@
>
> public <T> T getHeader(String name, Class<T> type) {
> Object value = getHeader(name);
> - return getExchange().getContext().getTypeConverter().convertTo(type,
> value);
> + Exchange e = getExchange();
> + return e.getContext().getTypeConverter().convertTo(type, e, value);
> }
>
> public void setHeader(String name, Object value) {
>
> Modified:
> activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/MessageSupport.java
> URL:
> http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/MessageSupport.java?rev=687515&r1=687514&r2=687515&view=diff
> ==============================================================================
> ---
> activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/MessageSupport.java
> (original)
> +++
> activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/MessageSupport.java
> Wed Aug 20 17:13:01 2008
> @@ -56,7 +56,7 @@
> CamelContext camelContext = e.getContext();
> if (camelContext != null) {
> TypeConverter converter = camelContext.getTypeConverter();
> - T answer = converter.convertTo(type, body);
> + T answer = converter.convertTo(type, e, body);
> if (answer == null) {
> // lets first try converting the message itself first
> // as for some types like InputStream v Reader its more
> efficient to do the transformation
> @@ -77,7 +77,7 @@
> public <T> void setBody(Object value, Class<T> type) {
> Exchange e = getExchange();
> if (e != null) {
> - T v = e.getContext().getTypeConverter().convertTo(type, value);
> + T v = e.getContext().getTypeConverter().convertTo(type, e,
> value);
> if (v != null) {
> value = v;
> }
>
> Modified:
> activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/AnnotationTypeConverterLoader.java
> URL:
> http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/AnnotationTypeConverterLoader.java?rev=687515&r1=687514&r2=687515&view=diff
> ==============================================================================
> ---
> activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/AnnotationTypeConverterLoader.java
> (original)
> +++
> activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/AnnotationTypeConverterLoader.java
> Wed Aug 20 17:13:01 2008
> @@ -16,7 +16,6 @@
> */
> package org.apache.camel.impl.converter;
>
> -
> import java.io.BufferedReader;
> import java.io.IOException;
> import java.io.InputStreamReader;
> @@ -33,6 +32,7 @@
> import static java.lang.reflect.Modifier.isStatic;
>
> import org.apache.camel.Converter;
> +import org.apache.camel.Exchange;
> import org.apache.camel.TypeConverter;
> import org.apache.camel.util.ObjectHelper;
> import org.apache.camel.util.ResolverUtil;
> @@ -40,7 +40,6 @@
> import org.apache.commons.logging.Log;
> import org.apache.commons.logging.LogFactory;
>
> -
> /**
> * A class which will auto-discover converter objects and methods to pre-load
> * the registry of converters on startup
> @@ -141,25 +140,21 @@
> for (Method method : methods) {
> Converter annotation = method.getAnnotation(Converter.class);
> if (annotation != null) {
> - Class<?>[] parameterTypes = method.getParameterTypes();
> - if (parameterTypes == null || parameterTypes.length !=
> 1) {
> - LOG.warn("Ignoring bad converter on type: " +
> type.getName() + " method: " + method
> - + " as a converter method should have one
> parameter");
> - } else {
> + if (isValidConverterMethod(method)) {
> int modifiers = method.getModifiers();
> if (isAbstract(modifiers) || !isPublic(modifiers)) {
> LOG.warn("Ignoring bad converter on type: " +
> type.getName() + " method: " + method
> + " as a converter method is not a public
> and concrete method");
> } else {
> - Class toType = method.getReturnType();
> + Class<?> toType = method.getReturnType();
> if (toType.equals(Void.class)) {
> LOG.warn("Ignoring bad converter on type: " +
> type.getName() + " method: "
> + method + " as a converter method
> returns a void method");
> } else {
> - Class fromType = parameterTypes[0];
> + Class<?> fromType =
> method.getParameterTypes()[0];
> if (isStatic(modifiers)) {
> registerTypeConverter(registry, method,
> toType, fromType,
> - new
> StaticMethodTypeConverter(method));
> + new
> StaticMethodTypeConverter(method));
> } else {
> if (injector == null) {
> injector = new
> CachingInjector(registry, type);
> @@ -169,9 +164,13 @@
> }
> }
> }
> + } else {
> + LOG.warn("Ignoring bad converter on type: " +
> type.getName() + " method: " + method
> + + " as a converter method should have one
> parameter");
> }
> }
> }
> +
> Class superclass = type.getSuperclass();
> if (superclass != null && !superclass.equals(Object.class)) {
> loadConverterMethods(registry, superclass);
> @@ -181,9 +180,15 @@
> }
> }
>
> - protected void registerTypeConverter(TypeConverterRegistry registry,
> Method method,
> - Class toType, Class fromType,
> TypeConverter typeConverter) {
> + protected void registerTypeConverter(TypeConverterRegistry registry,
> + Method method, Class toType, Class fromType, TypeConverter
> typeConverter) {
>
> registry.addTypeConverter(toType, fromType, typeConverter);
> }
> +
> + protected boolean isValidConverterMethod(Method method) {
> + Class<?>[] parameterTypes = method.getParameterTypes();
> + return (parameterTypes != null) &&
> + (parameterTypes.length == 1 || (parameterTypes.length == 2 &&
> parameterTypes[1] == Exchange.class));
> + }
> }
>
> Modified:
> activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/ArrayTypeConverter.java
> URL:
> http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/ArrayTypeConverter.java?rev=687515&r1=687514&r2=687515&view=diff
> ==============================================================================
> ---
> activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/ArrayTypeConverter.java
> (original)
> +++
> activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/ArrayTypeConverter.java
> Wed Aug 20 17:13:01 2008
> @@ -22,6 +22,7 @@
> import java.util.Collection;
> import java.util.List;
>
> +import org.apache.camel.Exchange;
> import org.apache.camel.TypeConverter;
>
> /**
> @@ -71,4 +72,8 @@
> }
> return null;
> }
> +
> + public <T> T convertTo(Class<T> type, Exchange exchange, Object value) {
> + return convertTo(type, value);
> + }
> }
>
> Modified:
> activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/AsyncProcessorTypeConverter.java
> URL:
> http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/AsyncProcessorTypeConverter.java?rev=687515&r1=687514&r2=687515&view=diff
> ==============================================================================
> ---
> activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/AsyncProcessorTypeConverter.java
> (original)
> +++
> activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/AsyncProcessorTypeConverter.java
> Wed Aug 20 17:13:01 2008
> @@ -65,6 +65,10 @@
> return null;
> }
>
> + public <T> T convertTo(Class<T> toType, Exchange exchange, Object value)
> {
> + return convertTo(toType, value);
> + }
> +
> public static AsyncProcessor convert(Processor value) {
> if (value instanceof AsyncProcessor) {
> return (AsyncProcessor)value;
>
> Modified:
> activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/DefaultTypeConverter.java
> URL:
> http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/DefaultTypeConverter.java?rev=687515&r1=687514&r2=687515&view=diff
> ==============================================================================
> ---
> activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/DefaultTypeConverter.java
> (original)
> +++
> activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/DefaultTypeConverter.java
> Wed Aug 20 17:13:01 2008
> @@ -18,11 +18,12 @@
>
> import java.io.IOException;
> import java.util.ArrayList;
> -import java.util.HashMap;
> import java.util.List;
> import java.util.Map;
> import java.util.Set;
> +import java.util.concurrent.ConcurrentHashMap;
>
> +import org.apache.camel.Exchange;
> import org.apache.camel.RuntimeCamelException;
> import org.apache.camel.TypeConverter;
> import org.apache.camel.spi.Injector;
> @@ -41,7 +42,7 @@
> */
> public class DefaultTypeConverter implements TypeConverter,
> TypeConverterRegistry {
> private static final transient Log LOG =
> LogFactory.getLog(DefaultTypeConverter.class);
> - private final Map<TypeMapping, TypeConverter> typeMappings = new
> HashMap<TypeMapping, TypeConverter>();
> + private final Map<TypeMapping, TypeConverter> typeMappings = new
> ConcurrentHashMap<TypeMapping, TypeConverter>();
> private Injector injector;
> private List<TypeConverterLoader> typeConverterLoaders = new
> ArrayList<TypeConverterLoader>();
> private List<TypeConverter> fallbackConverters = new
> ArrayList<TypeConverter>();
> @@ -57,31 +58,36 @@
> addFallbackConverter(new EnumTypeConverter());
> }
>
> - public <T> T convertTo(Class<T> toType, Object value) {
> - if (toType.isInstance(value)) {
> - return toType.cast(value);
> + 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) {
> + if (type.isInstance(value)) {
> + return type.cast(value);
> }
> checkLoaded();
> - TypeConverter converter = getOrFindTypeConverter(toType, value);
> + TypeConverter converter = getOrFindTypeConverter(type, value);
> if (converter != null) {
> - return converter.convertTo(toType, value);
> + return converter.convertTo(type, exchange, value);
> }
>
> for (TypeConverter fallback : fallbackConverters) {
> - T rc = fallback.convertTo(toType, value);
> + T rc = fallback.convertTo(type, exchange, value);
> if (rc != null) {
> return rc;
> }
> }
>
> // lets avoid NullPointerException when converting to boolean for
> null values
> - if (boolean.class.isAssignableFrom(toType)) {
> + if (boolean.class.isAssignableFrom(type)) {
> return (T) Boolean.FALSE;
> }
> - if (toType.isPrimitive()) {
> - Class primitiveType =
> ObjectHelper.convertPrimitiveTypeToWrapperType(toType);
> - if (primitiveType != toType) {
> - return (T) convertTo(primitiveType, value);
> + if (type.isPrimitive()) {
> + Class primitiveType =
> ObjectHelper.convertPrimitiveTypeToWrapperType(type);
> + if (primitiveType != type) {
> + return (T) convertTo(primitiveType, exchange, value);
> }
> }
> return null;
> @@ -108,9 +114,7 @@
>
> public TypeConverter getTypeConverter(Class toType, Class fromType) {
> TypeMapping key = new TypeMapping(toType, fromType);
> - synchronized (typeMappings) {
> - return typeMappings.get(key);
> - }
> + return typeMappings.get(key);
> }
>
> public Injector getInjector() {
>
> Modified:
> activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/EnumTypeConverter.java
> URL:
> http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/EnumTypeConverter.java?rev=687515&r1=687514&r2=687515&view=diff
> ==============================================================================
> ---
> activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/EnumTypeConverter.java
> (original)
> +++
> activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/EnumTypeConverter.java
> Wed Aug 20 17:13:01 2008
> @@ -18,6 +18,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.util.ObjectHelper;
> @@ -44,4 +45,9 @@
> }
> return null;
> }
> +
> + public <T> T convertTo(Class<T> type, Exchange exchange, Object
> value) {
> + // ignore exchange
> + return convertTo(type, value);
> + }
> }
> \ No newline at end of file
>
> Modified:
> activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/InstanceMethodTypeConverter.java
> URL:
> http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/InstanceMethodTypeConverter.java?rev=687515&r1=687514&r2=687515&view=diff
> ==============================================================================
> ---
> activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/InstanceMethodTypeConverter.java
> (original)
> +++
> activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/InstanceMethodTypeConverter.java
> Wed Aug 20 17:13:01 2008
> @@ -18,6 +18,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.util.ObjectHelper;
> @@ -31,10 +32,12 @@
> public class InstanceMethodTypeConverter implements TypeConverter {
> private final CachingInjector injector;
> private final Method method;
> + private final boolean useExchange;
>
> public InstanceMethodTypeConverter(CachingInjector injector, Method
> method) {
> this.injector = injector;
> this.method = method;
> + this.useExchange = method.getParameterTypes().length == 2;
> }
>
> @Override
> @@ -43,10 +46,16 @@
> }
>
> public <T> T convertTo(Class<T> type, Object value) {
> + return convertTo(type, null, value);
> + }
> +
> + public <T> T convertTo(Class<T> type, Exchange exchange, Object
> value) {
> Object instance = injector.newInstance();
> if (instance == null) {
> throw new RuntimeCamelException("Could not instantiate an
> instance of: " + type.getName());
> }
> - return (T) ObjectHelper.invokeMethod(method, instance, value);
> - }
> + return useExchange ?
> + (T) ObjectHelper.invokeMethod(method, instance, value, exchange)
> :
> + (T) ObjectHelper.invokeMethod(method, instance, value);
> + }
> }
>
> Modified:
> activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/PropertyEditorTypeConverter.java
> URL:
> http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/PropertyEditorTypeConverter.java?rev=687515&r1=687514&r2=687515&view=diff
> ==============================================================================
> ---
> activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/PropertyEditorTypeConverter.java
> (original)
> +++
> activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/PropertyEditorTypeConverter.java
> Wed Aug 20 17:13:01 2008
> @@ -19,6 +19,7 @@
> import java.beans.PropertyEditor;
> import java.beans.PropertyEditorManager;
>
> +import org.apache.camel.Exchange;
> import org.apache.camel.TypeConverter;
> import org.apache.camel.util.ObjectHelper;
>
> @@ -59,4 +60,7 @@
> return null;
> }
>
> + public <T> T convertTo(Class<T> type, Exchange exchange, Object value) {
> + return convertTo(type, value);
> + }
> }
>
> Modified:
> activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/StaticMethodTypeConverter.java
> URL:
> http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/StaticMethodTypeConverter.java?rev=687515&r1=687514&r2=687515&view=diff
> ==============================================================================
> ---
> activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/StaticMethodTypeConverter.java
> (original)
> +++
> activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/StaticMethodTypeConverter.java
> Wed Aug 20 17:13:01 2008
> @@ -18,6 +18,7 @@
>
> import java.lang.reflect.Method;
>
> +import org.apache.camel.Exchange;
> import org.apache.camel.TypeConverter;
> import org.apache.camel.util.ObjectHelper;
>
> @@ -28,9 +29,11 @@
> */
> public class StaticMethodTypeConverter implements TypeConverter {
> private final Method method;
> + private final boolean useExchange;
>
> public StaticMethodTypeConverter(Method method) {
> this.method = method;
> + this.useExchange = method.getParameterTypes().length == 2;
> }
>
> @Override
> @@ -39,6 +42,12 @@
> }
>
> public <T> T convertTo(Class<T> type, Object value) {
> - return (T) ObjectHelper.invokeMethod(method, null, value);
> + return convertTo(type, null, value);
> }
> +
> + 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);
> + }
> }
>
> Modified:
> activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/ToStringTypeConverter.java
> URL:
> http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/ToStringTypeConverter.java?rev=687515&r1=687514&r2=687515&view=diff
> ==============================================================================
> ---
> activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/ToStringTypeConverter.java
> (original)
> +++
> activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/ToStringTypeConverter.java
> Wed Aug 20 17:13:01 2008
> @@ -16,6 +16,7 @@
> */
> package org.apache.camel.impl.converter;
>
> +import org.apache.camel.Exchange;
> import org.apache.camel.TypeConverter;
>
> /**
> @@ -35,4 +36,7 @@
> return null;
> }
>
> + public <T> T convertTo(Class<T> type, Exchange exchange, Object value) {
> + return convertTo(type, value);
> + }
> }
>
> Modified:
> activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ExchangeHelper.java
> URL:
> http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ExchangeHelper.java?rev=687515&r1=687514&r2=687515&view=diff
> ==============================================================================
> ---
> activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ExchangeHelper.java
> (original)
> +++
> activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ExchangeHelper.java
> Wed Aug 20 17:13:01 2008
> @@ -172,7 +172,7 @@
> * not be converted
> */
> public static <T> T convertToType(Exchange exchange, Class<T> type,
> Object value) {
> - return exchange.getContext().getTypeConverter().convertTo(type,
> value);
> + return exchange.getContext().getTypeConverter().convertTo(type,
> exchange, value);
> }
>
> /**
>
> Modified:
> activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ExpressionHelper.java
> URL:
> http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ExpressionHelper.java?rev=687515&r1=687514&r2=687515&view=diff
> ==============================================================================
> ---
> activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ExpressionHelper.java
> (original)
> +++
> activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ExpressionHelper.java
> Wed Aug 20 17:13:01 2008
> @@ -55,6 +55,6 @@
> public static <T, E extends Exchange> T evaluateAsType(Expression<E>
> expression, E exchange,
> Class<T>
> resultType) {
> Object value = expression.evaluate(exchange);
> - return
> exchange.getContext().getTypeConverter().convertTo(resultType, value);
> + return
> exchange.getContext().getTypeConverter().convertTo(resultType, exchange,
> value);
> }
> }
>
> Modified:
> activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/converter/ConverterTest.java
> URL:
> http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/converter/ConverterTest.java?rev=687515&r1=687514&r2=687515&view=diff
> ==============================================================================
> ---
> activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/converter/ConverterTest.java
> (original)
> +++
> activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/converter/ConverterTest.java
> Wed Aug 20 17:13:01 2008
> @@ -27,7 +27,12 @@
> import java.util.Set;
>
> import junit.framework.TestCase;
> +
> +import org.apache.camel.CamelContext;
> +import org.apache.camel.Exchange;
> import org.apache.camel.TypeConverter;
> +import org.apache.camel.impl.DefaultCamelContext;
> +import org.apache.camel.impl.DefaultExchange;
> import org.apache.camel.impl.converter.DefaultTypeConverter;
> import org.apache.camel.util.IntrospectionSupport;
> import org.apache.camel.util.ReflectionInjector;
> @@ -53,6 +58,11 @@
> }
> }
>
> + @Override
> + protected void setUp() throws Exception {
> + PropertyEditorManager.registerEditor(Integer.class,
> IntegerPropertyEditor.class);
> + }
> +
> public void testIntegerPropertyEditorConversion() throws Exception {
> Integer value = converter.convertTo(Integer.class, "1000");
> assertNotNull(value);
> @@ -181,22 +191,24 @@
> value = converter.convertTo(Boolean.class, null);
> assertEquals("converted boolean value", null, value);
> }
> -
> - public static class MyBean {
> - private int foo;
> -
> - public int getFoo() {
> - return foo;
> - }
> -
> - public void setFoo(int foo) {
> - this.foo = foo;
> - }
> - }
> -
> - @Override
> - protected void setUp() throws Exception {
> - PropertyEditorManager.registerEditor(Integer.class,
> IntegerPropertyEditor.class);
> +
> + public void testStaticMethodConversionWithExchange() throws Exception {
> + CamelContext camel = new DefaultCamelContext();
> + Exchange e = new DefaultExchange(camel);
> + e.setProperty("prefix", "foo-");
> + MyBean bean = converter.convertTo(MyBean.class, e, "5:bar");
> + assertEquals("converted using exchange", 5, bean.getFoo(), 5);
> + assertEquals("converted using exchange", "foo-bar", bean.getBar());
> + }
> +
> + public void testInstanceMethodConversionWithExchange() throws Exception {
> + String[] values = new String[]{"5", "bar"};
> +
> + CamelContext camel = new DefaultCamelContext();
> + Exchange e = new DefaultExchange(camel);
> + e.setProperty("prefix", "foo-");
> + MyBean bean = converter.convertTo(MyBean.class, e, values);
> + assertEquals("converted using exchange", 5, bean.getFoo(), 5);
> + assertEquals("converted using exchange", "foo-bar", bean.getBar());
> }
> -
> }
>
> Added:
> activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/converter/InstanceMethodWithExchangeTestConverter.java
> URL:
> http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/converter/InstanceMethodWithExchangeTestConverter.java?rev=687515&view=auto
> ==============================================================================
> ---
> activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/converter/InstanceMethodWithExchangeTestConverter.java
> (added)
> +++
> activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/converter/InstanceMethodWithExchangeTestConverter.java
> Wed Aug 20 17:13:01 2008
> @@ -0,0 +1,30 @@
> +/**
> + * 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.converter;
> +
> +import org.apache.camel.Converter;
> +import org.apache.camel.Exchange;
> +
> [EMAIL PROTECTED]
> +public class InstanceMethodWithExchangeTestConverter {
> +
> + @Converter
> + public MyBean fromArray(String[] values, Exchange exchange) {
> + return new MyBean(Integer.parseInt(values[0]),
> + exchange.getProperty("prefix", String.class) + values[1]);
> + }
> +}
>
> Modified:
> activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/converter/JaxpTest.java
> URL:
> http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/converter/JaxpTest.java?rev=687515&r1=687514&r2=687515&view=diff
> ==============================================================================
> ---
> activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/converter/JaxpTest.java
> (original)
> +++
> activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/converter/JaxpTest.java
> Wed Aug 20 17:13:01 2008
> @@ -57,8 +57,7 @@
> }
>
> public void testConvertToSource() throws Exception {
> - Source source = converter
> - .convertTo(Source.class, "<hello>world!</hello>");
> + Source source = converter.convertTo(Source.class,
> "<hello>world!</hello>");
> assertNotNull(source);
>
> LOG.debug("Found document: " + source);
>
> Added:
> activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/converter/MyBean.java
> URL:
> http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/converter/MyBean.java?rev=687515&view=auto
> ==============================================================================
> ---
> activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/converter/MyBean.java
> (added)
> +++
> activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/converter/MyBean.java
> Wed Aug 20 17:13:01 2008
> @@ -0,0 +1,47 @@
> +/**
> + * 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.converter;
> +
> +public class MyBean {
> + private int foo;
> + private String bar;
> +
> + public MyBean() {
> + this(0, "");
> + }
> +
> + public MyBean(int foo, String bar) {
> + this.foo = foo;
> + this.bar = bar;
> + }
> +
> + public int getFoo() {
> + return foo;
> + }
> +
> + public void setFoo(int foo) {
> + this.foo = foo;
> + }
> +
> + public String getBar() {
> + return bar;
> + }
> +
> + public void setBar(String bar) {
> + this.bar = bar;
> + }
> +}
>
> Added:
> activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/converter/StaticMethodWithExchangeTestConverter.java
> URL:
> http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/converter/StaticMethodWithExchangeTestConverter.java?rev=687515&view=auto
> ==============================================================================
> ---
> activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/converter/StaticMethodWithExchangeTestConverter.java
> (added)
> +++
> activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/converter/StaticMethodWithExchangeTestConverter.java
> Wed Aug 20 17:13:01 2008
> @@ -0,0 +1,31 @@
> +/**
> + * 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.converter;
> +
> +import org.apache.camel.Converter;
> +import org.apache.camel.Exchange;
> +import org.apache.camel.util.ObjectHelper;
> +
> [EMAIL PROTECTED]
> +public final class StaticMethodWithExchangeTestConverter {
> +
> + @Converter
> + public static MyBean fromString(String text, Exchange exchange) {
> + String[] values = ObjectHelper.splitOnCharacter(text, ":", 2);
> + return new MyBean(Integer.parseInt(values[0]),
> exchange.getProperty("prefix", String.class) + values[1]);
> + }
> +}
>
> Modified:
> activemq/camel/trunk/components/camel-hl7/src/main/java/org/apache/camel/dataformat/hl7/HL7Converter.java
> URL:
> http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-hl7/src/main/java/org/apache/camel/dataformat/hl7/HL7Converter.java?rev=687515&r1=687514&r2=687515&view=diff
> ==============================================================================
> ---
> activemq/camel/trunk/components/camel-hl7/src/main/java/org/apache/camel/dataformat/hl7/HL7Converter.java
> (original)
> +++
> activemq/camel/trunk/components/camel-hl7/src/main/java/org/apache/camel/dataformat/hl7/HL7Converter.java
> Wed Aug 20 17:13:01 2008
> @@ -42,7 +42,7 @@
>
> @Converter
> public static Message toMessage(String body) throws HL7Exception {
> - // replace \n with \r as HL7 uses 0x0d = \r as segment termninators
> + // replace \n with \r as HL7 uses 0x0d = \r as segment terminators
> body = body.replace('\n', '\r');
>
> Parser parser = new PipeParser();
>
> Modified:
> activemq/camel/trunk/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/FallbackTypeConverter.java
> URL:
> http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/FallbackTypeConverter.java?rev=687515&r1=687514&r2=687515&view=diff
> ==============================================================================
> ---
> activemq/camel/trunk/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/FallbackTypeConverter.java
> (original)
> +++
> activemq/camel/trunk/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/FallbackTypeConverter.java
> Wed Aug 20 17:13:01 2008
> @@ -29,6 +29,7 @@
> import javax.xml.bind.util.JAXBSource;
> import javax.xml.transform.Source;
>
> +import org.apache.camel.Exchange;
> import org.apache.camel.RuntimeCamelException;
> import org.apache.camel.TypeConverter;
> import org.apache.camel.spi.TypeConverterAware;
> @@ -71,6 +72,10 @@
> }
> }
>
> + public <T> T convertTo(Class<T> type, Exchange exchange, Object value) {
> + return convertTo(type, value);
> + }
> +
> protected <T> boolean isJaxbType(Class<T> type) {
> XmlRootElement element = type.getAnnotation(XmlRootElement.class);
> boolean jaxbType = element != null;
>
> Modified:
> activemq/camel/trunk/components/camel-jaxb/src/test/java/org/apache/camel/example/JAXBConvertTest.java
> URL:
> http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-jaxb/src/test/java/org/apache/camel/example/JAXBConvertTest.java?rev=687515&r1=687514&r2=687515&view=diff
> ==============================================================================
> ---
> activemq/camel/trunk/components/camel-jaxb/src/test/java/org/apache/camel/example/JAXBConvertTest.java
> (original)
> +++
> activemq/camel/trunk/components/camel-jaxb/src/test/java/org/apache/camel/example/JAXBConvertTest.java
> Wed Aug 20 17:13:01 2008
> @@ -30,7 +30,8 @@
> protected TypeConverter converter = context.getTypeConverter();
>
> public void testConverter() throws Exception {
> - PurchaseOrder purchaseOrder =
> converter.convertTo(PurchaseOrder.class, "<purchaseOrder name='foo'
> amount='123.45' price='2.22'/>");
> + PurchaseOrder purchaseOrder =
> converter.convertTo(PurchaseOrder.class,
> + "<purchaseOrder name='foo' amount='123.45' price='2.22'/>");
>
> assertNotNull("Purchase order should not be null!", purchaseOrder);
> assertEquals("name", "foo", purchaseOrder.getName());
>
> Modified:
> activemq/camel/trunk/components/camel-jcr/src/main/java/org/apache/camel/component/jcr/JcrProducer.java
> URL:
> http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-jcr/src/main/java/org/apache/camel/component/jcr/JcrProducer.java?rev=687515&r1=687514&r2=687515&view=diff
> ==============================================================================
> ---
> activemq/camel/trunk/components/camel-jcr/src/main/java/org/apache/camel/component/jcr/JcrProducer.java
> (original)
> +++
> activemq/camel/trunk/components/camel-jcr/src/main/java/org/apache/camel/component/jcr/JcrProducer.java
> Wed Aug 20 17:13:01 2008
> @@ -41,8 +41,8 @@
> Node node = base.addNode(getNodeName(exchange));
> TypeConverter converter =
> exchange.getContext().getTypeConverter();
> for (String key : exchange.getProperties().keySet()) {
> - Value value = converter.convertTo(Value.class, exchange
> - .getProperty(key));
> + Value value = converter.convertTo(Value.class,
> + exchange, exchange.getProperty(key));
> node.setProperty(key, value);
> }
> node.addMixin("mix:referenceable");
>
> Modified:
> activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailBinding.java
> URL:
> http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailBinding.java?rev=687515&r1=687514&r2=687515&view=diff
> ==============================================================================
> ---
> activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailBinding.java
> (original)
> +++
> activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailBinding.java
> Wed Aug 20 17:13:01 2008
> @@ -314,7 +314,7 @@
> }
>
> private static String asString(Exchange exchange, Object value) {
> - return
> exchange.getContext().getTypeConverter().convertTo(String.class, value);
> + return
> exchange.getContext().getTypeConverter().convertTo(String.class, exchange,
> value);
> }
>
> }
>
>
>
--
James
-------
http://macstrac.blogspot.com/
Open Source Integration
http://open.iona.com