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 2009/05/24 10:29:28 UTC

svn commit: r778114 - in /camel/trunk/camel-core/src/main/java/org/apache/camel: builder/ExpressionBuilder.java util/ObjectHelper.java

Author: davsclaus
Date: Sun May 24 08:29:28 2009
New Revision: 778114

URL: http://svn.apache.org/viewvc?rev=778114&view=rev
Log:
CAMEL-1642: getScanner for GenericFile did not work. So splitter with streaming was affected.

Modified:
    camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java?rev=778114&r1=778113&r2=778114&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java Sun May 24 08:29:28 2009
@@ -16,10 +16,6 @@
  */
 package org.apache.camel.builder;
 
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.InputStream;
-import java.nio.channels.ReadableByteChannel;
 import java.text.SimpleDateFormat;
 import java.util.Collection;
 import java.util.Collections;
@@ -33,7 +29,6 @@
 import org.apache.camel.Exchange;
 import org.apache.camel.Expression;
 import org.apache.camel.Message;
-import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.impl.ExpressionAdapter;
 import org.apache.camel.language.bean.BeanLanguage;
 import org.apache.camel.spi.Language;
@@ -580,7 +575,7 @@
         return new ExpressionAdapter() {
             public Object evaluate(Exchange exchange) {
                 Object value = expression.evaluate(exchange, Object.class);
-                Scanner scanner = getScanner(exchange, value);
+                Scanner scanner = ObjectHelper.getScanner(exchange, value);
                 scanner.useDelimiter(token);
                 return scanner;
             }
@@ -602,7 +597,7 @@
         return new ExpressionAdapter() {
             public Object evaluate(Exchange exchange) {
                 Object value = expression.evaluate(exchange, Object.class);
-                Scanner scanner = getScanner(exchange, value);
+                Scanner scanner = ObjectHelper.getScanner(exchange, value);
                 scanner.useDelimiter(regexTokenizer);
                 return scanner;
             }
@@ -834,39 +829,4 @@
         return beanExpression(expression);
     }
 
-    private static Scanner getScanner(Exchange exchange, Object value) {
-        String charset = exchange.getProperty(Exchange.CHARSET_NAME, String.class);
-
-        Scanner scanner = null;
-        if (value instanceof Readable) {
-            scanner = new Scanner((Readable)value);
-        } else if (value instanceof InputStream) {
-            scanner = charset == null ? new Scanner((InputStream)value) : new Scanner((InputStream)value, charset);
-        } else if (value instanceof File) {
-            try {
-                scanner = charset == null ? new Scanner((File)value) : new Scanner((File)value, charset);
-            } catch (FileNotFoundException e) {
-                throw new RuntimeCamelException(e);
-            }
-        } else if (value instanceof String) {
-            scanner = new Scanner((String)value);
-        } else if (value instanceof ReadableByteChannel) {
-            scanner = charset == null ? new Scanner((ReadableByteChannel)value) : new Scanner((ReadableByteChannel)value, charset);
-        }
-
-        if (scanner == null) {
-            // value is not a suitable type, try to convert value to a string
-            String text = exchange.getContext().getTypeConverter().convertTo(String.class, exchange, value);
-            if (text != null) {
-                scanner = new Scanner(text);
-            }
-        }
-
-        if (scanner == null) {
-            scanner = new Scanner("");
-        }
-
-        return scanner;
-    }
-
 }

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java?rev=778114&r1=778113&r2=778114&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java Sun May 24 08:29:28 2009
@@ -19,11 +19,14 @@
 import java.io.Closeable;
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.File;
+import java.io.FileNotFoundException;
 import java.lang.annotation.Annotation;
 import java.lang.reflect.AnnotatedElement;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.nio.charset.Charset;
+import java.nio.channels.ReadableByteChannel;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -39,6 +42,7 @@
 import org.apache.camel.Exchange;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.TypeConverter;
+import org.apache.camel.component.file.GenericFile;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
@@ -1029,6 +1033,53 @@
         return new ExceptionIterator(exception);
     }
 
+    /**
+     * Creates a {@link Scanner} for scanning the given value.
+     *
+     * @param exchange  the current exchange
+     * @param value     the value, typically the message IN body
+     * @return the scanner, is newer <tt>null</tt>
+     */
+    public static Scanner getScanner(Exchange exchange, Object value) {
+        if (value instanceof GenericFile) {
+            // generic file is just a wrapper for the real file so call again with the real file
+            GenericFile gf = (GenericFile) value;
+            return getScanner(exchange, gf.getFile());
+        }
+
+        String charset = exchange.getProperty(Exchange.CHARSET_NAME, String.class);
+        Scanner scanner = null;
+        if (value instanceof Readable) {
+            scanner = new Scanner((Readable)value);
+        } else if (value instanceof InputStream) {
+            scanner = charset == null ? new Scanner((InputStream)value) : new Scanner((InputStream)value, charset);
+        } else if (value instanceof File) {
+            try {
+                scanner = charset == null ? new Scanner((File)value) : new Scanner((File)value, charset);
+            } catch (FileNotFoundException e) {
+                throw new RuntimeCamelException(e);
+            }
+        } else if (value instanceof String) {
+            scanner = new Scanner((String)value);
+        } else if (value instanceof ReadableByteChannel) {
+            scanner = charset == null ? new Scanner((ReadableByteChannel)value) : new Scanner((ReadableByteChannel)value, charset);
+        }
+
+        if (scanner == null) {
+            // value is not a suitable type, try to convert value to a string
+            String text = exchange.getContext().getTypeConverter().convertTo(String.class, exchange, value);
+            if (text != null) {
+                scanner = new Scanner(text);
+            }
+        }
+
+        if (scanner == null) {
+            scanner = new Scanner("");
+        }
+
+        return scanner;
+    }
+
     private static class ExceptionIterator implements Iterator<Throwable> {
         private List<Throwable> tree = new ArrayList<Throwable>();
         private Iterator<Throwable> it;