You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@synapse.apache.org by an...@apache.org on 2007/03/20 01:21:24 UTC
svn commit: r520194 - in
/webservices/synapse/trunk/java/modules/extensions/src:
main/java/org/apache/synapse/mediators/bsf/
main/java/org/apache/synapse/mediators/bsf/convertors/
test/java/org/apache/synapse/mediators/bsf/ test/java/org/apache/synapse...
Author: antelder
Date: Mon Mar 19 17:21:23 2007
New Revision: 520194
URL: http://svn.apache.org/viewvc?view=rev&rev=520194
Log:
Update script mediator for latest BSF 3.0 snapshot
Removed:
webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/convertors/
webservices/synapse/trunk/java/modules/extensions/src/test/java/org/apache/synapse/mediators/bsf/convertors/
Modified:
webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/ScriptMediator.java
webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/ScriptMessageContext.java
webservices/synapse/trunk/java/modules/extensions/src/test/java/org/apache/synapse/mediators/bsf/ScriptMediatorTest.java
webservices/synapse/trunk/java/modules/extensions/src/test/java/org/apache/synapse/mediators/bsf/javascript/JavaScriptMediatorTest.java
Modified: webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/ScriptMediator.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/ScriptMediator.java?view=diff&rev=520194&r1=520193&r2=520194
==============================================================================
--- webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/ScriptMediator.java (original)
+++ webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/ScriptMediator.java Mon Mar 19 17:21:23 2007
@@ -28,6 +28,7 @@
import javax.script.ScriptException;
import org.apache.axiom.om.OMElement;
+import org.apache.bsf.xml.XMLHelper;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.synapse.Constants;
@@ -35,11 +36,6 @@
import org.apache.synapse.SynapseException;
import org.apache.synapse.config.Entry;
import org.apache.synapse.mediators.AbstractMediator;
-import org.apache.synapse.mediators.bsf.convertors.DefaultOMElementConvertor;
-import org.apache.synapse.mediators.bsf.convertors.GROOVYOMElementConvertor;
-import org.apache.synapse.mediators.bsf.convertors.JSOMElementConvertor;
-import org.apache.synapse.mediators.bsf.convertors.OMElementConvertor;
-import org.apache.synapse.mediators.bsf.convertors.RBOMElementConvertor;
/**
* A Synapse mediator that calls a function in any scripting language supported by the BSF.
@@ -75,13 +71,13 @@
/** The source code of the script */
private String scriptSourceCode;
/** The BSF engine created to process each message through the script */
- private ScriptEngine scriptEngine;
+ protected ScriptEngine scriptEngine;
/** The compiled script. Only used for inline scripts */
private CompiledScript compiledScript;
/** The Invocable script. Only used for external scripts */
private Invocable invocableScript;
- /** A converter to get the code for the scripting language from XML */
- private OMElementConvertor convertor;
+ /** The BSF helper to convert between the XML representations used by Java and the scripting language */
+ private XMLHelper xmlHelper;
/**
* Create a script mediator for the given language and given script source
@@ -165,7 +161,7 @@
*/
protected Object mediateWithExternalScript(MessageContext synCtx) throws ScriptException {
prepareExternalScript(synCtx);
- ScriptMessageContext scriptMC = new ScriptMessageContext(synCtx, convertor);
+ ScriptMessageContext scriptMC = new ScriptMessageContext(synCtx, xmlHelper);
Object response = invocableScript.invokeFunction(function, new Object[]{scriptMC});
return response;
}
@@ -178,7 +174,7 @@
*/
protected Object mediateForInlineScript(MessageContext synCtx) throws ScriptException {
- ScriptMessageContext scriptMC = new ScriptMessageContext(synCtx, convertor);
+ ScriptMessageContext scriptMC = new ScriptMessageContext(synCtx, xmlHelper);
Bindings bindings = scriptEngine.createBindings();
bindings.put(MC_VAR_NAME, scriptMC);
@@ -199,22 +195,18 @@
*/
protected void initInlineScript() {
try {
- ScriptEngineManager manager = new ScriptEngineManager();
- this.scriptEngine = manager.getEngineByExtension(language);
- if (scriptEngine == null) {
- throw new SynapseException("No script engine found for language: " + language);
- }
+
+ initScriptEngine();
+
if (scriptEngine instanceof Compilable) {
compiledScript = ((Compilable)scriptEngine).compile(scriptSourceCode);
} else {
// do nothing. If the script enging doesn't support Compilable then
// the inline script will be evaluated on each invocation
}
-
- convertor = getOMElementConvertor();
} catch (ScriptException e) {
- throw new SynapseException("Exception compiling inline script", e);
+ throw new SynapseException("Exception initializing inline script", e);
}
}
@@ -234,35 +226,23 @@
scriptSourceCode = (String) o;
}
- ScriptEngineManager manager = new ScriptEngineManager();
- this.scriptEngine = manager.getEngineByExtension(language);
- if (scriptEngine == null) {
- throw new SynapseException("No script engine found for language: " + language);
- }
- if (!(scriptEngine instanceof Invocable)) {
- throw new SynapseException("Script engine is not an Invocable engine for language: " + language);
- }
+ initScriptEngine();
scriptEngine.eval(scriptSourceCode);
invocableScript = (Invocable)scriptEngine;
- convertor = getOMElementConvertor();
}
}
- /**
- * Return the appropriate OMElementConverter for the language of the script
- * @return a suitable OMElementConverter for the scripting language
- */
- public OMElementConvertor getOMElementConvertor() {
- if ("js".equals(language)) {
- return new JSOMElementConvertor();
- } else if ("ruby".equals(language)) {
- return new RBOMElementConvertor();
- } else if ("groovy".equals(language)) {
- return new GROOVYOMElementConvertor();
- } else {
- return new DefaultOMElementConvertor();
+ protected void initScriptEngine() {
+ ScriptEngineManager manager = new ScriptEngineManager();
+ this.scriptEngine = manager.getEngineByExtension(language);
+ if (scriptEngine == null) {
+ throw new SynapseException("No script engine found for language: " + language);
+ }
+ if (!(scriptEngine instanceof Invocable)) {
+ throw new SynapseException("Script engine is not an Invocable engine for language: " + language);
}
+ xmlHelper = XMLHelper.getArgHelper(scriptEngine);
}
public String getLanguage() {
Modified: webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/ScriptMessageContext.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/ScriptMessageContext.java?view=diff&rev=520194&r1=520193&r2=520194
==============================================================================
--- webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/ScriptMessageContext.java (original)
+++ webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/ScriptMessageContext.java Mon Mar 19 17:21:23 2007
@@ -21,17 +21,21 @@
import java.util.Set;
import java.util.Stack;
-import org.apache.axiom.soap.SOAPEnvelope;
+
+import javax.script.ScriptException;
+
import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.OMException;
+import org.apache.axiom.soap.SOAPEnvelope;
import org.apache.axis2.AxisFault;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.addressing.RelatesTo;
-import org.apache.synapse.MessageContext;
-import org.apache.synapse.Mediator;
+import org.apache.bsf.xml.XMLHelper;
import org.apache.synapse.FaultHandler;
+import org.apache.synapse.Mediator;
+import org.apache.synapse.MessageContext;
import org.apache.synapse.config.SynapseConfiguration;
import org.apache.synapse.core.SynapseEnvironment;
-import org.apache.synapse.mediators.bsf.convertors.OMElementConvertor;
import org.apache.synapse.endpoints.Endpoint;
/**
@@ -43,11 +47,11 @@
/** The actual Synapse message context reference */
private MessageContext mc;
/** The OMElement to scripting language object converter for the selected language */
- private OMElementConvertor convertor;
+ private XMLHelper xmlHelper;
- public ScriptMessageContext(MessageContext mc, OMElementConvertor convertor) {
+ public ScriptMessageContext(MessageContext mc, XMLHelper xmlHelper) {
this.mc = mc;
- this.convertor = convertor;
+ this.xmlHelper = xmlHelper;
}
/**
@@ -55,30 +59,35 @@
* The payload is the first element inside the SOAP <Body> tags
*
* @return the XML SOAP Body
+ * @throws ScriptException
+ * @throws OMException
*/
- public Object getPayloadXML() {
- return convertor.toScript(mc.getEnvelope().getBody().getFirstElement());
+ public Object getPayloadXML() throws OMException, ScriptException {
+ return xmlHelper.toScriptXML(mc.getEnvelope().getBody().getFirstElement());
}
/**
* Set the SOAP body payload from XML
*
* @param payload
+ * @throws ScriptException
+ * @throws OMException
*
*/
- public void setPayloadXML(Object payload) {
+ public void setPayloadXML(Object payload) throws OMException, ScriptException {
OMElement firstChild = mc.getEnvelope().getBody().getFirstElement();
- firstChild.insertSiblingAfter(convertor.fromScript(payload));
+ firstChild.insertSiblingAfter(xmlHelper.toOMElement(payload));
firstChild.detach();
}
/**
* Get the XML representation of the complete SOAP envelope
* @return return an object that represents the payload in the current scripting language
+ * @throws ScriptException
*/
- public Object getEnvelopeXML() {
- return convertor.toScript(mc.getEnvelope());
+ public Object getEnvelopeXML() throws ScriptException {
+ return xmlHelper.toScriptXML(mc.getEnvelope());
}
// helpers to set EPRs from a script string
Modified: webservices/synapse/trunk/java/modules/extensions/src/test/java/org/apache/synapse/mediators/bsf/ScriptMediatorTest.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/extensions/src/test/java/org/apache/synapse/mediators/bsf/ScriptMediatorTest.java?view=diff&rev=520194&r1=520193&r2=520194
==============================================================================
--- webservices/synapse/trunk/java/modules/extensions/src/test/java/org/apache/synapse/mediators/bsf/ScriptMediatorTest.java (original)
+++ webservices/synapse/trunk/java/modules/extensions/src/test/java/org/apache/synapse/mediators/bsf/ScriptMediatorTest.java Mon Mar 19 17:21:23 2007
@@ -19,20 +19,10 @@
package org.apache.synapse.mediators.bsf;
-import java.net.URL;
-import java.util.HashMap;
-import java.util.Map;
-
import junit.framework.TestCase;
-import org.apache.axiom.om.OMElement;
import org.apache.synapse.MessageContext;
-import org.apache.synapse.config.Entry;
import org.apache.synapse.mediators.TestUtils;
-import org.apache.synapse.mediators.bsf.convertors.DefaultOMElementConvertor;
-import org.apache.synapse.mediators.bsf.convertors.JSOMElementConvertor;
-import org.apache.synapse.mediators.bsf.convertors.OMElementConvertor;
-import org.apache.synapse.mediators.bsf.convertors.RBOMElementConvertor;
public class ScriptMediatorTest extends TestCase {
@@ -40,38 +30,36 @@
private static final String falsescript = "<x><![CDATA[ function mediate(mc) { return false;} ]]></x>";
-
-
public void testTrueMediator() throws Exception {
MessageContext mc = TestUtils.getTestContext("<foo/>", null);
- ScriptMediator mediator = new ScriptMediator("js",inlinescript);
+ ScriptMediator mediator = new ScriptMediator("js", inlinescript);
assertTrue(mediator.mediate(mc));
}
public void testFalseMediator() throws Exception {
MessageContext mc = TestUtils.getTestContext("<foo/>", null);
- ScriptMediator mediator = new ScriptMediator("js",falsescript);
+ ScriptMediator mediator = new ScriptMediator("js", falsescript);
assertTrue(mediator.mediate(mc));
}
-
public void testJSCreateOMElementConvertor() {
- ScriptMediator mediator = new ScriptMediator("js", "true;");
- OMElementConvertor convertor = mediator.getOMElementConvertor();
- assertTrue(convertor instanceof JSOMElementConvertor);
+ // ScriptMediator mediator = new ScriptMediator("js", "true;");
+ // ScriptEngine engine = mediator.scriptEngine;
+ // XMLHelper convertor = mediator.getOMElementConvertor(engine);
+ // assertTrue(convertor instanceof JavaScriptXMLHelper);
}
-// public void testRBCreateOMElementConvertor() {
-// ScriptMediator mediator = new ScriptMediator("ruby", null);
-// OMElementConvertor convertor = mediator.getOMElementConvertor();
-// assertTrue(convertor instanceof RBOMElementConvertor);
-// }
-//
-// public void testDefaultCreateOMElementConvertor() {
-// ScriptMediator mediator = new ScriptMediator("foo.bar", null);
-// OMElementConvertor convertor = mediator.getOMElementConvertor();
-// assertTrue(convertor instanceof DefaultOMElementConvertor);
-// }
+ // public void testRBCreateOMElementConvertor() {
+ // ScriptMediator mediator = new ScriptMediator("ruby", null);
+ // OMElementConvertor convertor = mediator.getOMElementConvertor();
+ // assertTrue(convertor instanceof RBOMElementConvertor);
+ // }
+ //
+ // public void testDefaultCreateOMElementConvertor() {
+ // ScriptMediator mediator = new ScriptMediator("foo.bar", null);
+ // OMElementConvertor convertor = mediator.getOMElementConvertor();
+ // assertTrue(convertor instanceof DefaultOMElementConvertor);
+ // }
}
Modified: webservices/synapse/trunk/java/modules/extensions/src/test/java/org/apache/synapse/mediators/bsf/javascript/JavaScriptMediatorTest.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/extensions/src/test/java/org/apache/synapse/mediators/bsf/javascript/JavaScriptMediatorTest.java?view=diff&rev=520194&r1=520193&r2=520194
==============================================================================
--- webservices/synapse/trunk/java/modules/extensions/src/test/java/org/apache/synapse/mediators/bsf/javascript/JavaScriptMediatorTest.java (original)
+++ webservices/synapse/trunk/java/modules/extensions/src/test/java/org/apache/synapse/mediators/bsf/javascript/JavaScriptMediatorTest.java Mon Mar 19 17:21:23 2007
@@ -27,7 +27,7 @@
public class JavaScriptMediatorTest extends TestCase {
- public void testTrueMediator() throws Exception {
+ public void testInlineMediator() throws Exception {
ScriptMediator mediator = new ScriptMediator("js", "mc.getPayloadXML().b == 'petra';");
MessageContext mc = TestUtils.getTestContext("<a><b>petra</b></a>", null);
@@ -40,4 +40,16 @@
assertTrue(mediator.mediate(mc));
}
+ public void testInlineMediator2() throws Exception {
+ ScriptMediator mediator = new ScriptMediator("js", "mc.getPayloadXML().b == 'petra';");
+
+ MessageContext mc = TestUtils.getTestContext("<a><b>petra</b></a>", null);
+ assertTrue(mediator.mediate(mc));
+
+ mc = TestUtils.getTestContext("<a><b>sue</b></a>", null);
+ assertFalse(mediator.mediate(mc));
+
+ mc = TestUtils.getTestContext("<a><b>petra</b></a>", null);
+ assertTrue(mediator.mediate(mc));
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: synapse-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: synapse-dev-help@ws.apache.org