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/23 12:20:03 UTC
svn commit: r521675 - in /activemq/camel/trunk: ./ camel-script/
camel-script/src/ camel-script/src/main/ camel-script/src/main/java/
camel-script/src/main/java/org/ camel-script/src/main/java/org/apache/
camel-script/src/main/java/org/apache/camel/ ca...
Author: jstrachan
Date: Fri Mar 23 04:20:01 2007
New Revision: 521675
URL: http://svn.apache.org/viewvc?view=rev&rev=521675
Log:
added a script module for JSR 223 support; also tidied up the spring dependency pom stuff
Added:
activemq/camel/trunk/camel-script/
activemq/camel/trunk/camel-script/pom.xml (with props)
activemq/camel/trunk/camel-script/src/
activemq/camel/trunk/camel-script/src/main/
activemq/camel/trunk/camel-script/src/main/java/
activemq/camel/trunk/camel-script/src/main/java/org/
activemq/camel/trunk/camel-script/src/main/java/org/apache/
activemq/camel/trunk/camel-script/src/main/java/org/apache/camel/
activemq/camel/trunk/camel-script/src/main/java/org/apache/camel/builder/
activemq/camel/trunk/camel-script/src/main/java/org/apache/camel/builder/script/
activemq/camel/trunk/camel-script/src/main/java/org/apache/camel/builder/script/ScriptBuilder.java (with props)
activemq/camel/trunk/camel-script/src/main/java/org/apache/camel/builder/script/ScriptEvaluationException.java (with props)
activemq/camel/trunk/camel-script/src/main/resources/
activemq/camel/trunk/camel-script/src/main/resources/META-INF/
activemq/camel/trunk/camel-script/src/main/resources/META-INF/services/
activemq/camel/trunk/camel-script/src/main/resources/META-INF/services/org/
activemq/camel/trunk/camel-script/src/main/resources/META-INF/services/org/apache/
activemq/camel/trunk/camel-script/src/main/resources/META-INF/services/org/apache/camel/
activemq/camel/trunk/camel-script/src/main/resources/META-INF/services/org/apache/camel/EndpointResolver/
activemq/camel/trunk/camel-script/src/test/
activemq/camel/trunk/camel-script/src/test/java/
activemq/camel/trunk/camel-script/src/test/java/org/
activemq/camel/trunk/camel-script/src/test/java/org/apache/
activemq/camel/trunk/camel-script/src/test/java/org/apache/camel/
activemq/camel/trunk/camel-script/src/test/java/org/apache/camel/builder/
activemq/camel/trunk/camel-script/src/test/java/org/apache/camel/builder/script/
activemq/camel/trunk/camel-script/src/test/java/org/apache/camel/builder/script/GroovyTest.java (with props)
activemq/camel/trunk/camel-script/src/test/java/org/apache/camel/builder/script/Jsr223Test.java (with props)
activemq/camel/trunk/camel-script/src/test/java/org/apache/camel/builder/script/ScriptTestSupport.java (with props)
activemq/camel/trunk/camel-script/src/test/resources/
Modified:
activemq/camel/trunk/camel-spring/pom.xml
activemq/camel/trunk/pom.xml
Added: activemq/camel/trunk/camel-script/pom.xml
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-script/pom.xml?view=auto&rev=521675
==============================================================================
--- activemq/camel/trunk/camel-script/pom.xml (added)
+++ activemq/camel/trunk/camel-script/pom.xml Fri Mar 23 04:20:01 2007
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+ 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.
+-->
+
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0">
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.camel</groupId>
+ <artifactId>camel-parent</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </parent>
+
+ <artifactId>camel-script</artifactId>
+ <name>Camel :: Script</name>
+ <description>Camel Script support</description>
+
+ <dependencies>
+
+ <dependency>
+ <groupId>org.apache.camel</groupId>
+ <artifactId>camel-core</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging</artifactId>
+ </dependency>
+
+ <!-- TODO is there a jsr223 jar anywhere else? -->
+ <!-- TODO add this to a profile for Java 5 only -->
+ <dependency>
+ <groupId>org.livetribe</groupId>
+ <artifactId>livetribe-jsr223</artifactId>
+ <version>2.0.0</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>groovy</groupId>
+ <artifactId>groovy-all</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>com.sun.script</groupId>
+ <artifactId>groovy-engine</artifactId>
+ <version>20070112</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+
+</project>
Propchange: activemq/camel/trunk/camel-script/pom.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: activemq/camel/trunk/camel-script/pom.xml
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: activemq/camel/trunk/camel-script/pom.xml
------------------------------------------------------------------------------
svn:mime-type = text/xml
Added: activemq/camel/trunk/camel-script/src/main/java/org/apache/camel/builder/script/ScriptBuilder.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-script/src/main/java/org/apache/camel/builder/script/ScriptBuilder.java?view=auto&rev=521675
==============================================================================
--- activemq/camel/trunk/camel-script/src/main/java/org/apache/camel/builder/script/ScriptBuilder.java (added)
+++ activemq/camel/trunk/camel-script/src/main/java/org/apache/camel/builder/script/ScriptBuilder.java Fri Mar 23 04:20:01 2007
@@ -0,0 +1,459 @@
+/**
+ *
+ * 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.builder.script;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Expression;
+import org.apache.camel.Predicate;
+import org.apache.camel.Processor;
+import org.apache.camel.util.ObjectHelper;
+import org.springframework.core.io.FileSystemResource;
+import org.springframework.core.io.Resource;
+import org.springframework.core.io.UrlResource;
+
+import javax.script.Compilable;
+import javax.script.CompiledScript;
+import javax.script.ScriptContext;
+import javax.script.ScriptEngine;
+import javax.script.ScriptEngineManager;
+import javax.script.ScriptException;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.net.URL;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * A builder class for creating {@link Processor}, {@link Expression} and {@link Predicate} objects using
+ * the JSR 223 scripting engine.
+ *
+ * @version $Revision$
+ */
+public class ScriptBuilder<E extends Exchange> implements Expression<E>, Predicate<E>, Processor<E> {
+ private String scriptEngineName;
+ private Resource scriptResource;
+ private String scriptText;
+ private ScriptEngine engine;
+ private CompiledScript compiledScript;
+
+ public ScriptBuilder(String scriptEngineName, String scriptText) {
+ this.scriptEngineName = scriptEngineName;
+ this.scriptText = scriptText;
+ }
+
+ public ScriptBuilder(String scriptEngineName, Resource scriptResource) {
+ this.scriptEngineName = scriptEngineName;
+ this.scriptResource = scriptResource;
+ }
+
+ @Override
+ public String toString() {
+ return getScriptDescription();
+ }
+
+ public Object evaluate(E exchange) {
+ return evaluateScript(exchange);
+ }
+
+ public boolean matches(E exchange) {
+ return ObjectHelper.toBoolean(evaluateScript(exchange));
+ }
+
+ public void onExchange(E exchange) {
+ evaluateScript(exchange);
+ }
+
+
+ // Builder API
+ //-------------------------------------------------------------------------
+
+ /**
+ * Sets the attribute on the context so that it is available to the script as a variable
+ * in the {@link ScriptContext#ENGINE_SCOPE}
+ *
+ * @param name the name of the attribute
+ * @param value the attribute value
+ * @return this builder
+ */
+ public ScriptBuilder attribute(String name, Object value) {
+ getScriptContext().setAttribute(name, value, ScriptContext.ENGINE_SCOPE);
+ return this;
+ }
+
+
+ // Create any scripting language builder recognised by JSR 223
+ //-------------------------------------------------------------------------
+
+ /**
+ * Creates a script builder for the named language and script contents
+ *
+ * @param language the language to use for the script
+ * @param scriptText the script text to be evaluted
+ * @return the builder
+ */
+ public static ScriptBuilder script(String language, String scriptText) {
+ return new ScriptBuilder(language, scriptText);
+ }
+
+ /**
+ * Creates a script builder for the named language and script @{link Resource}
+ *
+ * @param language the language to use for the script
+ * @param scriptResource the resource used to load the script
+ * @return the builder
+ */
+ public static ScriptBuilder script(String language, Resource scriptResource) {
+ return new ScriptBuilder(language, scriptResource);
+ }
+
+ /**
+ * Creates a script builder for the named language and script @{link File}
+ *
+ * @param language the language to use for the script
+ * @param scriptFile the file used to load the script
+ * @return the builder
+ */
+ public static ScriptBuilder script(String language, File scriptFile) {
+ return new ScriptBuilder(language, new FileSystemResource(scriptFile));
+ }
+
+ /**
+ * Creates a script builder for the named language and script @{link URL}
+ *
+ * @param language the language to use for the script
+ * @param scriptURL the URL used to load the script
+ * @return the builder
+ */
+ public static ScriptBuilder script(String language, URL scriptURL) {
+ return new ScriptBuilder(language, new UrlResource(scriptURL));
+ }
+
+
+ // Groovy
+ //-------------------------------------------------------------------------
+
+ /**
+ * Creates a script builder for the groovy script contents
+ *
+ * @param scriptText the script text to be evaluted
+ * @return the builder
+ */
+ public static ScriptBuilder groovy(String scriptText) {
+ return new ScriptBuilder("groovy", scriptText);
+ }
+
+ /**
+ * Creates a script builder for the groovy script @{link Resource}
+ *
+ * @param scriptResource the resource used to load the script
+ * @return the builder
+ */
+ public static ScriptBuilder groovy(Resource scriptResource) {
+ return new ScriptBuilder("groovy", scriptResource);
+ }
+
+ /**
+ * Creates a script builder for the groovy script @{link File}
+ *
+ * @param scriptFile the file used to load the script
+ * @return the builder
+ */
+ public static ScriptBuilder groovy(File scriptFile) {
+ return new ScriptBuilder("groovy", new FileSystemResource(scriptFile));
+ }
+
+ /**
+ * Creates a script builder for the groovy script @{link URL}
+ *
+ * @param scriptURL the URL used to load the script
+ * @return the builder
+ */
+ public static ScriptBuilder groovy(URL scriptURL) {
+ return new ScriptBuilder("groovy", new UrlResource(scriptURL));
+ }
+
+
+ // JavaScript
+ //-------------------------------------------------------------------------
+
+ /**
+ * Creates a script builder for the JavaScript/ECMAScript script contents
+ *
+ * @param scriptText the script text to be evaluted
+ * @return the builder
+ */
+ public static ScriptBuilder javaScript(String scriptText) {
+ return new ScriptBuilder("js", scriptText);
+ }
+
+ /**
+ * Creates a script builder for the JavaScript/ECMAScript script @{link Resource}
+ *
+ * @param scriptResource the resource used to load the script
+ * @return the builder
+ */
+ public static ScriptBuilder javaScript(Resource scriptResource) {
+ return new ScriptBuilder("js", scriptResource);
+ }
+
+ /**
+ * Creates a script builder for the JavaScript/ECMAScript script @{link File}
+ *
+ * @param scriptFile the file used to load the script
+ * @return the builder
+ */
+ public static ScriptBuilder javaScript(File scriptFile) {
+ return new ScriptBuilder("js", new FileSystemResource(scriptFile));
+ }
+
+ /**
+ * Creates a script builder for the JavaScript/ECMAScript script @{link URL}
+ *
+ * @param scriptURL the URL used to load the script
+ * @return the builder
+ */
+ public static ScriptBuilder javaScript(URL scriptURL) {
+ return new ScriptBuilder("js", new UrlResource(scriptURL));
+ }
+
+
+
+ // PHP
+ //-------------------------------------------------------------------------
+
+ /**
+ * Creates a script builder for the PHP script contents
+ *
+ * @param scriptText the script text to be evaluted
+ * @return the builder
+ */
+ public static ScriptBuilder php(String scriptText) {
+ return new ScriptBuilder("php", scriptText);
+ }
+
+ /**
+ * Creates a script builder for the PHP script @{link Resource}
+ *
+ * @param scriptResource the resource used to load the script
+ * @return the builder
+ */
+ public static ScriptBuilder php(Resource scriptResource) {
+ return new ScriptBuilder("php", scriptResource);
+ }
+
+ /**
+ * Creates a script builder for the PHP script @{link File}
+ *
+ * @param scriptFile the file used to load the script
+ * @return the builder
+ */
+ public static ScriptBuilder php(File scriptFile) {
+ return new ScriptBuilder("php", new FileSystemResource(scriptFile));
+ }
+
+ /**
+ * Creates a script builder for the PHP script @{link URL}
+ *
+ * @param scriptURL the URL used to load the script
+ * @return the builder
+ */
+ public static ScriptBuilder php(URL scriptURL) {
+ return new ScriptBuilder("php", new UrlResource(scriptURL));
+ }
+
+
+ // JRuby
+ //-------------------------------------------------------------------------
+
+ /**
+ * Creates a script builder for the Ruby/JRuby script contents
+ *
+ * @param scriptText the script text to be evaluted
+ * @return the builder
+ */
+ public static ScriptBuilder ruby(String scriptText) {
+ return new ScriptBuilder("jruby", scriptText);
+ }
+
+ /**
+ * Creates a script builder for the Ruby/JRuby script @{link Resource}
+ *
+ * @param scriptResource the resource used to load the script
+ * @return the builder
+ */
+ public static ScriptBuilder ruby(Resource scriptResource) {
+ return new ScriptBuilder("jruby", scriptResource);
+ }
+
+ /**
+ * Creates a script builder for the Ruby/JRuby script @{link File}
+ *
+ * @param scriptFile the file used to load the script
+ * @return the builder
+ */
+ public static ScriptBuilder ruby(File scriptFile) {
+ return new ScriptBuilder("jruby", new FileSystemResource(scriptFile));
+ }
+
+ /**
+ * Creates a script builder for the Ruby/JRuby script @{link URL}
+ *
+ * @param scriptURL the URL used to load the script
+ * @return the builder
+ */
+ public static ScriptBuilder ruby(URL scriptURL) {
+ return new ScriptBuilder("jruby", new UrlResource(scriptURL));
+ }
+
+
+ // Properties
+ //-------------------------------------------------------------------------
+ public ScriptEngine getEngine() {
+ checkInitialised();
+ return engine;
+ }
+
+ public CompiledScript getCompiledScript() {
+ return compiledScript;
+ }
+
+ public String getScriptText() {
+ return scriptText;
+ }
+
+ public String getScriptEngineName() {
+ return scriptEngineName;
+ }
+
+ /**
+ * Returns a description of the script
+ *
+ * @return the script description
+ */
+ public String getScriptDescription() {
+ if (scriptText != null) {
+ return scriptEngineName + ": " + scriptText;
+ }
+ else {
+ return scriptEngineName + ": " + scriptResource.getDescription();
+ }
+ }
+
+ /**
+ * Access the script context so that it can be configured such as adding attributes
+ */
+ public ScriptContext getScriptContext() {
+ return getEngine().getContext();
+ }
+
+ /**
+ * Sets the context to use by the script
+ */
+ public void setScriptContext(ScriptContext scriptContext) {
+ getEngine().setContext(scriptContext);
+ }
+
+
+ // Implementation methods
+ //-------------------------------------------------------------------------
+ protected void checkInitialised() {
+ if (engine == null) {
+ engine = createScriptEngine();
+ }
+ if (compiledScript == null) {
+ if (engine instanceof Compilable) {
+ compileScript((Compilable) engine);
+ }
+ }
+ }
+ protected ScriptEngine createScriptEngine() {
+ ScriptEngineManager manager = new ScriptEngineManager();
+ return manager.getEngineByName(scriptEngineName);
+ }
+
+ protected void compileScript(Compilable compilable) {
+ try {
+ if (scriptText != null) {
+ compiledScript = compilable.compile(scriptText);
+ }
+ else if (scriptResource != null) {
+ compiledScript = compilable.compile(createScriptReader());
+ }
+ }
+ catch (ScriptException e) {
+ throw createScriptCompileException(e);
+ }
+ catch (IOException e) {
+ throw createScriptCompileException(e);
+ }
+ }
+
+ protected synchronized Object evaluateScript(Exchange exchange) {
+ try {
+ getScriptContext();
+ populateBindings(getEngine(), exchange);
+ return runScript();
+ }
+ catch (ScriptException e) {
+ throw createScriptEvaluationException(e.getCause());
+ }
+ catch (IOException e) {
+ throw createScriptEvaluationException(e);
+ }
+ }
+
+
+ protected Object runScript() throws ScriptException, IOException {
+ checkInitialised();
+ if (compiledScript != null) {
+ return compiledScript.eval();
+ }
+ else {
+ if (scriptText != null) {
+ return getEngine().eval(scriptText);
+ }
+ else {
+ return getEngine().eval(createScriptReader());
+ }
+ }
+ }
+
+ protected void populateBindings(ScriptEngine engine, Exchange exchange) {
+ ScriptContext context = engine.getContext();
+ int scope = ScriptContext.ENGINE_SCOPE;
+ context.setAttribute("context", exchange.getContext(), scope);
+ context.setAttribute("exchange", exchange, scope);
+ context.setAttribute("request", exchange.getIn(), scope);
+ context.setAttribute("response", exchange.getOut(), scope);
+ }
+
+ protected InputStreamReader createScriptReader() throws IOException {
+ // TODO consider character sets?
+ return new InputStreamReader(scriptResource.getInputStream());
+ }
+
+ protected ScriptEvaluationException createScriptCompileException(Exception e) {
+ return new ScriptEvaluationException("Failed to compile: " + getScriptDescription() + ". Cause: " + e, e);
+ }
+
+ protected ScriptEvaluationException createScriptEvaluationException(Throwable e) {
+ return new ScriptEvaluationException("Failed to evaluate: " + getScriptDescription() + ". Cause: " + e, e);
+ }
+
+}
Propchange: activemq/camel/trunk/camel-script/src/main/java/org/apache/camel/builder/script/ScriptBuilder.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: activemq/camel/trunk/camel-script/src/main/java/org/apache/camel/builder/script/ScriptBuilder.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: activemq/camel/trunk/camel-script/src/main/java/org/apache/camel/builder/script/ScriptBuilder.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: activemq/camel/trunk/camel-script/src/main/java/org/apache/camel/builder/script/ScriptEvaluationException.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-script/src/main/java/org/apache/camel/builder/script/ScriptEvaluationException.java?view=auto&rev=521675
==============================================================================
--- activemq/camel/trunk/camel-script/src/main/java/org/apache/camel/builder/script/ScriptEvaluationException.java (added)
+++ activemq/camel/trunk/camel-script/src/main/java/org/apache/camel/builder/script/ScriptEvaluationException.java Fri Mar 23 04:20:01 2007
@@ -0,0 +1,40 @@
+/**
+ *
+ * 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.builder.script;
+
+import org.apache.camel.RuntimeCamelException;
+
+/**
+ * An exception thrown if the script evaluation fails
+ *
+ * @version $Revision$
+ */
+public class ScriptEvaluationException extends RuntimeCamelException {
+
+ public ScriptEvaluationException(String message) {
+ super(message);
+ }
+
+ public ScriptEvaluationException(String message, Throwable cause) {
+ super(message, cause);
+ }
+
+ public ScriptEvaluationException(Throwable cause) {
+ super(cause);
+ }
+}
Propchange: activemq/camel/trunk/camel-script/src/main/java/org/apache/camel/builder/script/ScriptEvaluationException.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: activemq/camel/trunk/camel-script/src/main/java/org/apache/camel/builder/script/ScriptEvaluationException.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: activemq/camel/trunk/camel-script/src/main/java/org/apache/camel/builder/script/ScriptEvaluationException.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: activemq/camel/trunk/camel-script/src/test/java/org/apache/camel/builder/script/GroovyTest.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-script/src/test/java/org/apache/camel/builder/script/GroovyTest.java?view=auto&rev=521675
==============================================================================
--- activemq/camel/trunk/camel-script/src/test/java/org/apache/camel/builder/script/GroovyTest.java (added)
+++ activemq/camel/trunk/camel-script/src/test/java/org/apache/camel/builder/script/GroovyTest.java Fri Mar 23 04:20:01 2007
@@ -0,0 +1,95 @@
+/**
+ *
+ * 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.builder.script;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Expression;
+import org.apache.camel.Predicate;
+import static org.apache.camel.builder.script.ScriptBuilder.*;
+import org.apache.camel.impl.DefaultCamelContext;
+import org.apache.camel.impl.DefaultExchange;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * @version $Revision$
+ */
+public class GroovyTest extends ScriptTestSupport {
+ private static final transient Log log = LogFactory.getLog(GroovyTest.class);
+
+ protected Exchange exchange;
+
+ public void testExpressionReturnsTheCorrectValue() throws Exception {
+ assertExpression(groovy("exchange.in.headers['foo.bar']"), exchange, "cheese");
+ assertExpression(groovy("exchange.in.headers.name"), exchange, "James");
+ assertExpression(groovy("exchange.in.headers['doesNotExist']"), exchange, null);
+ }
+
+ public void testPredicateUsingScriptAttribute() throws Exception {
+ assertPredicate(groovy("request.headers.name == hacker").attribute("hacker", "James"), exchange, true);
+ }
+
+ public void testPredicateEvaluation() throws Exception {
+ assertPredicate(groovy("exchange.in.headers.name == 'James'"), exchange, true);
+ assertPredicate(groovy("exchange.in.headers.name == 'Hiram'"), exchange, false);
+
+ assertPredicate(groovy("request.headers.name == 'James'"), exchange, true);
+ }
+
+ public void testInvalidExpressionFailsWithMeaningfulException() throws Exception {
+ try {
+ groovy("exchange.doesNotExist").evaluate(exchange);
+ fail("This test case should have thrown an exception!");
+ }
+ catch (ScriptEvaluationException e) {
+ log.debug("Caught expected exception: " + e, e);
+ String message = e.getMessage();
+ assertTrue("The message should include 'doesNotExist' but was: " + message, message.contains("doesNotExist"));
+ }
+ }
+
+ /**
+ * Asserts that the given expression when evaluated returns the given answer
+ */
+ protected void assertExpression(Expression expression, Exchange exchange, Object expected) {
+ Object value = expression.evaluate(exchange);
+
+ log.debug("Evaluated expression: " + expression + " on exchange: " + exchange + " result: " + value);
+
+ assertEquals("Expression: " + expression + " on Exchange: " + exchange, expected, value);
+ }
+
+ /**
+ * Asserts that the predicate returns the expected value on the exchange
+ */
+ protected void assertPredicate(Predicate expression, Exchange exchange, boolean expected) {
+ boolean value = expression.matches(exchange);
+
+ log.debug("Evaluated predicate: " + expression + " on exchange: " + exchange + " result: " + value);
+
+ assertEquals("Predicate: " + expression + " on Exchange: " + exchange, expected, value);
+ }
+
+
+ @Override
+ protected void setUp() throws Exception {
+ exchange = new DefaultExchange(new DefaultCamelContext());
+ exchange.getIn().setHeader("foo.bar", "cheese");
+ exchange.getIn().setHeader("name", "James");
+ }
+}
Propchange: activemq/camel/trunk/camel-script/src/test/java/org/apache/camel/builder/script/GroovyTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: activemq/camel/trunk/camel-script/src/test/java/org/apache/camel/builder/script/GroovyTest.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: activemq/camel/trunk/camel-script/src/test/java/org/apache/camel/builder/script/GroovyTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: activemq/camel/trunk/camel-script/src/test/java/org/apache/camel/builder/script/Jsr223Test.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-script/src/test/java/org/apache/camel/builder/script/Jsr223Test.java?view=auto&rev=521675
==============================================================================
--- activemq/camel/trunk/camel-script/src/test/java/org/apache/camel/builder/script/Jsr223Test.java (added)
+++ activemq/camel/trunk/camel-script/src/test/java/org/apache/camel/builder/script/Jsr223Test.java Fri Mar 23 04:20:01 2007
@@ -0,0 +1,36 @@
+/**
+ *
+ * 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.builder.script;
+
+import junit.framework.TestCase;
+
+import javax.script.ScriptEngineManager;
+import javax.script.ScriptEngineFactory;
+
+/**
+ * @version $Revision$
+ */
+public class Jsr223Test extends TestCase {
+ public void testLanguageNames() throws Exception {
+ ScriptEngineManager manager = new ScriptEngineManager();
+ ScriptEngineFactory[] factories = manager.getEngineFactories();
+ for (ScriptEngineFactory factory : factories) {
+ System.out.println("Factory: " + factory.getNames() + " " + factory.getEngineName());
+ }
+ }
+}
Propchange: activemq/camel/trunk/camel-script/src/test/java/org/apache/camel/builder/script/Jsr223Test.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: activemq/camel/trunk/camel-script/src/test/java/org/apache/camel/builder/script/Jsr223Test.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: activemq/camel/trunk/camel-script/src/test/java/org/apache/camel/builder/script/Jsr223Test.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: activemq/camel/trunk/camel-script/src/test/java/org/apache/camel/builder/script/ScriptTestSupport.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-script/src/test/java/org/apache/camel/builder/script/ScriptTestSupport.java?view=auto&rev=521675
==============================================================================
--- activemq/camel/trunk/camel-script/src/test/java/org/apache/camel/builder/script/ScriptTestSupport.java (added)
+++ activemq/camel/trunk/camel-script/src/test/java/org/apache/camel/builder/script/ScriptTestSupport.java Fri Mar 23 04:20:01 2007
@@ -0,0 +1,26 @@
+/**
+ *
+ * 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.builder.script;
+
+import junit.framework.TestCase;
+
+/**
+ * @version $Revision$
+ */
+public abstract class ScriptTestSupport extends TestCase {
+}
Propchange: activemq/camel/trunk/camel-script/src/test/java/org/apache/camel/builder/script/ScriptTestSupport.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: activemq/camel/trunk/camel-script/src/test/java/org/apache/camel/builder/script/ScriptTestSupport.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: activemq/camel/trunk/camel-script/src/test/java/org/apache/camel/builder/script/ScriptTestSupport.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: activemq/camel/trunk/camel-spring/pom.xml
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-spring/pom.xml?view=diff&rev=521675&r1=521674&r2=521675
==============================================================================
--- activemq/camel/trunk/camel-spring/pom.xml (original)
+++ activemq/camel/trunk/camel-spring/pom.xml Fri Mar 23 04:20:01 2007
@@ -58,41 +58,6 @@
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
- <version>2.0</version>
- <exclusions>
- <exclusion>
- <groupId>javax.mail</groupId>
- <artifactId>mail</artifactId>
- </exclusion>
- <exclusion>
- <groupId>javax.resource</groupId>
- <artifactId>connector</artifactId>
- </exclusion>
- <exclusion>
- <groupId>javax.transaction</groupId>
- <artifactId>jta</artifactId>
- </exclusion>
- <exclusion>
- <groupId>org.springframework</groupId>
- <artifactId>spring-support</artifactId>
- </exclusion>
- <exclusion>
- <groupId>org.springframework</groupId>
- <artifactId>spring-orm</artifactId>
- </exclusion>
- <exclusion>
- <groupId>org.springframework</groupId>
- <artifactId>spring-hibernate</artifactId>
- </exclusion>
- <exclusion>
- <groupId>org.springframework</groupId>
- <artifactId>spring-remoting</artifactId>
- </exclusion>
- <exclusion>
- <groupId>org.springframework</groupId>
- <artifactId>spring-core</artifactId>
- </exclusion>
- </exclusions>
</dependency>
<dependency>
Modified: activemq/camel/trunk/pom.xml
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/pom.xml?view=diff&rev=521675&r1=521674&r2=521675
==============================================================================
--- activemq/camel/trunk/pom.xml (original)
+++ activemq/camel/trunk/pom.xml Fri Mar 23 04:20:01 2007
@@ -117,6 +117,7 @@
<module>camel-jms</module>
<module>camel-jbi</module>
<module>camel-mina</module>
+ <module>camel-script</module>
<module>camel-spring</module>
</modules>
@@ -317,6 +318,27 @@
<artifactId>jetty</artifactId>
<version>6.1.2rc1</version>
</dependency>
+
+
+ <!-- optional scripting support -->
+ <dependency>
+ <groupId>org.livetribe</groupId>
+ <artifactId>livetribe-jsr223</artifactId>
+ <version>2.0.0</version>
+ </dependency>
+ <dependency>
+ <groupId>groovy</groupId>
+ <artifactId>groovy-all</artifactId>
+ <version>1.0</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>com.sun.script</groupId>
+ <artifactId>groovy-engine</artifactId>
+ <version>20070112</version>
+ <scope>test</scope>
+ </dependency>
+
<dependency>
<groupId>junit</groupId>