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 2013/01/31 11:30:15 UTC

svn commit: r1440898 - in /camel/trunk: camel-core/src/main/java/org/apache/camel/language/simple/ camel-core/src/main/java/org/apache/camel/support/ camel-core/src/test/java/org/apache/camel/language/simple/ camel-core/src/test/resources/ components/c...

Author: davsclaus
Date: Thu Jan 31 10:30:14 2013
New Revision: 1440898

URL: http://svn.apache.org/viewvc?rev=1440898&view=rev
Log:
CAMEL-4629: Languages can now load script from external resource, such as file or classpath.

Added:
    camel/trunk/camel-core/src/main/java/org/apache/camel/support/LanguageSupport.java   (with props)
    camel/trunk/camel-core/src/test/java/org/apache/camel/language/simple/SimpleResourceTest.java   (with props)
    camel/trunk/camel-core/src/test/resources/mysimple.txt   (with props)
    camel/trunk/components/camel-groovy/src/test/java/org/apache/camel/language/groovy/GroovyResourceTest.java   (with props)
    camel/trunk/components/camel-groovy/src/test/resources/mygroovy.groovy
    camel/trunk/components/camel-josql/src/test/java/org/apache/camel/lanaguage/sql/SqlResourceTest.java   (with props)
    camel/trunk/components/camel-josql/src/test/resources/myjosql.txt   (with props)
    camel/trunk/components/camel-juel/src/test/java/org/apache/camel/language/juel/JuelResourceTest.java   (with props)
    camel/trunk/components/camel-juel/src/test/resources/juel.txt   (with props)
    camel/trunk/components/camel-jxpath/src/test/java/org/apache/camel/language/jxpath/JXPathResourceTest.java   (with props)
    camel/trunk/components/camel-jxpath/src/test/resources/myjxpath.txt   (with props)
    camel/trunk/components/camel-mvel/src/test/java/org/apache/camel/language/mvel/MvelResourceTest.java   (with props)
    camel/trunk/components/camel-mvel/src/test/resources/mymvel.txt   (with props)
    camel/trunk/components/camel-ognl/src/test/java/org/apache/camel/language/ognl/OgnlResourceTest.java   (with props)
    camel/trunk/components/camel-ognl/src/test/resources/myognl.txt   (with props)
    camel/trunk/components/camel-script/src/test/java/org/apache/camel/language/script/ScriptLanguageResourceTest.java   (with props)
    camel/trunk/components/camel-script/src/test/resources/myjavascript.js   (with props)
    camel/trunk/components/camel-spring/src/test/java/org/apache/camel/language/spel/SpelResourceTest.java   (with props)
    camel/trunk/components/camel-spring/src/test/resources/myspel.txt   (with props)
Modified:
    camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleLanguage.java
    camel/trunk/components/camel-groovy/src/main/java/org/apache/camel/language/groovy/GroovyLanguage.java
    camel/trunk/components/camel-josql/src/main/java/org/apache/camel/language/sql/SqlLanguage.java
    camel/trunk/components/camel-josql/src/test/java/org/apache/camel/builder/sql/Person.java
    camel/trunk/components/camel-juel/src/main/java/org/apache/camel/language/juel/JuelExpression.java
    camel/trunk/components/camel-juel/src/main/java/org/apache/camel/language/juel/JuelLanguage.java
    camel/trunk/components/camel-jxpath/src/main/java/org/apache/camel/language/jxpath/JXPathLanguage.java
    camel/trunk/components/camel-mvel/src/main/java/org/apache/camel/language/mvel/MvelLanguage.java
    camel/trunk/components/camel-ognl/src/main/java/org/apache/camel/language/ognl/OgnlExpression.java
    camel/trunk/components/camel-ognl/src/main/java/org/apache/camel/language/ognl/OgnlLanguage.java
    camel/trunk/components/camel-script/src/main/java/org/apache/camel/builder/script/ScriptLanguage.java
    camel/trunk/components/camel-spring/src/main/java/org/apache/camel/language/spel/RootObject.java
    camel/trunk/components/camel-spring/src/main/java/org/apache/camel/language/spel/SpelLanguage.java

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleLanguage.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleLanguage.java?rev=1440898&r1=1440897&r2=1440898&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleLanguage.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleLanguage.java Thu Jan 31 10:30:14 2013
@@ -21,6 +21,7 @@ import org.apache.camel.IsSingleton;
 import org.apache.camel.Predicate;
 import org.apache.camel.builder.ExpressionBuilder;
 import org.apache.camel.spi.Language;
+import org.apache.camel.support.LanguageSupport;
 import org.apache.camel.util.ObjectHelper;
 
 /**
@@ -88,7 +89,7 @@ import org.apache.camel.util.ObjectHelpe
  * The <b>only</b> file is the filename only with all paths clipped.
  *
  */
