diff --git a/spring-integration-scripting/pom.xml b/spring-integration-scripting/pom.xml
deleted file mode 100644
index 203639d858..0000000000
--- a/spring-integration-scripting/pom.xml
+++ /dev/null
@@ -1,167 +0,0 @@
-
-
- 4.0.0
- org.springframework.integration
- spring-integration-scripting
- 2.1.0.BUILD-SNAPSHOT
- Spring Integration Scripting Support
-
-
- The Apache Software License, Version 2.0
- http://www.apache.org/licenses/LICENSE-2.0.txt
- repo
-
-
-
-
-
- src/main/java
-
- **/*
-
-
- **/*.java
-
-
-
- src/main/resources
-
- **/*
-
-
-
-
-
- src/test/java
-
- **/*
-
-
- **/*.java
-
-
-
- src/test/resources
-
- **/*
-
-
-
-
-
- maven-compiler-plugin
-
- 1.5
- 1.5
-
-
-
- maven-surefire-plugin
-
-
- **/*Tests.java
-
-
- **/*Abstract*.java
-
-
-
-
-
-
-
- SpringSource External Bundle Repository
- http://repository.springsource.com/maven/bundles/external/
-
-
- SpringSource Milestone Repository
- http://maven.springframework.org/milestone/
-
-
- SpringSource Release Bundle Repository
- http://repository.springsource.com/maven/bundles/release/
-
-
- SpringSource Release Repository
- http://maven.springframework.org/release/
-
-
-
-
- org.easymock
- easymock
- 2.3
- test
-
-
- org.springframework.integration
- spring-integration-core
- 2.1.0.BUILD-SNAPSHOT
- compile
-
-
- org.springframework.integration
- spring-integration-test
- 2.1.0.BUILD-SNAPSHOT
- test
-
-
- org.easymock
- easymockclassextension
- 2.3
- test
-
-
- org.hamcrest
- hamcrest-all
- 1.1
- test
-
-
- org.springframework
- spring-test
- 3.0.6.RELEASE
- test
-
-
- org.mockito
- mockito-all
- 1.8.4
- test
-
-
- org.codehaus.groovy
- groovy-all
- 1.7.5
- test
-
-
- log4j
- log4j
- 1.2.12
- test
-
-
- cglib
- cglib-nodep
- 2.2
- test
-
-
- junit
- junit-dep
- 4.8.2
- test
-
-
- org.jruby
- jruby
- 1.6.3
- test
-
-
-
- UTF8
-
-
diff --git a/spring-integration-scripting/src/main/java/org/springframework/integration/scripting/ScriptingException.java b/spring-integration-scripting/src/main/java/org/springframework/integration/scripting/ScriptingException.java
new file mode 100644
index 0000000000..59cd9aa800
--- /dev/null
+++ b/spring-integration-scripting/src/main/java/org/springframework/integration/scripting/ScriptingException.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2002-2011 the original author or authors.
+ *
+ * Licensed 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.springframework.integration.scripting;
+
+import org.springframework.integration.MessagingException;
+
+/**
+ * @author David Turanski
+ * @since 2.1
+ */
+@SuppressWarnings("serial")
+
+public class ScriptingException extends MessagingException {
+
+ public ScriptingException(String description) {
+ super(description);
+ }
+
+
+ public ScriptingException(String description, Throwable cause) {
+ super(description, cause);
+ }
+}
diff --git a/spring-integration-scripting/src/main/java/org/springframework/integration/scripting/jsr223/AbstractScriptExecutor.java b/spring-integration-scripting/src/main/java/org/springframework/integration/scripting/jsr223/AbstractScriptExecutor.java
index e07a4afe67..e3fa153e38 100644
--- a/spring-integration-scripting/src/main/java/org/springframework/integration/scripting/jsr223/AbstractScriptExecutor.java
+++ b/spring-integration-scripting/src/main/java/org/springframework/integration/scripting/jsr223/AbstractScriptExecutor.java
@@ -12,18 +12,17 @@
*/
package org.springframework.integration.scripting.jsr223;
-import java.io.IOException;
import java.util.Date;
import java.util.Map;
import java.util.Map.Entry;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
-import javax.script.ScriptException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.integration.scripting.ScriptExecutor;
+import org.springframework.integration.scripting.ScriptingException;
import org.springframework.scripting.ScriptSource;
import org.springframework.util.Assert;
@@ -46,14 +45,16 @@ abstract class AbstractScriptExecutor implements ScriptExecutor {
Assert.hasText(language, "language must not be empty");
this.language = language;
if (logger.isDebugEnabled()) {
- logger.debug("using script engine : " + scriptEngineManager.getEngineByName(language).getFactory().getEngineName());
- for (String name:scriptEngineManager.getEngineByName(language).getFactory().getNames()){
- logger.debug("name=" + name);
- }
+ ScriptEngine scriptEngine = scriptEngineManager.getEngineByName(this.language);
+ if (scriptEngine == null) {
+ logger.error(invlalidLanguageMessage(this.language));
+ }
+ else {
+ logger.debug("using script engine : " + scriptEngine.getFactory().getEngineName());
+ }
}
}
-
public Object executeScript(ScriptSource scriptSource) {
return this.executeScript(scriptSource, null);
}
@@ -61,6 +62,11 @@ abstract class AbstractScriptExecutor implements ScriptExecutor {
public Object executeScript(ScriptSource scriptSource, Map variables) {
Object result = null;
ScriptEngine scriptEngine = this.scriptEngineManager.getEngineByName(this.language);
+
+ if (scriptEngine == null) {
+ throw new ScriptingException(invlalidLanguageMessage(this.language));
+ }
+
try {
if (variables != null) {
for (Entry entry : variables.entrySet()) {
@@ -72,25 +78,23 @@ abstract class AbstractScriptExecutor implements ScriptExecutor {
if (logger.isDebugEnabled()) {
logger.debug("executing script: " + script);
}
-
+
result = scriptEngine.eval(script);
-
+
result = postProcess(result, scriptEngine, script);
-
+
if (logger.isDebugEnabled()) {
logger.debug("script executed in " + (new Date().getTime() - start.getTime()) + " ms");
}
}
- catch (IOException e) {
- throw new RuntimeException(e);
- }
- catch (ScriptException e) {
- throw new RuntimeException(e);
+
+ catch (Exception e) {
+ throw new ScriptingException(e.getMessage(), e);
}
+
return result;
}
-
/**
* Subclasses may implement this to provide any special handling required
* @param result
@@ -100,4 +104,10 @@ abstract class AbstractScriptExecutor implements ScriptExecutor {
*/
protected abstract Object postProcess(Object result, ScriptEngine scriptEngine, String script);
+ private static String invlalidLanguageMessage(String language) {
+ return new StringBuilder().append(ScriptEngineManager.class.getName())
+ .append(" is unable to create a script engine for language '").append(language).append("'.\n")
+ .append("This may be due to a missing language implementation or an invalid language name.").toString();
+ }
+
}
diff --git a/spring-integration-scripting/src/main/java/org/springframework/integration/scripting/jsr223/ScriptExecutorFactory.java b/spring-integration-scripting/src/main/java/org/springframework/integration/scripting/jsr223/ScriptExecutorFactory.java
index 9759907438..95cfaba25d 100644
--- a/spring-integration-scripting/src/main/java/org/springframework/integration/scripting/jsr223/ScriptExecutorFactory.java
+++ b/spring-integration-scripting/src/main/java/org/springframework/integration/scripting/jsr223/ScriptExecutorFactory.java
@@ -18,9 +18,8 @@ import org.springframework.integration.scripting.ScriptExecutor;
* @author David Turanski
* @since 2.1
*/
-public class ScriptExecutorFactory {
+public abstract class ScriptExecutorFactory {
- private ScriptExecutorFactory(){};
public static ScriptExecutor getScriptExecutor(String language) {
if (language.equalsIgnoreCase("python") || language.equalsIgnoreCase("jython")){
return new PythonScriptExecutor();
diff --git a/spring-integration-scripting/src/test/java/org/springframework/integration/scripting/jsr223/Jsr223ScriptExecutorTests.java b/spring-integration-scripting/src/test/java/org/springframework/integration/scripting/jsr223/Jsr223ScriptExecutorTests.java
index b61bebb198..dcddde9582 100644
--- a/spring-integration-scripting/src/test/java/org/springframework/integration/scripting/jsr223/Jsr223ScriptExecutorTests.java
+++ b/spring-integration-scripting/src/test/java/org/springframework/integration/scripting/jsr223/Jsr223ScriptExecutorTests.java
@@ -13,6 +13,7 @@
package org.springframework.integration.scripting.jsr223;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
import java.util.HashMap;
import java.util.Map;
@@ -20,7 +21,7 @@ import java.util.Map;
import org.junit.Test;
import org.springframework.core.io.ClassPathResource;
import org.springframework.integration.scripting.ScriptExecutor;
-import org.springframework.integration.scripting.jsr223.DefaultScriptExecutor;
+import org.springframework.integration.scripting.ScriptingException;
import org.springframework.scripting.support.ResourceScriptSource;
import org.springframework.scripting.support.StaticScriptSource;
@@ -59,7 +60,8 @@ public class Jsr223ScriptExecutorTests {
assertEquals("js",obj.toString());
}
- @Test public void testPython() {
+ @Test
+ public void testPython() {
ScriptExecutor executor = ScriptExecutorFactory.getScriptExecutor("python");
Object obj = executor.executeScript(new StaticScriptSource("x=2") );
assertEquals(2,obj);
@@ -67,4 +69,15 @@ public class Jsr223ScriptExecutorTests {
obj = executor.executeScript(new StaticScriptSource("def foo(y):\n\tx=y\n\treturn y\nz=foo(2)") );
assertEquals(2,obj);
}
+
+ @Test
+ public void testInvalidLanguageThrowsScriptingException() {
+ try {
+ ScriptExecutor executor = ScriptExecutorFactory.getScriptExecutor("foo");
+ executor.executeScript(new StaticScriptSource("x=2"));
+ fail("should throw Exception");
+ } catch (ScriptingException e) {
+ System.out.println(e.getMessage());
+ }
+ }
}
diff --git a/spring-integration-scripting/src/test/java/org/springframework/integration/scripting/jsr223/PythonScriptExecutorTests.java b/spring-integration-scripting/src/test/java/org/springframework/integration/scripting/jsr223/PythonScriptExecutorTests.java
index 4c9689aee1..f30c04b549 100644
--- a/spring-integration-scripting/src/test/java/org/springframework/integration/scripting/jsr223/PythonScriptExecutorTests.java
+++ b/spring-integration-scripting/src/test/java/org/springframework/integration/scripting/jsr223/PythonScriptExecutorTests.java
@@ -36,6 +36,7 @@ public class PythonScriptExecutorTests {
public void init() {
executor = new PythonScriptExecutor();
}
+
@Test
public void testLiteral() {
Object obj = executor.executeScript(new StaticScriptSource("3+4") );