You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by js...@apache.org on 2007/03/30 01:47:55 UTC

svn commit: r523881 - in /activemq/camel/trunk/camel-core/src: main/java/org/apache/camel/converter/ main/java/org/apache/camel/impl/converter/ main/java/org/apache/camel/util/ test/java/org/apache/camel/converter/

Author: jstrachan
Date: Thu Mar 29 16:47:54 2007
New Revision: 523881

URL: http://svn.apache.org/viewvc?view=rev&rev=523881
Log:
added more test cases & fixes. also made the send() helpers on CamelClient return the exchange

Modified:
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/converter/IOConverter.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/DefaultTypeConverter.java
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/TypeConverterRegistry.java
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/CamelClient.java
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ProducerCache.java
    activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/converter/ConverterTest.java

Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/converter/IOConverter.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/converter/IOConverter.java?view=diff&rev=523881&r1=523880&r2=523881
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/converter/IOConverter.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/converter/IOConverter.java Thu Mar 29 16:47:54 2007
@@ -18,6 +18,8 @@
 package org.apache.camel.converter;
 
 import org.apache.camel.Converter;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 
 import java.io.*;
 import java.nio.ByteBuffer;
@@ -29,6 +31,7 @@
  */
 @Converter
 public class IOConverter {
+    private static final transient Log log = LogFactory.getLog(IOConverter.class);
 
     @Converter
     public static InputStream toInputStream(File file) throws FileNotFoundException {
@@ -62,12 +65,17 @@
 
 
     @Converter
-    public static StringReader toInputStream(String text) {
+    public static StringReader toReader(String text) {
         // TODO could we automatically find this?
         return new StringReader(text);
     }
 
     @Converter
+    public static InputStream toInputStream(String text) {
+        return toInputStream(text.getBytes());
+    }
+
+    @Converter
     public static byte[] toByteArray(String text) {
         // TODO could we automatically find this?
         return text.getBytes();
@@ -76,6 +84,50 @@
     @Converter
     public static String toString(byte[] data) {
         return new String(data);
+    }
+
+    @Converter
+    public static String toString(Reader reader) throws IOException {
+        if (reader instanceof BufferedReader) {
+            return toString((BufferedReader) reader);
+        }
+        else {
+            return toString(new BufferedReader(reader));
+        }
+    }
+
+    @Converter
+    public static String toString(BufferedReader reader) throws IOException {
+        try {
+            StringBuilder builder = new StringBuilder();
+            boolean first = true;
+            while (true) {
+                String line = reader.readLine();
+                if (line == null) {
+                    return builder.toString();
+                }
+                if (first) {
+                    first = false;
+                }
+                else {
+                    builder.append("\n");
+                }
+                builder.append(line);
+            }
+        }
+        finally {
+            try {
+                reader.close();
+            }
+            catch (IOException e) {
+                log.warn("Failed to close stream: "+ e, e);
+            }
+        }
+    }
+    
+    @Converter
+    public static String toString(InputStream in) throws IOException {
+        return toString(toReader(in));
     }
 
     @Converter

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?view=diff&rev=523881&r1=523880&r2=523881
==============================================================================
--- 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 Thu Mar 29 16:47:54 2007
@@ -147,13 +147,13 @@
                         else {
                             Class fromType = parameterTypes[0];
                             if (isStatic(modifiers)) {
-                                registry.addTypeConverter(fromType, toType, new StaticMethodTypeConverter(method));
+                                registry.addTypeConverter(toType, fromType, new StaticMethodTypeConverter(method));
                             }
                             else {
                                 if (injector == null) {
                                     injector = new CachingInjector(registry, type);
                                 }
-                                registry.addTypeConverter(fromType, toType, new InstanceMethodTypeConverter(injector, method));
+                                registry.addTypeConverter(toType, fromType, new InstanceMethodTypeConverter(injector, method));
                             }
                         }
                     }

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?view=diff&rev=523881&r1=523880&r2=523881
==============================================================================
--- 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 Thu Mar 29 16:47:54 2007
@@ -47,7 +47,7 @@
             return toType.cast(value);
         }
         checkLoaded();
-        TypeConverter converter = getConverter(toType, value);
+        TypeConverter converter = getOrFindTypeConverter(toType, value);
         if (converter != null) {
             return converter.convertTo(toType, value);
         }
@@ -59,8 +59,8 @@
         return null;
     }
 
-    public void addTypeConverter(Class fromType, Class toType, TypeConverter typeConverter) {
-        TypeMapping key = new TypeMapping(fromType, toType);
+    public void addTypeConverter(Class toType, Class fromType, TypeConverter typeConverter) {
+        TypeMapping key = new TypeMapping(toType, fromType);
         synchronized (typeMappings) {
             TypeConverter converter = typeMappings.get(key);
             if (converter != null) {
@@ -70,8 +70,8 @@
         }
     }
 
-    public TypeConverter getTypeConverter(Class fromType, Class toType) {
-        TypeMapping key = new TypeMapping(fromType, toType);
+    public TypeConverter getTypeConverter(Class toType, Class fromType) {
+        TypeMapping key = new TypeMapping(toType, fromType);
         synchronized (typeMappings) {
             return typeMappings.get(key);
         }
@@ -88,12 +88,12 @@
         this.injector = injector;
     }
 
-    protected <T> TypeConverter getConverter(Class toType, Object value) {
+    protected <T> TypeConverter getOrFindTypeConverter(Class toType, Object value) {
         Class fromType = null;
         if (value != null) {
             fromType = value.getClass();
         }
-        TypeMapping key = new TypeMapping(fromType, toType);
+        TypeMapping key = new TypeMapping(toType, fromType);
         TypeConverter converter;
         synchronized (typeMappings) {
             converter = typeMappings.get(key);
@@ -116,7 +116,7 @@
              toSuperClass != null && !toSuperClass.equals(Object.class);
              toSuperClass = toSuperClass.getSuperclass()) {
 
-            TypeConverter converter = getTypeConverter(fromType, toSuperClass);
+            TypeConverter converter = getTypeConverter(toSuperClass, fromType);
             if (converter != null) {
                 return converter;
             }
@@ -124,21 +124,30 @@
 
         // TODO should we filter out any interfaces which are super-interfaces?
         for (Class type : toType.getInterfaces()) {
-            TypeConverter converter = getTypeConverter(fromType, type);
+            TypeConverter converter = getTypeConverter(type, fromType);
             if (converter != null) {
                 return converter;
             }
         }
 
         // lets try the super classes of the from type
-        Class fromSuperClass = fromType.getSuperclass();
-        if (fromSuperClass != null && !fromSuperClass.equals(Object.class)) {
-            return findTypeConverter(toType, fromSuperClass, value);
-        }
-        for (Class type : fromType.getInterfaces()) {
-            TypeConverter converter = getTypeConverter(type, toType);
-            if (converter != null) {
-                return converter;
+        if (fromType != null) {
+            Class fromSuperClass = fromType.getSuperclass();
+            if (fromSuperClass != null && !fromSuperClass.equals(Object.class)) {
+
+                TypeConverter converter = getTypeConverter(toType, fromSuperClass);
+                if (converter == null) {
+                    converter = findTypeConverter(toType, fromSuperClass, value);
+                }
+                if (converter != null) {
+                    return converter;
+                }
+            }
+            for (Class type : fromType.getInterfaces()) {
+                TypeConverter converter = getTypeConverter(toType, type);
+                if (converter != null) {
+                    return converter;
+                }
             }
         }
         // TODO look at constructors of toType?
@@ -166,12 +175,12 @@
      * Represents a mapping from one type (which can be null) to another
      */
     protected static class TypeMapping {
-        Class fromType;
         Class toType;
+        Class fromType;
 
-        public TypeMapping(Class fromType, Class toType) {
-            this.fromType = fromType;
+        public TypeMapping(Class toType, Class fromType) {
             this.toType = toType;
+            this.fromType = fromType;
         }
 
         public Class getFromType() {

Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/TypeConverterRegistry.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/TypeConverterRegistry.java?view=diff&rev=523881&r1=523880&r2=523881
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/TypeConverterRegistry.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/TypeConverterRegistry.java Thu Mar 29 16:47:54 2007
@@ -26,11 +26,11 @@
     /**
      * Allows a new type converter to be bregistered
      *
-     * @param fromType      the type to convert from
      * @param toType        the type to convert to
+     * @param fromType      the type to convert from
      * @param typeConverter the type converter to use
      */
-    void addTypeConverter(Class fromType, Class toType, TypeConverter typeConverter);
+    void addTypeConverter(Class toType, Class fromType, TypeConverter typeConverter);
 
     Injector getInjector();
 }

Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/CamelClient.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/CamelClient.java?view=diff&rev=523881&r1=523880&r2=523881
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/CamelClient.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/CamelClient.java Thu Mar 29 16:47:54 2007
@@ -45,9 +45,10 @@
      * @param endpointUri the endpoint URI to send the exchange to
      * @param exchange the exchange to send
      */
-    public void send(String endpointUri, E exchange) {
+    public E send(String endpointUri, E exchange) {
         Endpoint endpoint = resolveMandatoryEndpoint(endpointUri);
         send(endpoint, exchange);
+        return exchange;
     }
 
     /**
@@ -56,9 +57,9 @@
      * @param endpointUri the endpoint URI to send the exchange to
      * @param processor the transformer used to populate the new exchange
      */
-    public void send(String endpointUri, Processor<E> processor) {
+    public E send(String endpointUri, Processor<E> processor) {
         Endpoint endpoint = resolveMandatoryEndpoint(endpointUri);
-        send(endpoint,  processor);
+        return send(endpoint,  processor);
     }
 
     /**
@@ -67,8 +68,9 @@
      * @param endpoint the endpoint to send the exchange to
      * @param exchange the exchange to send
      */
-    public void send(Endpoint<E> endpoint, E exchange) {
+    public E send(Endpoint<E> endpoint, E exchange) {
         producerCache.send(endpoint, exchange);
+        return exchange;
     }
 
     /**
@@ -77,12 +79,16 @@
      * @param endpoint the endpoint to send the exchange to
      * @param processor the transformer used to populate the new exchange
      */
-    public void send(Endpoint<E> endpoint, Processor<E> processor) {
-        producerCache.send(endpoint, processor);
+    public E send(Endpoint<E> endpoint, Processor<E> processor) {
+        return producerCache.send(endpoint, processor);
     }
 
     public Producer<E> getProducer(Endpoint<E> endpoint) {
         return producerCache.getProducer(endpoint);
+    }
+
+    public CamelContext getContext() {
+        return context;
     }
 
     protected Endpoint resolveMandatoryEndpoint(String endpointUri) {

Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ProducerCache.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ProducerCache.java?view=diff&rev=523881&r1=523880&r2=523881
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ProducerCache.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ProducerCache.java Thu Mar 29 16:47:54 2007
@@ -68,7 +68,7 @@
      * @param endpoint the endpoint to send the exchange to
      * @param processor the transformer used to populate the new exchange
      */
-    public void send(Endpoint<E> endpoint, Processor<E> processor) {
+    public E send(Endpoint<E> endpoint, Processor<E> processor) {
         Producer<E> producer = getProducer(endpoint);
         E exchange = producer.createExchange();
 
@@ -77,6 +77,7 @@
 
         // now lets dispatch
         producer.onExchange(exchange);
+        return exchange;
     }
 
     protected void doStop() throws Exception {

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?view=diff&rev=523881&r1=523880&r2=523881
==============================================================================
--- 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 Thu Mar 29 16:47:54 2007
@@ -23,6 +23,8 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
+import java.io.InputStream;
+
 /**
  * @version $Revision$
  */
@@ -31,15 +33,21 @@
 
     protected TypeConverter converter = new DefaultTypeConverter();
     
-    public void testConvert() throws Exception {
+    public void testConvertStringAndBytes() throws Exception {
         byte[] array = converter.convertTo(byte[].class, "foo");
         assertNotNull(array);
 
         log.debug("Found array of size: " + array.length);
 
-        // lets now convert back again
-
         String text = converter.convertTo(String.class, array);
         assertEquals("Converted to String", "foo", text);
+    }
+
+    public void testConvertStringAndStreams() throws Exception {
+        InputStream inputStream = converter.convertTo(InputStream.class, "bar");
+        assertNotNull(inputStream);
+
+        String text = converter.convertTo(String.class, inputStream);
+        assertEquals("Converted to String", "bar", text);
     }
 }