[jboss-svn-commits] JBL Code SVN: r10281 - in labs/jbossesb/trunk/product/core/listeners: tests/src/org/jboss/soa/esb/actions/scripting and 1 other directory.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Fri Mar 16 15:18:16 EDT 2007
Author: tfennelly
Date: 2007-03-16 15:18:16 -0400 (Fri, 16 Mar 2007)
New Revision: 10281
Modified:
labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/actions/scripting/GroovyActionProcessor.java
labs/jbossesb/trunk/product/core/listeners/tests/src/org/jboss/soa/esb/actions/scripting/GroovyActionProcessorUnitTest.java
Log:
Updated to work in new .esb archive deployment model.
Modified: labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/actions/scripting/GroovyActionProcessor.java
===================================================================
--- labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/actions/scripting/GroovyActionProcessor.java 2007-03-16 19:16:17 UTC (rev 10280)
+++ labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/actions/scripting/GroovyActionProcessor.java 2007-03-16 19:18:16 UTC (rev 10281)
@@ -20,23 +20,25 @@
package org.jboss.soa.esb.actions.scripting;
import groovy.lang.Binding;
+import groovy.lang.GroovyShell;
import groovy.util.GroovyScriptEngine;
import org.jboss.soa.esb.helpers.ConfigTree;
import org.jboss.soa.esb.message.Message;
import org.jboss.soa.esb.ConfigurationException;
-import org.jboss.soa.esb.actions.ActionProcessor;
+import org.jboss.soa.esb.actions.ActionPipelineProcessor;
+import org.jboss.soa.esb.actions.ActionLifecycleException;
+import org.jboss.internal.soa.esb.util.StreamUtils;
import org.apache.log4j.Logger;
import java.io.IOException;
-import java.io.Serializable;
+import java.io.InputStream;
/**
* <a href="http://groovy.codehaus.org">Groovy</a> Scripting action processor.
* <p/>
* <pre>
* <action name="groovy" class="org.jboss.soa.esb.actions.scripting.GroovyActionProcessor">
- * <property name="scriptPath" value="./scripts" />
- * <property name="script" value="helloWorld.groovy" />
+ * <property name="script" value="/scripts/helloWorld.groovy" />
* </action>
* </pre>
* <p/>
@@ -45,25 +47,59 @@
*
* @author Gregory Pierce.
*/
-public class GroovyActionProcessor implements ActionProcessor {
+public class GroovyActionProcessor implements ActionPipelineProcessor {
private static Logger logger = Logger.getLogger(GroovyActionProcessor.class);
protected ConfigTree configTree;
protected GroovyScriptEngine scriptEngine;
- private String scriptName;
+ private String script;
public GroovyActionProcessor(ConfigTree config) throws ConfigurationException {
this.configTree = config;
- String[] scriptPaths = new String[]{new String(configTree.getAttribute("scriptPath"))};
+ }
- scriptName = configTree.getAttribute("script");
+ public void initialise() throws ActionLifecycleException {
+ InputStream scriptStream = null;
+ String scriptName = configTree.getAttribute("script");
+
+ if(scriptName == null) {
+ throw new ActionLifecycleException("Mandatory action property 'script' not specified.");
+ }
+
+ scriptStream = getScriptStream(scriptName);
+ if(scriptStream == null) {
+ throw new ActionLifecycleException("Script '" + scriptName + "' not found on classpath.");
+ }
+
try {
- scriptEngine = new GroovyScriptEngine(scriptPaths, getClass().getClassLoader());
- } catch (IOException e) {
- throw new ConfigurationException("Failed to initialise a Groovy scripting engine instance.", e);
+ script = new String(StreamUtils.readStream(scriptStream));
+ } catch(Throwable t) {
+ throw new ActionLifecycleException("Error reading script '" + scriptName + "' stream.");
+ } finally {
+ try {
+ if(scriptStream != null) {
+ scriptStream.close();
+ }
+ } catch (IOException e) {
+ throw new ActionLifecycleException("Failed to close script '" + scriptName + "' stream.");
+ }
}
}
+ private InputStream getScriptStream(String scriptName) {
+ InputStream scriptStream;
+
+ scriptStream = Thread.currentThread().getContextClassLoader().getResourceAsStream(scriptName);
+ if(scriptStream == null) {
+ scriptStream = getClass().getResourceAsStream(scriptName);
+ }
+
+ return scriptStream;
+ }
+
+ public void destroy() throws ActionLifecycleException {
+ }
+
/**
* Processes an ESB message. Configuration is via two properties of this ESB element
* scriptPath - The path to the script that will be run
@@ -80,13 +116,14 @@
binding.setVariable("message", message);
binding.setVariable("config", configTree);
- // run the script specified in the scriptName
- //
- scriptEngine.run(scriptName, binding);
+ GroovyShell shell = new GroovyShell(Thread.currentThread().getContextClassLoader(), binding);
+ Object returnVal = shell.evaluate(script);
- // send the modified message back into the channel
- //
- return (Message) binding.getVariable("message");
+ if(returnVal instanceof Message) {
+ return (Message) returnVal;
+ } else {
+ return message;
+ }
}
catch (Exception e) {
logger.error("Error executing Groovy script.", e);
@@ -94,11 +131,9 @@
}
}
- public Serializable getOkNotification(Message message) {
- return null;
+ public void processException(final Message message, final Exception ex) {
}
- public Serializable getErrorNotification(Message message) {
- return null;
+ public void processSuccess(final Message message) {
}
}
\ No newline at end of file
Modified: labs/jbossesb/trunk/product/core/listeners/tests/src/org/jboss/soa/esb/actions/scripting/GroovyActionProcessorUnitTest.java
===================================================================
--- labs/jbossesb/trunk/product/core/listeners/tests/src/org/jboss/soa/esb/actions/scripting/GroovyActionProcessorUnitTest.java 2007-03-16 19:16:17 UTC (rev 10280)
+++ labs/jbossesb/trunk/product/core/listeners/tests/src/org/jboss/soa/esb/actions/scripting/GroovyActionProcessorUnitTest.java 2007-03-16 19:18:16 UTC (rev 10281)
@@ -21,6 +21,7 @@
import org.jboss.soa.esb.helpers.ConfigTree;
import org.jboss.soa.esb.ConfigurationException;
+import org.jboss.soa.esb.actions.ActionLifecycleException;
import org.jboss.soa.esb.message.Message;
import org.jboss.soa.esb.message.format.MessageFactory;
import junit.framework.TestCase;
@@ -31,13 +32,7 @@
*/
public class GroovyActionProcessorUnitTest extends TestCase {
- // Of course, this is going to cause trouble for anyone running the build through
- // an IDE that's not setup properly (to match the ant build). Sorry about that!!
- // This test assumes your cwd is the "product" dir, as per the ant build - will need
- // changing when we move to maven (sorry Kev :-) ).
- private static final String scriptPath = "./core/listeners/tests/src/org/jboss/soa/esb/actions/scripting";
-
- public void test() throws ConfigurationException {
+ public void test() throws ConfigurationException, ActionLifecycleException {
ConfigTree config = getConfig("test.groovy");
String messageContents = "Hello World!";
@@ -46,6 +41,7 @@
GroovyActionProcessor processor = new GroovyActionProcessor(config);
Message message = MessageFactory.getInstance().getMessage();
+ processor.initialise();
processor.process(message);
byte[] bodyContents = message.getBody().getContents();
assertNotNull("Expected body contents to be set.", bodyContents);
@@ -55,8 +51,7 @@
private ConfigTree getConfig(String script) {
ConfigTree config = new ConfigTree("<config/>");
- config.setAttribute("scriptPath", scriptPath);
- config.setAttribute("script", script);
+ config.setAttribute("script", "/org/jboss/soa/esb/actions/scripting/" + script);
return config;
}
More information about the jboss-svn-commits
mailing list