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