-public class SimpleLanguage implements Language, IsSingleton {
+public class SimpleLanguage extends LanguageSupport {
 
     // singleton for expressions without a result type
     private static final SimpleLanguage SIMPLE = new SimpleLanguage();
@@ -127,6 +128,8 @@ public class SimpleLanguage implements L
     public Predicate createPredicate(String expression) {
         ObjectHelper.notNull(expression, "expression");
 
+        expression = loadResource(expression);
+
         // support old simple language syntax
         @SuppressWarnings("deprecation")
         Predicate answer = SimpleBackwardsCompatibleParser.parsePredicate(expression, allowEscape);
@@ -141,6 +144,8 @@ public class SimpleLanguage implements L
     public Expression createExpression(String expression) {
         ObjectHelper.notNull(expression, "expression");
 
+        expression = loadResource(expression);
+
         // support old simple language syntax
         @SuppressWarnings("deprecation")
         Expression answer = SimpleBackwardsCompatibleParser.parseExpression(expression, allowEscape);

Added: camel/trunk/camel-core/src/main/java/org/apache/camel/support/LanguageSupport.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/support/LanguageSupport.java?rev=1440898&view=auto
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/support/LanguageSupport.java (added)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/support/LanguageSupport.java Thu Jan 31 10:30:14 2013
@@ -0,0 +1,75 @@
+/**
+ * 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 java.io.InputStream;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.CamelContextAware;
+import org.apache.camel.ExpressionIllegalSyntaxException;
+import org.apache.camel.IsSingleton;
+import org.apache.camel.spi.Language;
+import org.apache.camel.util.IOHelper;
+import org.apache.camel.util.ResourceHelper;
+
+/**
+ * Base language for {@link Language} implementations.
+ */
+public abstract class LanguageSupport implements Language, IsSingleton, CamelContextAware {
+
+    private CamelContext camelContext;
+
+    public CamelContext getCamelContext() {
+        return camelContext;
+    }
+
+    public void setCamelContext(CamelContext camelContext) {
+        this.camelContext = camelContext;
+    }
+
+    @Override
+    public boolean isSingleton() {
+        return true;
+    }
+
+    /**
+     * Loads the resource if the given expression is referring to an external resource by using
+     * the syntax <tt>resource:scheme:uri<tt>.
+     * If the expression is not referring to a resource, then its returned as is.
+     * <p/>
+     * For example <tt>resource:classpath:mygroovy.groovy</tt> to refer to a groovy script on the classpath.
+     *
+     * @param expression the expression
+     * @return the expression
+     * @throws ExpressionIllegalSyntaxException is thrown if error loading the resource
+     */
+    protected String loadResource(String expression) throws ExpressionIllegalSyntaxException {
+        if (camelContext != null && expression.startsWith("resource:")) {
+            String uri = expression.substring(9);
+            InputStream is = null;
+            try {
+                is = ResourceHelper.resolveMandatoryResourceAsInputStream(camelContext.getClassResolver(), uri);
+                expression = camelContext.getTypeConverter().mandatoryConvertTo(String.class, is);
+            } catch (Exception e) {
+                throw new ExpressionIllegalSyntaxException(expression, e);
+            } finally {
+                IOHelper.close(is);
+            }
+        }
+        return expression;
+    }
+}

Propchange: camel/trunk/camel-core/src/main/java/org/apache/camel/support/LanguageSupport.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: camel/trunk/camel-core/src/main/java/org/apache/camel/support/LanguageSupport.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: camel/trunk/camel-core/src/test/java/org/apache/camel/language/simple/SimpleResourceTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/language/simple/SimpleResourceTest.java?rev=1440898&view=auto
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/language/simple/SimpleResourceTest.java (added)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/language/simple/SimpleResourceTest.java Thu Jan 31 10:30:14 2013
@@ -0,0 +1,48 @@
+/**
+ * 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.language.simple;
+
+import org.apache.camel.ContextTestSupport;
+import org.apache.camel.builder.RouteBuilder;
+import org.junit.Test;
+
+/**
+ *
+ */
+public class SimpleResourceTest extends ContextTestSupport {
+
+    @Test
+    public void testSimpleResource() throws Exception {
+        getMockEndpoint("mock:result").expectedBodiesReceived("The name is Camel");
+
+        template.sendBody("direct:start", "Camel");
+
+        assertMockEndpointsSatisfied();
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:start")
+                    .transform().simple("resource:classpath:mysimple.txt")
+                    .to("mock:result");
+            }
+        };
+    }
+}

Propchange: camel/trunk/camel-core/src/test/java/org/apache/camel/language/simple/SimpleResourceTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: camel/trunk/camel-core/src/test/java/org/apache/camel/language/simple/SimpleResourceTest.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: camel/trunk/camel-core/src/test/resources/mysimple.txt
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/resources/mysimple.txt?rev=1440898&view=auto
==============================================================================
--- camel/trunk/camel-core/src/test/resources/mysimple.txt (added)
+++ camel/trunk/camel-core/src/test/resources/mysimple.txt Thu Jan 31 10:30:14 2013
@@ -0,0 +1 @@
+The name is ${body}
\ No newline at end of file

Propchange: camel/trunk/camel-core/src/test/resources/mysimple.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: camel/trunk/camel-core/src/test/resources/mysimple.txt
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: camel/trunk/components/camel-groovy/src/main/java/org/apache/camel/language/groovy/GroovyLanguage.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-groovy/src/main/java/org/apache/camel/language/groovy/GroovyLanguage.java?rev=1440898&r1=1440897&r2=1440898&view=diff
==============================================================================
--- camel/trunk/components/camel-groovy/src/main/java/org/apache/camel/language/groovy/GroovyLanguage.java (original)
+++ camel/trunk/components/camel-groovy/src/main/java/org/apache/camel/language/groovy/GroovyLanguage.java Thu Jan 31 10:30:14 2013
@@ -16,13 +16,12 @@
  */
 package org.apache.camel.language.groovy;
 
-import org.apache.camel.IsSingleton;
-import org.apache.camel.spi.Language;
+import org.apache.camel.support.LanguageSupport;
 
 /**
  * @version 
  */
-public class GroovyLanguage implements Language, IsSingleton {
+public class GroovyLanguage extends LanguageSupport {
 
     public static GroovyExpression groovy(String expression) {
         return new GroovyLanguage().createExpression(expression);
@@ -33,10 +32,8 @@ public class GroovyLanguage implements L
     }
 
     public GroovyExpression createExpression(String expression) {
+        expression = loadResource(expression);
         return new GroovyExpression(expression);
     }
 
-    public boolean isSingleton() {
-        return true;
-    }
 }

Added: camel/trunk/components/camel-groovy/src/test/java/org/apache/camel/language/groovy/GroovyResourceTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-groovy/src/test/java/org/apache/camel/language/groovy/GroovyResourceTest.java?rev=1440898&view=auto
==============================================================================
--- camel/trunk/components/camel-groovy/src/test/java/org/apache/camel/language/groovy/GroovyResourceTest.java (added)
+++ camel/trunk/components/camel-groovy/src/test/java/org/apache/camel/language/groovy/GroovyResourceTest.java Thu Jan 31 10:30:14 2013
@@ -0,0 +1,48 @@
+/**
+ * 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.language.groovy;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Test;
+
+/**
+ *
+ */
+public class GroovyResourceTest extends CamelTestSupport {
+
+    @Test
+    public void testGroovyResource() throws Exception {
+        getMockEndpoint("mock:result").expectedBodiesReceived("The result is 6");
+
+        template.sendBody("direct:start", 3);
+
+        assertMockEndpointsSatisfied();
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:start")
+                    .transform().groovy("resource:classpath:mygroovy.groovy")
+                    .to("mock:result");
+            }
+        };
+    }
+}

Propchange: camel/trunk/components/camel-groovy/src/test/java/org/apache/camel/language/groovy/GroovyResourceTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: camel/trunk/components/camel-groovy/src/test/java/org/apache/camel/language/groovy/GroovyResourceTest.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: camel/trunk/components/camel-groovy/src/test/resources/mygroovy.groovy
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-groovy/src/test/resources/mygroovy.groovy?rev=1440898&view=auto
==============================================================================
--- camel/trunk/components/camel-groovy/src/test/resources/mygroovy.groovy (added)
+++ camel/trunk/components/camel-groovy/src/test/resources/mygroovy.groovy Thu Jan 31 10:30:14 2013
@@ -0,0 +1,2 @@
+// this is code comments
+return "The result is " + body * 2
\ No newline at end of file

Modified: camel/trunk/components/camel-josql/src/main/java/org/apache/camel/language/sql/SqlLanguage.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-josql/src/main/java/org/apache/camel/language/sql/SqlLanguage.java?rev=1440898&r1=1440897&r2=1440898&view=diff
==============================================================================
--- camel/trunk/components/camel-josql/src/main/java/org/apache/camel/language/sql/SqlLanguage.java (original)
+++ camel/trunk/components/camel-josql/src/main/java/org/apache/camel/language/sql/SqlLanguage.java Thu Jan 31 10:30:14 2013
@@ -17,42 +17,38 @@
 package org.apache.camel.language.sql;
 
 import org.apache.camel.Expression;
-import org.apache.camel.IsSingleton;
+import org.apache.camel.ExpressionIllegalSyntaxException;
 import org.apache.camel.Predicate;
-import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.builder.sql.SqlBuilder;
-import org.apache.camel.spi.Language;
+import org.apache.camel.support.LanguageSupport;
 import org.josql.QueryParseException;
 
 /**
- * XPath language.
+ * JoSQL language.
  *
  * @version 
  */
-public class SqlLanguage implements Language, IsSingleton {
+public class SqlLanguage extends LanguageSupport {
    
     public Predicate createPredicate(String expression) {
+        expression = loadResource(expression);
         try {
             SqlBuilder builder = SqlBuilder.sql(expression);
             return builder;
         } catch (QueryParseException e) {
-            RuntimeException exception = new RuntimeCamelException("Canont create the SqlBuilder.", e);
-            throw exception;
+            throw new ExpressionIllegalSyntaxException(expression, e);
         }
         
     }
 
     public Expression createExpression(String expression) {
+        expression = loadResource(expression);
         try {
             SqlBuilder builder = SqlBuilder.sql(expression);
             return builder;
         } catch (QueryParseException e) {
-            RuntimeException exception = new RuntimeCamelException("Canont create the SqlBuilder.", e);
-            throw exception;
+            throw new ExpressionIllegalSyntaxException(expression, e);
         }
     }
     
-    public boolean isSingleton() {
-        return true;
-    }
 }

Modified: camel/trunk/components/camel-josql/src/test/java/org/apache/camel/builder/sql/Person.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-josql/src/test/java/org/apache/camel/builder/sql/Person.java?rev=1440898&r1=1440897&r2=1440898&view=diff
==============================================================================
--- camel/trunk/components/camel-josql/src/test/java/org/apache/camel/builder/sql/Person.java (original)
+++ camel/trunk/components/camel-josql/src/test/java/org/apache/camel/builder/sql/Person.java Thu Jan 31 10:30:14 2013
@@ -23,7 +23,6 @@ public class Person {
     private String name;
     private String city;
 
-
     public Person() {
     }
 

Added: camel/trunk/components/camel-josql/src/test/java/org/apache/camel/lanaguage/sql/SqlResourceTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-josql/src/test/java/org/apache/camel/lanaguage/sql/SqlResourceTest.java?rev=1440898&view=auto
==============================================================================
--- camel/trunk/components/camel-josql/src/test/java/org/apache/camel/lanaguage/sql/SqlResourceTest.java (added)
+++ camel/trunk/components/camel-josql/src/test/java/org/apache/camel/lanaguage/sql/SqlResourceTest.java Thu Jan 31 10:30:14 2013
@@ -0,0 +1,68 @@
+/**
+ * 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.lanaguage.sql;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.builder.sql.Person;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Test;
+
+/**
+ *
+ */
+public class SqlResourceTest extends CamelTestSupport {
+
+    @Test
+    public void testSqlResource() throws Exception {
+        getMockEndpoint("mock:result").expectedMessageCount(1);
+        getMockEndpoint("mock:result").expectedHeaderReceived("foo", 123);
+        getMockEndpoint("mock:name").expectedBodiesReceived("Hiram");
+
+        template.sendBody("direct:start", createBody());
+
+        assertMockEndpointsSatisfied();
+    }
+
+    @SuppressWarnings("unchecked")
+    private List createBody() {
+        List list = new ArrayList();
+        list.add(new Person("James", "London"));
+        list.add(new Person("Guillaume", "Normandy"));
+        list.add(new Person("Hiram", "Tampa"));
+        list.add(new Person("Rob", "London"));
+        return list;
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:start")
+                        .setHeader("foo", constant(123))
+                        .transform().sql("resource:classpath:myjosql.txt")
+                        .to("mock:result")
+                        // the result from josql is a spreadsheet eg list<list> so we grab the 1st data
+                        .transform().simple("${body[0][0]}")
+                        .to("mock:name");
+            }
+        };
+    }
+}

Propchange: camel/trunk/components/camel-josql/src/test/java/org/apache/camel/lanaguage/sql/SqlResourceTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: camel/trunk/components/camel-josql/src/test/java/org/apache/camel/lanaguage/sql/SqlResourceTest.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: camel/trunk/components/camel-josql/src/test/resources/myjosql.txt
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-josql/src/test/resources/myjosql.txt?rev=1440898&view=auto
==============================================================================
--- camel/trunk/components/camel-josql/src/test/resources/myjosql.txt (added)
+++ camel/trunk/components/camel-josql/src/test/resources/myjosql.txt Thu Jan 31 10:30:14 2013
@@ -0,0 +1 @@
+SELECT name FROM org.apache.camel.builder.sql.Person where city = 'Tampa'
\ No newline at end of file

Propchange: camel/trunk/components/camel-josql/src/test/resources/myjosql.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: camel/trunk/components/camel-josql/src/test/resources/myjosql.txt
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: camel/trunk/components/camel-juel/src/main/java/org/apache/camel/language/juel/JuelExpression.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-juel/src/main/java/org/apache/camel/language/juel/JuelExpression.java?rev=1440898&r1=1440897&r2=1440898&view=diff
==============================================================================
--- camel/trunk/components/camel-juel/src/main/java/org/apache/camel/language/juel/JuelExpression.java (original)
+++ camel/trunk/components/camel-juel/src/main/java/org/apache/camel/language/juel/JuelExpression.java Thu Jan 31 10:30:14 2013
@@ -62,18 +62,16 @@ public class JuelExpression extends Expr
     }
 
     public <T> T evaluate(Exchange exchange, Class<T> tClass) {
-        // TODO we could use caching here but then we'd have possible concurrency issues
-        // so lets assume that the provider caches
-        
         // Create (if needed) the ExpressionFactory first from the CamelContext using FactoryFinder
         ExpressionFactory factory = getExpressionFactory(exchange.getContext());
         ELContext context = populateContext(createContext(), exchange);
         ValueExpression valueExpression = factory.createValueExpression(context, expression, type);
         Object value = valueExpression.getValue(context);
+        LOG.trace("Value returned {}", value);
         return exchange.getContext().getTypeConverter().convertTo(tClass, value);
     }
 
-    public ExpressionFactory getExpressionFactory(CamelContext context) {
+    public synchronized ExpressionFactory getExpressionFactory(CamelContext context) {
         if (expressionFactory == null && context != null) {
             try {
                 FactoryFinder finder = context.getFactoryFinder("META-INF/services/org/apache/camel/language/");
@@ -94,7 +92,7 @@ public class JuelExpression extends Expr
         return getExpressionFactory();
     }
 
-    public ExpressionFactory getExpressionFactory() {
+    public synchronized ExpressionFactory getExpressionFactory() {
         if (expressionFactory == null) {
             expressionFactory = new ExpressionFactoryImpl();
         }
@@ -126,7 +124,6 @@ public class JuelExpression extends Expr
     protected ELContext createContext() {
         ELResolver resolver = new CompositeELResolver() {
             {
-                //add(methodResolver);
                 add(new ArrayELResolver(false));
                 add(new ListELResolver(false));
                 add(new MapELResolver(false));

Modified: camel/trunk/components/camel-juel/src/main/java/org/apache/camel/language/juel/JuelLanguage.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-juel/src/main/java/org/apache/camel/language/juel/JuelLanguage.java?rev=1440898&r1=1440897&r2=1440898&view=diff
==============================================================================
--- camel/trunk/components/camel-juel/src/main/java/org/apache/camel/language/juel/JuelLanguage.java (original)
+++ camel/trunk/components/camel-juel/src/main/java/org/apache/camel/language/juel/JuelLanguage.java Thu Jan 31 10:30:14 2013
@@ -18,20 +18,22 @@ package org.apache.camel.language.juel;
 
 import org.apache.camel.Expression;
 import org.apache.camel.Predicate;
-import org.apache.camel.spi.Language;
+import org.apache.camel.support.LanguageSupport;
 
 /**
  * The <a href="http://camel.apache.org/el.html">EL Language from JSP and JSF</a>
- * using the <a href="http://camel.apache.org/juel.html">JUEL library</a>
  *
  * @version 
  */
-public class JuelLanguage implements Language {
+public class JuelLanguage extends LanguageSupport {
+
     public Predicate createPredicate(String expression) {
+        expression = loadResource(expression);
         return new JuelExpression(expression, Boolean.class);
     }
 
     public Expression createExpression(String expression) {
+        expression = loadResource(expression);
         return new JuelExpression(expression, Object.class);
     }
 }

Added: camel/trunk/components/camel-juel/src/test/java/org/apache/camel/language/juel/JuelResourceTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-juel/src/test/java/org/apache/camel/language/juel/JuelResourceTest.java?rev=1440898&view=auto
==============================================================================
--- camel/trunk/components/camel-juel/src/test/java/org/apache/camel/language/juel/JuelResourceTest.java (added)
+++ camel/trunk/components/camel-juel/src/test/java/org/apache/camel/language/juel/JuelResourceTest.java Thu Jan 31 10:30:14 2013
@@ -0,0 +1,48 @@
+/**
+ * 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.language.juel;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Test;
+
+/**
+ *
+ */
+public class JuelResourceTest extends CamelTestSupport {
+
+    @Test
+    public void testJuelResource() throws Exception {
+        getMockEndpoint("mock:result").expectedBodiesReceived("The name is Camel");
+
+        template.sendBody("direct:start", "Camel");
+
+        assertMockEndpointsSatisfied();
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:start")
+                    .transform().el("resource:classpath:juel.txt")
+                    .to("mock:result");
+            }
+        };
+    }
+}

Propchange: camel/trunk/components/camel-juel/src/test/java/org/apache/camel/language/juel/JuelResourceTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: camel/trunk/components/camel-juel/src/test/java/org/apache/camel/language/juel/JuelResourceTest.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: camel/trunk/components/camel-juel/src/test/resources/juel.txt
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-juel/src/test/resources/juel.txt?rev=1440898&view=auto
==============================================================================
--- camel/trunk/components/camel-juel/src/test/resources/juel.txt (added)
+++ camel/trunk/components/camel-juel/src/test/resources/juel.txt Thu Jan 31 10:30:14 2013
@@ -0,0 +1 @@
+The name is ${in.body}
\ No newline at end of file

Propchange: camel/trunk/components/camel-juel/src/test/resources/juel.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: camel/trunk/components/camel-juel/src/test/resources/juel.txt
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: camel/trunk/components/camel-jxpath/src/main/java/org/apache/camel/language/jxpath/JXPathLanguage.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jxpath/src/main/java/org/apache/camel/language/jxpath/JXPathLanguage.java?rev=1440898&r1=1440897&r2=1440898&view=diff
==============================================================================
--- camel/trunk/components/camel-jxpath/src/main/java/org/apache/camel/language/jxpath/JXPathLanguage.java (original)
+++ camel/trunk/components/camel-jxpath/src/main/java/org/apache/camel/language/jxpath/JXPathLanguage.java Thu Jan 31 10:30:14 2013
@@ -17,25 +17,24 @@
 package org.apache.camel.language.jxpath;
 
 import org.apache.camel.Expression;
-import org.apache.camel.IsSingleton;
 import org.apache.camel.Predicate;
 import org.apache.camel.spi.Language;
+import org.apache.camel.support.LanguageSupport;
 
 /**
  * <a href="http://commons.apache.org/jxpath/">JXPath</a> {@link Language}
  * provider
  */
-public class JXPathLanguage implements Language, IsSingleton {
+public class JXPathLanguage extends LanguageSupport {
 
     public Expression createExpression(String expression) {
+        expression = loadResource(expression);
         return new JXPathExpression(expression, Object.class);
     }
 
     public Predicate createPredicate(String predicate) {
+        predicate = loadResource(predicate);
         return new JXPathExpression(predicate, Boolean.class);
     }
 
-    public boolean isSingleton() {
-        return true;
-    }
 }

Added: camel/trunk/components/camel-jxpath/src/test/java/org/apache/camel/language/jxpath/JXPathResourceTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jxpath/src/test/java/org/apache/camel/language/jxpath/JXPathResourceTest.java?rev=1440898&view=auto
==============================================================================
--- camel/trunk/components/camel-jxpath/src/test/java/org/apache/camel/language/jxpath/JXPathResourceTest.java (added)
+++ camel/trunk/components/camel-jxpath/src/test/java/org/apache/camel/language/jxpath/JXPathResourceTest.java Thu Jan 31 10:30:14 2013
@@ -0,0 +1,48 @@
+/**
+ * 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.language.jxpath;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Test;
+
+/**
+ *
+ */
+public class JXPathResourceTest extends CamelTestSupport {
+
+    @Test
+    public void testJXPathResource() throws Exception {
+        getMockEndpoint("mock:result").expectedBodiesReceived("James");
+
+        template.sendBody("direct:start", new PersonBean("James", "London"));
+
+        assertMockEndpointsSatisfied();
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:start")
+                        .transform().jxpath("resource:classpath:myjxpath.txt")
+                        .to("mock:result");
+            }
+        };
+    }
+}

Propchange: camel/trunk/components/camel-jxpath/src/test/java/org/apache/camel/language/jxpath/JXPathResourceTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: camel/trunk/components/camel-jxpath/src/test/java/org/apache/camel/language/jxpath/JXPathResourceTest.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: camel/trunk/components/camel-jxpath/src/test/resources/myjxpath.txt
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jxpath/src/test/resources/myjxpath.txt?rev=1440898&view=auto
==============================================================================
--- camel/trunk/components/camel-jxpath/src/test/resources/myjxpath.txt (added)
+++ camel/trunk/components/camel-jxpath/src/test/resources/myjxpath.txt Thu Jan 31 10:30:14 2013
@@ -0,0 +1 @@
+in/body/name
\ No newline at end of file

Propchange: camel/trunk/components/camel-jxpath/src/test/resources/myjxpath.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: camel/trunk/components/camel-jxpath/src/test/resources/myjxpath.txt
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: camel/trunk/components/camel-mvel/src/main/java/org/apache/camel/language/mvel/MvelLanguage.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-mvel/src/main/java/org/apache/camel/language/mvel/MvelLanguage.java?rev=1440898&r1=1440897&r2=1440898&view=diff
==============================================================================
--- camel/trunk/components/camel-mvel/src/main/java/org/apache/camel/language/mvel/MvelLanguage.java (original)
+++ camel/trunk/components/camel-mvel/src/main/java/org/apache/camel/language/mvel/MvelLanguage.java Thu Jan 31 10:30:14 2013
@@ -17,26 +17,25 @@
 package org.apache.camel.language.mvel;
 
 import org.apache.camel.Expression;
-import org.apache.camel.IsSingleton;
 import org.apache.camel.Predicate;
 import org.apache.camel.spi.Language;
+import org.apache.camel.support.LanguageSupport;
 
 /**
  * An <a href="http://mvel.codehaus.org/">MVEL</a> {@link Language} plugin
  * 
  * @version 
  */
-public class MvelLanguage implements Language, IsSingleton {
+public class MvelLanguage extends LanguageSupport {
 
     public Predicate createPredicate(String expression) {
+        expression = loadResource(expression);
         return new MvelExpression(this, expression, Boolean.class);
     }
 
     public Expression createExpression(String expression) {
+        expression = loadResource(expression);
         return new MvelExpression(this, expression, Object.class);
     }
 
-    public boolean isSingleton() {
-        return true;
-    }
 }

Added: camel/trunk/components/camel-mvel/src/test/java/org/apache/camel/language/mvel/MvelResourceTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-mvel/src/test/java/org/apache/camel/language/mvel/MvelResourceTest.java?rev=1440898&view=auto
==============================================================================
--- camel/trunk/components/camel-mvel/src/test/java/org/apache/camel/language/mvel/MvelResourceTest.java (added)
+++ camel/trunk/components/camel-mvel/src/test/java/org/apache/camel/language/mvel/MvelResourceTest.java Thu Jan 31 10:30:14 2013
@@ -0,0 +1,48 @@
+/**
+ * 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.language.mvel;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Test;
+
+/**
+ *
+ */
+public class MvelResourceTest extends CamelTestSupport {
+
+    @Test
+    public void testMvelResource() throws Exception {
+        getMockEndpoint("mock:result").expectedBodiesReceived("The result is 6");
+
+        template.sendBody("direct:start", 3);
+
+        assertMockEndpointsSatisfied();
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:start")
+                    .transform().mvel("resource:classpath:mymvel.txt")
+                    .to("mock:result");
+            }
+        };
+    }
+}

Propchange: camel/trunk/components/camel-mvel/src/test/java/org/apache/camel/language/mvel/MvelResourceTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: camel/trunk/components/camel-mvel/src/test/java/org/apache/camel/language/mvel/MvelResourceTest.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: camel/trunk/components/camel-mvel/src/test/resources/mymvel.txt
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-mvel/src/test/resources/mymvel.txt?rev=1440898&view=auto
==============================================================================
--- camel/trunk/components/camel-mvel/src/test/resources/mymvel.txt (added)
+++ camel/trunk/components/camel-mvel/src/test/resources/mymvel.txt Thu Jan 31 10:30:14 2013
@@ -0,0 +1,19 @@
+// ------------------------------------------------------------------------
+// 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.
+// ------------------------------------------------------------------------
+
+// this is a code comment
+return "The result is " + request.body * 2;
\ No newline at end of file

Propchange: camel/trunk/components/camel-mvel/src/test/resources/mymvel.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: camel/trunk/components/camel-mvel/src/test/resources/mymvel.txt
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: camel/trunk/components/camel-ognl/src/main/java/org/apache/camel/language/ognl/OgnlExpression.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-ognl/src/main/java/org/apache/camel/language/ognl/OgnlExpression.java?rev=1440898&r1=1440897&r2=1440898&view=diff
==============================================================================
--- camel/trunk/components/camel-ognl/src/main/java/org/apache/camel/language/ognl/OgnlExpression.java (original)
+++ camel/trunk/components/camel-ognl/src/main/java/org/apache/camel/language/ognl/OgnlExpression.java Thu Jan 31 10:30:14 2013
@@ -25,17 +25,19 @@ import org.apache.camel.ExpressionIllega
 import org.apache.camel.support.ExpressionSupport;
 
 /**
- * An <a href="http://www.ognl.org/">OGNL</a> {@link Expression}
+ * An <a href="http://www.ognl.org/">OGNL</a> {@link org.apache.camel.Expression}
  *
  * @version 
  */
 public class OgnlExpression extends ExpressionSupport {
 
+    private final OgnlLanguage language;
     private final String expressionString;
     private final Class<?> type;
     private Object expression;
 
     public OgnlExpression(OgnlLanguage language, String expressionString, Class<?> type) {
+        this.language = language;
         this.expressionString = expressionString;
         this.type = type;
         try {
@@ -50,8 +52,6 @@ public class OgnlExpression extends Expr
     }
 
     public <T> T evaluate(Exchange exchange, Class<T> tClass) {
-        // TODO we could use caching here but then we'd have possible
-        // concurrency issues so lets assume that the provider caches
         OgnlContext oglContext = new OgnlContext();
         try {
             Object value = Ognl.getValue(expression, oglContext, new RootObject(exchange));

Modified: camel/trunk/components/camel-ognl/src/main/java/org/apache/camel/language/ognl/OgnlLanguage.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-ognl/src/main/java/org/apache/camel/language/ognl/OgnlLanguage.java?rev=1440898&r1=1440897&r2=1440898&view=diff
==============================================================================
--- camel/trunk/components/camel-ognl/src/main/java/org/apache/camel/language/ognl/OgnlLanguage.java (original)
+++ camel/trunk/components/camel-ognl/src/main/java/org/apache/camel/language/ognl/OgnlLanguage.java Thu Jan 31 10:30:14 2013
@@ -17,26 +17,24 @@
 package org.apache.camel.language.ognl;
 
 import org.apache.camel.Expression;
-import org.apache.camel.IsSingleton;
 import org.apache.camel.Predicate;
 import org.apache.camel.spi.Language;
+import org.apache.camel.support.LanguageSupport;
 
 /**
  * An <a href="http://www.ognl.org/">OGNL</a> {@link Language} plugin
  *
  * @version 
  */
-public class OgnlLanguage implements Language, IsSingleton {
+public class OgnlLanguage extends LanguageSupport {
 
     public Predicate createPredicate(String expression) {
+        expression = loadResource(expression);
         return new OgnlExpression(this, expression, Boolean.class);
     }
 
     public Expression createExpression(String expression) {
+        expression = loadResource(expression);
         return new OgnlExpression(this, expression, Object.class);
     }
-
-    public boolean isSingleton() {
-        return true;
-    }
 }

Added: camel/trunk/components/camel-ognl/src/test/java/org/apache/camel/language/ognl/OgnlResourceTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-ognl/src/test/java/org/apache/camel/language/ognl/OgnlResourceTest.java?rev=1440898&view=auto
==============================================================================
--- camel/trunk/components/camel-ognl/src/test/java/org/apache/camel/language/ognl/OgnlResourceTest.java (added)
+++ camel/trunk/components/camel-ognl/src/test/java/org/apache/camel/language/ognl/OgnlResourceTest.java Thu Jan 31 10:30:14 2013
@@ -0,0 +1,48 @@
+/**
+ * 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.language.ognl;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Test;
+
+/**
+ *
+ */
+public class OgnlResourceTest extends CamelTestSupport {
+
+    @Test
+    public void testOgnllResource() throws Exception {
+        getMockEndpoint("mock:result").expectedBodiesReceived(7);
+
+        template.sendBody("direct:start", 3);
+
+        assertMockEndpointsSatisfied();
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:start")
+                    .transform().ognl("resource:classpath:myognl.txt")
+                    .to("mock:result");
+            }
+        };
+    }
+}
\ No newline at end of file

Propchange: camel/trunk/components/camel-ognl/src/test/java/org/apache/camel/language/ognl/OgnlResourceTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: camel/trunk/components/camel-ognl/src/test/java/org/apache/camel/language/ognl/OgnlResourceTest.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: camel/trunk/components/camel-ognl/src/test/resources/myognl.txt
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-ognl/src/test/resources/myognl.txt?rev=1440898&view=auto
==============================================================================
--- camel/trunk/components/camel-ognl/src/test/resources/myognl.txt (added)
+++ camel/trunk/components/camel-ognl/src/test/resources/myognl.txt Thu Jan 31 10:30:14 2013
@@ -0,0 +1 @@
+request.body * 2 + 1
\ No newline at end of file

Propchange: camel/trunk/components/camel-ognl/src/test/resources/myognl.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: camel/trunk/components/camel-ognl/src/test/resources/myognl.txt
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: camel/trunk/components/camel-script/src/main/java/org/apache/camel/builder/script/ScriptLanguage.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-script/src/main/java/org/apache/camel/builder/script/ScriptLanguage.java?rev=1440898&r1=1440897&r2=1440898&view=diff
==============================================================================
--- camel/trunk/components/camel-script/src/main/java/org/apache/camel/builder/script/ScriptLanguage.java (original)
+++ camel/trunk/components/camel-script/src/main/java/org/apache/camel/builder/script/ScriptLanguage.java Thu Jan 31 10:30:14 2013
@@ -17,14 +17,13 @@
 package org.apache.camel.builder.script;
 
 import org.apache.camel.Expression;
-import org.apache.camel.IsSingleton;
 import org.apache.camel.Predicate;
-import org.apache.camel.spi.Language;
+import org.apache.camel.support.LanguageSupport;
 
 /**
  * @version 
  */
-public class ScriptLanguage implements Language, IsSingleton {
+public class ScriptLanguage extends LanguageSupport {
     private final String language;
 
     public ScriptLanguage(String language) {
@@ -32,14 +31,13 @@ public class ScriptLanguage implements L
     }
 
     public Predicate createPredicate(String expression) {
+        expression = loadResource(expression);
         return new ScriptBuilder(language, expression);
     }
 
     public Expression createExpression(String expression) {
+        expression = loadResource(expression);
         return new ScriptBuilder(language, expression);
     }
 
-    public boolean isSingleton() {
-        return true;
-    }
 }

Added: camel/trunk/components/camel-script/src/test/java/org/apache/camel/language/script/ScriptLanguageResourceTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-script/src/test/java/org/apache/camel/language/script/ScriptLanguageResourceTest.java?rev=1440898&view=auto
==============================================================================
--- camel/trunk/components/camel-script/src/test/java/org/apache/camel/language/script/ScriptLanguageResourceTest.java (added)
+++ camel/trunk/components/camel-script/src/test/java/org/apache/camel/language/script/ScriptLanguageResourceTest.java Thu Jan 31 10:30:14 2013
@@ -0,0 +1,54 @@
+/**
+ * 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.language.script;
+
+import org.apache.camel.ScriptTestHelper;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Test;
+
+/**
+ *
+ */
+public class ScriptLanguageResourceTest extends CamelTestSupport {
+
+    @Test
+    public void testScriptResource() throws Exception {
+        if (!ScriptTestHelper.canRunTestOnThisPlatform()) {
+            return;
+        }
+
+        getMockEndpoint("mock:result").expectedBodiesReceived(7);
+
+        template.sendBody("direct:start", 3);
+
+        assertMockEndpointsSatisfied();
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:start")
+                    .transform().javaScript("resource:classpath:myjavascript.js")
+                    .to("mock:result");
+            }
+        };
+    }
+
+}

Propchange: camel/trunk/components/camel-script/src/test/java/org/apache/camel/language/script/ScriptLanguageResourceTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: camel/trunk/components/camel-script/src/test/java/org/apache/camel/language/script/ScriptLanguageResourceTest.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: camel/trunk/components/camel-script/src/test/resources/myjavascript.js
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-script/src/test/resources/myjavascript.js?rev=1440898&view=auto
==============================================================================
--- camel/trunk/components/camel-script/src/test/resources/myjavascript.js (added)
+++ camel/trunk/components/camel-script/src/test/resources/myjavascript.js Thu Jan 31 10:30:14 2013
@@ -0,0 +1 @@
+body * 2 + 1
\ No newline at end of file

Propchange: camel/trunk/components/camel-script/src/test/resources/myjavascript.js
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: camel/trunk/components/camel-spring/src/main/java/org/apache/camel/language/spel/RootObject.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/language/spel/RootObject.java?rev=1440898&r1=1440897&r2=1440898&view=diff
==============================================================================
--- camel/trunk/components/camel-spring/src/main/java/org/apache/camel/language/spel/RootObject.java (original)
+++ camel/trunk/components/camel-spring/src/main/java/org/apache/camel/language/spel/RootObject.java Thu Jan 31 10:30:14 2013
@@ -45,6 +45,10 @@ public final class RootObject {
         return exchange.getExchangeId();
     }
 
+    public Object getBody() {
+        return exchange.getIn().getBody();
+    }
+
     public Message getRequest() {
         return exchange.getIn();
     }

Modified: camel/trunk/components/camel-spring/src/main/java/org/apache/camel/language/spel/SpelLanguage.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/language/spel/SpelLanguage.java?rev=1440898&r1=1440897&r2=1440898&view=diff
==============================================================================
--- camel/trunk/components/camel-spring/src/main/java/org/apache/camel/language/spel/SpelLanguage.java (original)
+++ camel/trunk/components/camel-spring/src/main/java/org/apache/camel/language/spel/SpelLanguage.java Thu Jan 31 10:30:14 2013
@@ -17,24 +17,23 @@
 package org.apache.camel.language.spel;
 
 import org.apache.camel.Expression;
-import org.apache.camel.IsSingleton;
 import org.apache.camel.Predicate;
 import org.apache.camel.spi.Language;
+import org.apache.camel.support.LanguageSupport;
 
 /**
  * A Spring Expression {@link Language} plugin
  */
-public class SpelLanguage implements Language, IsSingleton {
+public class SpelLanguage extends LanguageSupport {
 
     public Predicate createPredicate(String expression) {
+        expression = loadResource(expression);
         return new SpelExpression(expression, Boolean.class);
     }
 
     public Expression createExpression(String expression) {
+        expression = loadResource(expression);
         return new SpelExpression(expression, Object.class);
     }
 
-    public boolean isSingleton() {
-        return true;
-    }
 }

Added: camel/trunk/components/camel-spring/src/test/java/org/apache/camel/language/spel/SpelResourceTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/language/spel/SpelResourceTest.java?rev=1440898&view=auto
==============================================================================
--- camel/trunk/components/camel-spring/src/test/java/org/apache/camel/language/spel/SpelResourceTest.java (added)
+++ camel/trunk/components/camel-spring/src/test/java/org/apache/camel/language/spel/SpelResourceTest.java Thu Jan 31 10:30:14 2013
@@ -0,0 +1,48 @@
+/**
+ * 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.language.spel;
+
+import org.apache.camel.ContextTestSupport;
+import org.apache.camel.builder.RouteBuilder;
+import org.junit.Test;
+
+/**
+ *
+ */
+public class SpelResourceTest extends ContextTestSupport {
+
+    @Test
+    public void testSpelResource() throws Exception {
+        getMockEndpoint("mock:result").expectedBodiesReceived(7);
+
+        template.sendBody("direct:start", 3);
+
+        assertMockEndpointsSatisfied();
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:start")
+                    .transform().spel("resource:classpath:myspel.txt")
+                    .to("mock:result");
+            }
+        };
+    }
+}

Propchange: camel/trunk/components/camel-spring/src/test/java/org/apache/camel/language/spel/SpelResourceTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: camel/trunk/components/camel-spring/src/test/java/org/apache/camel/language/spel/SpelResourceTest.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: camel/trunk/components/camel-spring/src/test/resources/myspel.txt
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/resources/myspel.txt?rev=1440898&view=auto
==============================================================================
--- camel/trunk/components/camel-spring/src/test/resources/myspel.txt (added)
+++ camel/trunk/components/camel-spring/src/test/resources/myspel.txt Thu Jan 31 10:30:14 2013
@@ -0,0 +1 @@
+#{body * 2 + 1}
\ No newline at end of file

Propchange: camel/trunk/components/camel-spring/src/test/resources/myspel.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: camel/trunk/components/camel-spring/src/test/resources/myspel.txt
------------------------------------------------------------------------------
    svn:mime-type = text/plain