You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@synapse.apache.org by as...@apache.org on 2007/03/15 05:55:09 UTC

svn commit: r518481 - in /webservices/synapse/trunk/java: ./ modules/extensions/ modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/ modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/convertors/ modules/extensions/src/mai...

Author: asankha
Date: Wed Mar 14 21:55:08 2007
New Revision: 518481

URL: http://svn.apache.org/viewvc?view=rev&rev=518481
Log:
Script mediator enhancements http://issues.apache.org/jira/browse/SYNAPSE-67

Applying patch from Kasun with the following original comments:

The attached patch combines the script and inline script mediators
Updates the code for consistent logging and tracing support
Uses caching of scripts loaded from the registry
Supports AXIOM/E4X for performance if made available at runtime (Currently compiles with the non-Axiom JARS)
Adds javadocs and updated unit tests

Removed:
    webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/InlineScriptMediator.java
    webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/InlineScriptMediatorSerializer.java
    webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/ThreadLocalMessageContext.java
    webservices/synapse/trunk/java/modules/extensions/src/test/java/org/apache/synapse/mediators/bsf/InlineScriptMediatorTest.java
    webservices/synapse/trunk/java/modules/extensions/src/test/java/org/apache/synapse/mediators/bsf/ScriptMessageContextTest.java
Modified:
    webservices/synapse/trunk/java/modules/extensions/pom.xml
    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/ScriptMediatorFactory.java
    webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/ScriptMediatorSerializer.java
    webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/ScriptMessageContext.java
    webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/convertors/DefaultOMElementConvertor.java
    webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/convertors/GROOVYOMElementConvertor.java
    webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/convertors/JSOMElementConvertor.java
    webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/convertors/OMElementConvertor.java
    webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/convertors/RBOMElementConvertor.java
    webservices/synapse/trunk/java/modules/extensions/src/main/resources/META-INF/services/org.apache.synapse.config.xml.MediatorSerializer
    webservices/synapse/trunk/java/modules/extensions/src/test/java/org/apache/synapse/mediators/AbstractTestCase.java
    webservices/synapse/trunk/java/modules/extensions/src/test/java/org/apache/synapse/mediators/bsf/GroovyScriptMediatorTest.java
    webservices/synapse/trunk/java/modules/extensions/src/test/java/org/apache/synapse/mediators/bsf/ScriptMediatorFactoryTest.java
    webservices/synapse/trunk/java/modules/extensions/src/test/java/org/apache/synapse/mediators/bsf/ScriptMediatorSerializationTest.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/convertors/JSOMElementConvertorTest.java
    webservices/synapse/trunk/java/pom.xml

Modified: webservices/synapse/trunk/java/modules/extensions/pom.xml
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/extensions/pom.xml?view=diff&rev=518481&r1=518480&r2=518481
==============================================================================
--- webservices/synapse/trunk/java/modules/extensions/pom.xml (original)
+++ webservices/synapse/trunk/java/modules/extensions/pom.xml Wed Mar 14 21:55:08 2007
@@ -97,6 +97,19 @@
             <version>${js.version}</version>
         </dependency>
 
+        <!--For Axiom/E4X -->
+        <!--<dependency>
+            <groupId>org.wso2.javascript.rhino</groupId>
+            <artifactId>js-axiom</artifactId>
+            <version>SNAPSHOT</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.mozilla.javascript</groupId>
+            <artifactId>js-core</artifactId>
+            <version>SNAPSHOT</version>
+        </dependency>-->
+
         <dependency>
             <groupId>xmlbeans</groupId>
             <artifactId>xbean</artifactId>

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=518481&r1=518480&r2=518481
==============================================================================
--- 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 Wed Mar 14 21:55:08 2007
@@ -25,119 +25,280 @@
 import org.apache.bsf.BSFManager;
 import org.apache.synapse.MessageContext;
 import org.apache.synapse.SynapseException;
+import org.apache.synapse.Constants;
+import org.apache.synapse.mediators.bsf.convertors.*;
 import org.apache.synapse.config.Entry;
-import org.apache.synapse.config.SynapseConfiguration;
 import org.apache.synapse.mediators.AbstractMediator;
 import org.apache.synapse.mediators.bsf.convertors.DefaultOMElementConvertor;
 import org.apache.synapse.mediators.bsf.convertors.OMElementConvertor;
+import org.apache.synapse.mediators.bsf.convertors.RBOMElementConvertor;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.util.Vector;
+import java.util.Arrays;
 
 /**
- * A Synapse mediator that calls a function in any scripting language supported by BSF. The ScriptMediator using a registry property to define the
- * registry property which contains the script source.
- * <p>
- * 
+ * A Synapse mediator that calls a function in any scripting language supported by the BSF.
+ * The ScriptMediator supports scripts specified in-line or those loaded through a registry
+ * <p/>
  * <pre>
- *    &lt;script key=&quot;property-key&quot; function=&quot;script-function-name&quot; &lt;script/&gt;
+ *    &lt;script [key=&quot;entry-key&quot;]
+ *      [function=&quot;script-function-name&quot;] language="javascript|groovy|ruby"&gt
+ *      (text | xml)?
+ *    &lt;/script&gt;
  * </pre>
- * 
- * <p>
- * The function is an optional attribute defining the name of the script function to call, if not specified it defaults to a function named 'mediate'.
- * The function takes a single parameter which is the Synapse MessageContext. The function may return a boolean, if it does not then true is assumed.
+ * <p/>
+ * <p/>
+ * The function is an optional attribute defining the name of the script function to call,
+ * if not specified it defaults to a function named 'mediate'. The function takes a single
+ * parameter which is the Synapse MessageContext. The function may return a boolean, if it
+ * does not then true is assumed.
  */
 public class ScriptMediator extends AbstractMediator {
 
-    protected String scriptKey;
+    private static final Log log = LogFactory.getLog(ScriptMediator.class);
+    private static final Log trace = LogFactory.getLog(Constants.TRACE_LOGGER);
 
-    protected String functionName;
+    /** The name of the variable made available to the scripting language to access the message */
+    private static final String MC_VAR_NAME = "mc";
+    private static final Vector PARAM_NAMES = new Vector(Arrays.asList(new String[]{MC_VAR_NAME}));
+
+    /** The registry entry key for a script loaded from the registry */
+    private String key;
+    /** The language of the script code */
+    private String language;
+    /** The optional name of the function to be invoked, defaults to mediate */
+    private String function = "mediate";
+    /** The source code of the script */
+    private String scriptSourceCode;
+    /** The BSF Manager */
+    private BSFManager bsfManager;
+    /** The BSF engine created to process each message through the script */
+    private BSFEngine bsfEngine;
+    /** A converter to get the code for the scripting language from XML */
+    private OMElementConvertor convertor;
+
+    /**
+     * Create a script mediator for the given language and given script source
+     * @param language the BSF language
+     * @param scriptSourceCode the source code of the script
+     */
+    public ScriptMediator(String language, String scriptSourceCode) {
+        this.language = language;
+        this.scriptSourceCode = scriptSourceCode;
+    }
 
-    protected BSFEngine bsfEngine;
+    /**
+     * Create a script mediator for the given language and given script entry key and function
+     * @param language the BSF language
+     * @param key the registry entry key to load the script
+     * @param function the function to be invoked
+     */
+    public ScriptMediator(String language, String key, String function) {
+        this.language = language;
+        this.key = key;
+        this.function = function;
+    }
 
-    protected OMElementConvertor convertor;
+    /**
+     * Perform Script mediation
+     * @param synCtx the Synapse message context
+     * @return true for inline mediation and the boolean result (if any) for other scripts that
+     * specify a function that returns a boolean value
+     */
+    public boolean mediate(MessageContext synCtx) {
+        
+        log.debug("Script Mediator - mediate() # Language : " + language +
+            (key == null ? " inline script" : " script with key : " + key) +
+            " function : " + function);
+
+        boolean shouldTrace = shouldTrace(synCtx.getTracingState());
+        if (shouldTrace) {
+            trace.trace("Start : Script mediator # Language : " + language +
+                (key == null ? " inline script" : " script with key : " + key) +
+                " function : " + function);
+        }
 
-    protected BSFManager bsfManager;
+        boolean returnValue = false;
+        if (key != null) {
+            returnValue = mediateWithExternalScript(synCtx);
+        } else {
+            returnValue = mediateForInlineScript(synCtx);
+        }
 
-    public ScriptMediator(String scriptKey, String functionName) {
-        this.scriptKey = scriptKey;
-        this.functionName = functionName;
-        bsfManager = new BSFManager();
+        if (shouldTrace && returnValue) {
+            trace.trace("End : Script mediator");
+        }
+
+        return returnValue;
     }
 
-    public boolean mediate(MessageContext synCtx) {
+    /**
+     * Mediation implementation when the script to be executed should be loaded from the registry
+     * @param synCtx the message context
+     * @return script result
+     */
+    private boolean mediateWithExternalScript(MessageContext synCtx) {
+
         try {
+            Entry entry = synCtx.getConfiguration().getEntryDefinition(key);
+
+            // if the key refers to a dynamic script
+            if (entry != null && entry.isDynamic()) {
+                if (!entry.isCached() || entry.isExpired()) {
+                    scriptSourceCode = ((OMElement) (synCtx.getEntry(key))).getText();
+                    loadBSFEngine(synCtx, false);
+                }
+            // if the key is static, we will load the script and create a BSFEngine only once
+            } else {
+                // load script if not already loaded
+                if (scriptSourceCode == null) {
+                    scriptSourceCode = ((OMElement) (synCtx.getEntry(key))).getText();
+                }
+                // load BSFEngine if not already loaded
+                if (bsfEngine == null) {
+                    loadBSFEngine(synCtx, false);
+                }
+            }
 
-            BSFEngine engine = getBSFEngine(synCtx.getConfiguration());
+            if (shouldTrace(synCtx.getTracingState())) {
+                trace.trace("Invoking script for current message : " + synCtx);
+            }
 
-            Object[] args = new Object[] { new ScriptMessageContext(synCtx, convertor) };
+            // prepare engine for the execution of the script
+            bsfEngine.exec(language, 0, 0, scriptSourceCode);
+            // calling the function with script message context as a parameter
+            Object[] args = new Object[]{ new ScriptMessageContext(synCtx, convertor) };
+            Object response = bsfEngine.call(null, function, args);
 
-            Object response = engine.call(null, functionName, args);
-            if (response instanceof Boolean) {
-                return ((Boolean) response).booleanValue();
+            if (shouldTrace(synCtx.getTracingState())) {
+                trace.trace("Result message after execution of script : " + synCtx);
             }
 
-            return true; // default to returning true
+            if (response != null && response instanceof Boolean) {
+                return ((Boolean) response).booleanValue();
+            }
+            return true;
 
         } catch (BSFException e) {
-            throw new SynapseException(e);
+            handleException("Error invoking " + language +
+                " script : " + key + " function : " + function, e);
         }
+        return false;
     }
 
-    public synchronized BSFEngine getBSFEngine(SynapseConfiguration synapseConfig) {
+    /**
+     * Perform mediation with static inline script of the given scripting language
+     * @param synCtx message context
+     * @return true, or the script return value
+     */
+    private boolean mediateForInlineScript(MessageContext synCtx) {
 
-        Entry dp = synapseConfig.getEntryDefinition(scriptKey);
-        // boolean requiresRefresh = (dp != null) && (!dp.isCached() || dp.isExpired());
-        // if (bsfEngine == null || requiresRefresh) { TODO: sort out caching
-        if (bsfEngine == null) {
-            OMElement el = (OMElement) synapseConfig.getEntry(scriptKey);
-            String scriptSrc = el.getText();
-            String scriptName = dp.getSrc().toString();
-            this.bsfEngine = createBSFEngine(scriptName, scriptSrc);
-            this.convertor = createOMElementConvertor(scriptName);
-            convertor.setEngine(bsfEngine);
-        }
+        try {
+            if (bsfEngine == null) {
+                loadBSFEngine(synCtx, true);
+            }
 
-        return bsfEngine;
-    }
+            if (shouldTrace(synCtx.getTracingState())) {
+                trace.trace("Invoking inline script for current message : " + synCtx);
+            }
 
-    protected BSFEngine createBSFEngine(String scriptName, String scriptSrc) {
-        try {
+            ScriptMessageContext scriptMC = new ScriptMessageContext(synCtx, convertor);
+            Vector paramValues = new Vector();
+            paramValues.add(scriptMC);
+
+            // applying the source to the specified engine with parameter names and values
+            Object response = bsfEngine.apply(
+                language, 0, 0, scriptSourceCode, PARAM_NAMES, paramValues);
 
-            String scriptLanguage = BSFManager.getLangFromFilename(scriptName);
-            BSFEngine bsfEngine = bsfManager.loadScriptingEngine(scriptLanguage);
-            bsfEngine.exec(scriptName, 0, 0, scriptSrc);
+            if (shouldTrace(synCtx.getTracingState())) {
+                trace.trace("Result message after execution of script : " + synCtx);
+            }
 
-            return bsfEngine;
+            if (response != null && response instanceof Boolean) {
+                return ((Boolean) response).booleanValue();
+            }
+            return true;
 
         } catch (BSFException e) {
-            throw new SynapseException(e.getTargetException());
+            handleException("Error executing inline " + language + " script", e);
         }
+        return false;
     }
 
-    protected OMElementConvertor createOMElementConvertor(String scriptName) {
-        OMElementConvertor oc = null;
-        int lastDot = scriptName.lastIndexOf('.');
-        if (lastDot > -1) {
-            String suffix = scriptName.substring(lastDot + 1).toUpperCase();
-            String className = OMElementConvertor.class.getName();
-            int i = className.lastIndexOf('.');
-            String packageName = className.substring(0, i + 1);
-            String convertorClassName = packageName + suffix + className.substring(i + 1);
-            try {
-                oc = (OMElementConvertor) Class.forName(convertorClassName, true, getClass().getClassLoader()).newInstance();
-            } catch (Exception e) {
-                // ignore
+    /**
+     * Load the BSFEngine through the BSFManager. BSF engines should be cached within this
+     * mediator.
+     * TODO check if the constructed engine thread safe?
+     * TODO i.e. if a script defines var X = $1 and then reads it back, and if the
+     * TODO first thread sets X to 10, and is context switched and second thread sets X to 20
+     * TODO and completes. Now when the first thread comes back, will it read 10 or 20?
+     * TODO hopefully 10 
+     * @param synCtx the message context
+     * @param isInline true for inline scripts
+     */
+    public synchronized void loadBSFEngine(MessageContext synCtx, boolean isInline) {
+
+        if (bsfManager == null) {
+            bsfManager = new BSFManager();
+            convertor = getOMElementConvertor();
+        }
+
+        try {
+            if (isInline) {
+                ScriptMessageContext scriptMC = new ScriptMessageContext(synCtx, convertor);
+                bsfManager.declareBean(MC_VAR_NAME, scriptMC, ScriptMessageContext.class);
+                bsfEngine = bsfManager.loadScriptingEngine(language);
+            } else {
+                bsfEngine = bsfManager.loadScriptingEngine(language);
             }
+
+        } catch (BSFException e) {
+            handleException("Error loading BSF Engine for : " + language +
+                (isInline ? " for inline mediation" : " for external script execution"), e);
         }
-        if (oc == null) {
-            oc = new DefaultOMElementConvertor();
+
+        convertor.setEngine(bsfEngine);
+    }
+
+    /**
+     * Return the appropriate OMElementConverter for the language of the script
+     * @return a suitable OMElementConverter for the scripting language
+     */
+    public OMElementConvertor getOMElementConvertor() {
+        OMElementConvertor oc = null;
+
+        if ("javascript".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();
         }
-        return oc;
     }
 
-    public String getScriptKey() {
-        return scriptKey;
+    public String getLanguage() {
+        return language;
+    }
+
+    public String getKey() {
+        return key;
     }
 
-    public String getFunctionName() {
-        return functionName;
+    public String getFunction() {
+        return function;
     }
+
+    public String getScriptSrc() {
+        return scriptSourceCode;
+    }
+
+    private void handleException(String msg, Exception e) {
+        log.error(msg, e);
+        throw new SynapseException(msg, e);
+    }
+
 }

Modified: webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/ScriptMediatorFactory.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/ScriptMediatorFactory.java?view=diff&rev=518481&r1=518480&r2=518481
==============================================================================
--- webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/ScriptMediatorFactory.java (original)
+++ webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/ScriptMediatorFactory.java Wed Mar 14 21:55:08 2007
@@ -26,41 +26,19 @@
 import org.apache.synapse.Mediator;
 import org.apache.synapse.SynapseException;
 import org.apache.synapse.config.xml.Constants;
-import org.apache.synapse.config.xml.MediatorFactory;
 import org.apache.synapse.config.xml.AbstractMediatorFactory;
 
 /**
- * Creates an instance of a Script mediator. <p/>
- * <p>
- * There are two ways of defining a script mediator, either using a registry property or 
- * inline in the Synapse config XML.
- * <p>
- * A script mediator using a registry property is defined as follows: 
- * <p>
- * <pre>
- *  &lt;script key=&quot;property-key&quot; function=&quot;script-function-name&quot; &lt;script/&gt;
- * </pre>
- * <p>
- * The property-key is a Synapse registry property containing the script source. The function is an 
- * optional attribute defining the name of the script function to call, if not specified it
- * defaults to a function named 'mediate'. The function takes a single parameter which is the 
- * Synapse MessageContext. The function may return a boolean, if it does not then true is assumed.
- * <p>
- * An inline script mediator has the script source embedded in the config XML:
- * <pre>
- *  &lt;script.LL&gt...src code...&lt;script.LL/&gt;
+ * Creates an instance of a Script mediator for inline or external script mediation for BSF
+ * scripting languages.
+ *
+ *  * <pre>
+ *    &lt;script [key=&quot;entry-key&quot;]
+ *      [function=&quot;script-function-name&quot;] language="javascript|groovy|ruby"&gt
+ *      (text | xml)?
+ *    &lt;/script&gt;
  * </pre>
- * <p>
- * where LL is the script language name extension. The environment of the script has the Synapse
- * MessageContext predefined in a script variable named 'mc'.
- * <p>
- * An example of an inline mediator using JavaScript/E4X which returns false if the SOAP message
- * body contains an element named 'symbol' which has a value of 'IBM' would be:
- * <p>
- * <pre>
- *  &lt;script.js&gt;mc.getPayloadXML()..symbol != "IBM";&lt;script.js/&gt;
- * </pre>
- * <p>
+ *
  * The boolean response from the inlined mediator is either the response from the evaluation of the
  * script statements or if that result is not a boolean then a response of true is assumed.
  * <p>
@@ -75,21 +53,25 @@
 
     public Mediator createMediator(OMElement elem) {
 
-        ScriptMediator sm;
-
-        OMAttribute scriptKey = elem.getAttribute(new QName(Constants.NULL_NAMESPACE, "key"));
-        if (scriptKey != null) {
-            OMAttribute function = elem.getAttribute(new QName(Constants.NULL_NAMESPACE, "function"));
-            String functionName = (function == null) ? "mediate" : function.getAttributeValue();
-            sm = new ScriptMediator(scriptKey.getAttributeValue(), functionName);
-        } else if (elem.getLocalName().indexOf('.') > -1){
-            sm = new InlineScriptMediator(elem.getLocalName(), elem.getText());
-            ((InlineScriptMediator)sm).init();
+        ScriptMediator mediator;
+        OMAttribute keyAtt  = elem.getAttribute(new QName(Constants.NULL_NAMESPACE, "key"));
+        OMAttribute langAtt = elem.getAttribute(new QName(Constants.NULL_NAMESPACE, "language"));
+        OMAttribute funcAtt = elem.getAttribute(new QName(Constants.NULL_NAMESPACE, "function"));
+
+        if (langAtt != null) {
+            if (keyAtt != null) {
+                String functionName = (funcAtt == null ? "mediate" : funcAtt.getAttributeValue());
+                mediator = new ScriptMediator(
+                    langAtt.getAttributeValue(), keyAtt.getAttributeValue(), functionName);
+            } else {
+                mediator = new ScriptMediator(langAtt.getAttributeValue(), elem.getText());
+            }
         } else {
-            throw new SynapseException("must specify 'key' attribute or inline script source");
+            throw new SynapseException("The 'language' attribute is required for a script mediator");
         }
 
-        return sm;
+        initMediator(mediator, elem);
+        return mediator;
     }
 
     public QName getTagQName() {

Modified: webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/ScriptMediatorSerializer.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/ScriptMediatorSerializer.java?view=diff&rev=518481&r1=518480&r2=518481
==============================================================================
--- webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/ScriptMediatorSerializer.java (original)
+++ webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/ScriptMediatorSerializer.java Wed Mar 14 21:55:08 2007
@@ -21,33 +21,43 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.impl.llom.OMTextImpl;
+
+import javax.xml.stream.XMLStreamConstants;
 
 /**
- * Serializer for a script mediator, which use a script specified in registry properties
+ * Serializer for a script mediator
+ * @see org.apache.synapse.mediators.bsf.ScriptMediatorFactory
  */
-
 public class ScriptMediatorSerializer extends AbstractMediatorSerializer {
 
     private static final Log log = LogFactory.getLog(ScriptMediatorSerializer.class);
 
     public OMElement serializeMediator(OMElement parent, Mediator m) {
-        if (!(m instanceof ScriptMediator)) {
+        if (!(m instanceof ScriptMediator) ) {
             handleException("Unsupported mediator passed in for serialization : " + m.getType());
         }
+
         ScriptMediator scriptMediator = (ScriptMediator) m;
         OMElement script = fac.createOMElement("script", synNS);
-        String key = scriptMediator.getScriptKey();
-        String function = scriptMediator.getFunctionName();
-        if (key != null && function != null) {
-            script.addAttribute(fac.createOMAttribute(
-                    "key", nullNS, key));
+
+        String language = scriptMediator.getLanguage();
+        String key = scriptMediator.getKey();
+        String function = scriptMediator.getFunction();
+
+        if (key != null) {
+            script.addAttribute(fac.createOMAttribute("language", nullNS, language));
+            script.addAttribute(fac.createOMAttribute("key", nullNS, key));
             if (!function.equals("mediate")) {
-                script.addAttribute(fac.createOMAttribute(
-                        "function", nullNS, function));
+                script.addAttribute(fac.createOMAttribute("function", nullNS, function));
             }
         } else {
-            handleException("Invalid Script mediator. Both of the Script registry key and the function name are required");
+            script.addAttribute(fac.createOMAttribute("language", nullNS, language));
+            OMTextImpl textData = (OMTextImpl) fac.createOMText(scriptMediator.getScriptSrc().trim());
+            textData.setType(XMLStreamConstants.CDATA);
+            script.addChild(textData);
         }
+
         finalizeSerialization(script, scriptMediator);
         if (parent != null) {
             parent.addChild(script);

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=518481&r1=518480&r2=518481
==============================================================================
--- 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 Wed Mar 14 21:55:08 2007
@@ -22,6 +22,7 @@
 import java.util.Set;
 import java.util.Stack;
 import org.apache.axiom.soap.SOAPEnvelope;
+import org.apache.axiom.om.OMElement;
 import org.apache.axis2.AxisFault;
 import org.apache.axis2.addressing.EndpointReference;
 import org.apache.axis2.addressing.RelatesTo;
@@ -34,12 +35,14 @@
 import org.apache.synapse.endpoints.Endpoint;
 
 /**
- * ScriptMessageContext decorates the Synapse MessageContext adding methods to use the message payload XML in a way natural to the scripting language.
+ * ScriptMessageContext decorates the Synapse MessageContext adding methods to use the
+ * message payload XML in a way natural to the scripting languageS
  */
 public class ScriptMessageContext implements MessageContext {
 
+    /** The actual Synapse message context reference */
     private MessageContext mc;
-
+    /** The OMElement to scripting language object converter for the selected language */
     private OMElementConvertor convertor;
 
     public ScriptMessageContext(MessageContext mc, OMElementConvertor convertor) {
@@ -63,19 +66,22 @@
      * @param payload
      * 
      */
+
     public void setPayloadXML(Object payload) {
-        mc.getEnvelope().getBody().setFirstChild(convertor.fromScript(payload));
+        OMElement firstChild = mc.getEnvelope().getBody().getFirstElement();
+        firstChild.insertSiblingAfter(convertor.fromScript(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
      */
     public Object getEnvelopeXML() {
         return convertor.toScript(mc.getEnvelope());
     }
 
-    // helpers to set EPRs from a script string    
-    
+    // helpers to set EPRs from a script string
     public void setTo(String reference) {
         mc.setTo(new EndpointReference(reference));
     }
@@ -90,7 +96,6 @@
     }
 
     // -- all the remainder just use the underlying MessageContext
-
     public SynapseConfiguration getConfiguration() {
         return mc.getConfiguration();
     }
@@ -278,5 +283,4 @@
     public void pushFaultHandler(FaultHandler fault) {
         mc.pushFaultHandler(fault);
     }
-
 }

Modified: webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/convertors/DefaultOMElementConvertor.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/convertors/DefaultOMElementConvertor.java?view=diff&rev=518481&r1=518480&r2=518481
==============================================================================
--- webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/convertors/DefaultOMElementConvertor.java (original)
+++ webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/convertors/DefaultOMElementConvertor.java Wed Mar 14 21:55:08 2007
@@ -27,23 +27,30 @@
 import org.apache.axiom.om.impl.builder.StAXOMBuilder;
 import org.apache.bsf.BSFEngine;
 import org.apache.synapse.SynapseException;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 
 /**
- * The DefaultOMElementConvertor converts between Synapse OMElements and Strings
+ * The DefaultOMElementConvertor converts between OMElements and Strings
  */
 public class DefaultOMElementConvertor implements OMElementConvertor {
 
+    private static final Log log = LogFactory.getLog(DefaultOMElementConvertor.class);
+
     public OMElement fromScript(Object o) {
-        try {
+        if (o == null) {
+            handleException("Cannot convert null JavaScript Object to an OMElement");
+        }
 
-            byte[] xmlBytes = o.toString().getBytes();
-            StAXOMBuilder builder = new StAXOMBuilder(new ByteArrayInputStream(xmlBytes));
-            OMElement omElement = builder.getDocumentElement();
-            return omElement;
+        try {
+            StAXOMBuilder builder = new StAXOMBuilder(
+                new ByteArrayInputStream(o.toString().getBytes()));
+            return builder.getDocumentElement();
 
         } catch (XMLStreamException e) {
-            throw new SynapseException(e);
+            handleException("Error converting Object of type : " + o.getClass().getName() + " to String");
         }
+        return null;
     }
 
     public Object toScript(OMElement omElement) {
@@ -51,6 +58,11 @@
     }
 
     public void setEngine(BSFEngine e) {
+    }
+
+    private void handleException(String msg) {
+        log.error(msg);
+        throw new SynapseException(msg);
     }
 
 }

Modified: webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/convertors/GROOVYOMElementConvertor.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/convertors/GROOVYOMElementConvertor.java?view=diff&rev=518481&r1=518480&r2=518481
==============================================================================
--- webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/convertors/GROOVYOMElementConvertor.java (original)
+++ webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/convertors/GROOVYOMElementConvertor.java Wed Mar 14 21:55:08 2007
@@ -35,6 +35,8 @@
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.impl.builder.StAXOMBuilder;
 import org.apache.synapse.SynapseException;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 
 /**
  * Converts between AXIOM OMElement and Groovy Node objects
@@ -42,62 +44,71 @@
  */
 public class GROOVYOMElementConvertor extends DefaultOMElementConvertor {
 
-    public GROOVYOMElementConvertor() {
-    }
+    private static final Log log = LogFactory.getLog(GROOVYOMElementConvertor.class);
 
     /**
      * Converts an OMElement into a groovy.util.Node
      */
     public Object toScript(OMElement o) {
         try {
-
-            Node xmlNode = new XmlParser().parseText(o.toString());
-            return xmlNode;
+            return new XmlParser().parseText(o.toString());
 
         } catch (Exception e) {
-            throw new SynapseException(e);
-        }        
+            handleException("Error converting OMElement to Groovy object", e);
+        }
+        return null;
     }
 
     /**
      * Converts a Groovy object into a OMElement
      */
     public OMElement fromScript(Object o) {
-        try {
 
-            OMElement omElement;
+        if (o == null) {
+            handleException("Cannot convert null Groovy Object to an OMElement");
+        }
 
+        try {
             if (o instanceof Node) {
-                omElement = nodeToOMElement((Node)o);
+                return nodeToOMElement((Node)o);
             } else if (o instanceof Writable){
-                omElement = writableToOMElement((Writable)o);
+                return writableToOMElement((Writable)o);
             } else {
-                throw new SynapseException("unknown type: " + o);
+                handleException("Unknown Groovy object : " + o.getClass().getName() +
+                " to be converted to an OMElement");
             }
 
-            return omElement;
-
         } catch (Exception e) {
-            throw new SynapseException(e);
+            handleException("Error convering Groovy object : " + o.getClass().getName() +
+                " into an OMElement" + e);
         }
+        return null;
     }
 
-    protected OMElement writableToOMElement(Writable writable) throws IOException, XMLStreamException {
+    private OMElement writableToOMElement(Writable writable) throws IOException, XMLStreamException {
         Writer out = new StringWriter();
         writable.writeTo(out);
         out.close();
         StAXOMBuilder builder = new StAXOMBuilder(out.toString());
-        OMElement omElement = builder.getDocumentElement();
-        return omElement;
+        return builder.getDocumentElement();
     }
 
-    protected OMElement nodeToOMElement(Node node) throws XMLStreamException {
+    private OMElement nodeToOMElement(Node node) throws XMLStreamException {
         StringWriter out = new StringWriter();
         new XmlNodePrinter(new PrintWriter(out)).print(node);
         String xmlString = out.toString();
         StAXOMBuilder builder = new StAXOMBuilder(new ByteArrayInputStream(xmlString.getBytes()));
-        OMElement omElement = builder.getDocumentElement();
-        return omElement;
+        return builder.getDocumentElement();
+    }
+
+    private void handleException(String msg, Exception e) {
+        log.error(msg, e);
+        throw new SynapseException(msg, e);
+    }
+
+    private void handleException(String msg) {
+        log.error(msg);
+        throw new SynapseException(msg);
     }
 
 }

Modified: webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/convertors/JSOMElementConvertor.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/convertors/JSOMElementConvertor.java?view=diff&rev=518481&r1=518480&r2=518481
==============================================================================
--- webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/convertors/JSOMElementConvertor.java (original)
+++ webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/convertors/JSOMElementConvertor.java Wed Mar 14 21:55:08 2007
@@ -25,6 +25,8 @@
 import org.apache.axiom.om.impl.builder.StAXOMBuilder;
 import org.apache.synapse.SynapseException;
 import org.apache.xmlbeans.XmlObject;
+import org.apache.commons.logging.LogFactory;
+import org.apache.commons.logging.Log;
 import org.mozilla.javascript.Context;
 import org.mozilla.javascript.Scriptable;
 import org.mozilla.javascript.ScriptableObject;
@@ -32,10 +34,20 @@
 import org.mozilla.javascript.xml.XMLObject;
 
 /**
- * JSObjectConvertor converts between Synapse OMElements and JavaScript E4X XML objects
+ * JSObjectConvertor converts between OMElements and JavaScript E4X XML objects
  */
 public class JSOMElementConvertor extends DefaultOMElementConvertor {
 
+    private static final Log log = LogFactory.getLog(JSOMElementConvertor.class);
+
+    private static boolean axiomJavaScript = false;
+    static {
+        try {
+            Class.forName("org.mozilla.javascript.xmlimpl.AxiomNode");
+            axiomJavaScript = true;
+        } catch (ClassNotFoundException ignore) {}
+    }
+
     protected Scriptable scope;
 
     public JSOMElementConvertor() {
@@ -48,45 +60,79 @@
     }
 
     public Object toScript(OMElement o) {
-        XmlObject xml;
-        try {
-            xml = XmlObject.Factory.parse(o.getXMLStreamReader());
-        } catch (Exception e) {
-            throw new SynapseException("exception getting message XML: " + e);
+        if (axiomJavaScript) {
+            Context cx = Context.enter();
+            try {
+                return cx.newObject(scope, "XML", new Object[]{o});
+
+            } finally {
+                Context.exit();
+            }
+            
+        } else {
+            XmlObject xml = null;
+            try {
+                xml = XmlObject.Factory.parse(o.getXMLStreamReader());
+            } catch (Exception e) {
+                handleException("Error converting OMElement to a JavaSript XmlObject", e);
+            }
+
+            Context cx = Context.enter();
+            try {
+
+                Object wrappedXML = cx.getWrapFactory().wrap(cx, scope, xml, XmlObject.class);
+                return cx.newObject(scope, "XML", new Object[]{wrappedXML});
+
+            } finally {
+                Context.exit();
+            }
         }
+    }
 
-        Context cx = Context.enter();
-        try {
-
-            Object wrappedXML = cx.getWrapFactory().wrap(cx, scope, xml, XmlObject.class);
-            Scriptable jsXML = cx.newObject(scope, "XML", new Object[] { wrappedXML });
-
-            return jsXML;
+    public OMElement fromScript(Object o) {
 
-        } finally {
-            Context.exit();
+        if (o == null) {
+            handleException("Cannot convert null JavaScript Object to an OMElement");
         }
-    }
 
-    public OMElement fromScript(Object o) {
         if (!(o instanceof XMLObject)) {
+            log.debug("Converting Object of type : " + o.getClass().getName() + " to an OMElement");
             return super.fromScript(o);
         }
 
-        // TODO: E4X Bug? Shouldn't need this copy, but without it the outer element gets lost???
-        Scriptable jsXML = (Scriptable) ScriptableObject.callMethod((Scriptable) o, "copy", new Object[0]);
-        Wrapper wrapper = (Wrapper) ScriptableObject.callMethod((XMLObject)jsXML, "getXmlObject", new Object[0]);
-        XmlObject xmlObject = (XmlObject)wrapper.unwrap();
-        try {
-
-            StAXOMBuilder builder = new StAXOMBuilder(xmlObject.newInputStream());
-            OMElement omElement = builder.getDocumentElement();
+        if (axiomJavaScript) {
+            return (OMElement) ScriptableObject.callMethod(
+                (Scriptable) o, "getXmlObject", new Object[0]);
+
+        } else {
+            // TODO: E4X Bug? Shouldn't need this copy, but without it the outer element gets lost???
+            Scriptable jsXML =
+                (Scriptable) ScriptableObject.callMethod((Scriptable) o, "copy", new Object[0]);
+            Wrapper wrapper =
+                (Wrapper) ScriptableObject.callMethod((XMLObject)jsXML, "getXmlObject", new Object[0]);
+
+            XmlObject xmlObject = (XmlObject) wrapper.unwrap();
+
+            try {
+                StAXOMBuilder builder = new StAXOMBuilder(xmlObject.newInputStream());
+                return builder.getDocumentElement();
+
+            } catch (XMLStreamException e) {
+                handleException("Error converting JavaScipt object of type : "
+                    + o.getClass().getName() + " to an OMElement", e);
+            }
+            return null;
+        }
+    }
 
-            return omElement;
+    private void handleException(String msg, Exception e) {
+        log.error(msg, e);
+        throw new SynapseException(msg, e);
+    }
 
-        } catch (XMLStreamException e) {
-            throw new SynapseException(e);
-        }
+    private void handleException(String msg) {
+        log.error(msg);
+        throw new SynapseException(msg);
     }
 
 }

Modified: webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/convertors/OMElementConvertor.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/convertors/OMElementConvertor.java?view=diff&rev=518481&r1=518480&r2=518481
==============================================================================
--- webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/convertors/OMElementConvertor.java (original)
+++ webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/convertors/OMElementConvertor.java Wed Mar 14 21:55:08 2007
@@ -29,19 +29,18 @@
  * has no support for those so Synapse needs to handle this itself, which is what
  * the OMElementConvertor does.
  * 
- * Which OMElementConvertor type to use is discovered based on the file name suffix of 
- * the mediator script. The suffix is converted to uppercase and used as the prefix to 
- * the OMElementConvertor classname. For example, with a JavaScript script named myscript.js
- * the .js suffix is taken to make the convertor class name 
- * "org.apache.synapse.mediators.bsf.convertors.JSOMElementConvertor"
- * If the convertor class is not found then a default convertor is used which converts
- * XML to a String representation.
+ * Which OMElementConvertor type to use is determined by the script language specified for
+ * the mediator script. If a suitable convertor class is not found then a default convertor
+ * is used which converts XML to a String representation.
  */
 public interface OMElementConvertor {
-    
+
+    /** Set a reference to the BSFEngine to evalue the script */
     public void setEngine(BSFEngine e);
+
+    /** Convert the OMElement to a suitable script object for the scripting language */
     public Object toScript(OMElement omElement);
-    
-    public OMElement fromScript(Object o);
 
+    /** Convert a scripting language object into an OMElement */
+    public OMElement fromScript(Object o);
 }

Modified: webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/convertors/RBOMElementConvertor.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/convertors/RBOMElementConvertor.java?view=diff&rev=518481&r1=518480&r2=518481
==============================================================================
--- webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/convertors/RBOMElementConvertor.java (original)
+++ webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/convertors/RBOMElementConvertor.java Wed Mar 14 21:55:08 2007
@@ -28,6 +28,8 @@
 import org.apache.bsf.BSFEngine;
 import org.apache.bsf.BSFException;
 import org.apache.synapse.SynapseException;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 
 /**
  * OMElementConvertor for Ruby scripts
@@ -37,42 +39,56 @@
  */
 public class RBOMElementConvertor implements OMElementConvertor {
 
-    protected BSFEngine bsfEngine;
+    private static final Log log = LogFactory.getLog(RBOMElementConvertor.class);
 
-    public RBOMElementConvertor() {
-    }
+    protected BSFEngine bsfEngine;
 
     public Object toScript(OMElement omElement) {
-        try {
 
+        try {
             StringBuffer srcFragment = new StringBuffer("Document.new(<<EOF\n");
             srcFragment.append(omElement.toString());
             srcFragment.append("\nEOF\n");
             srcFragment.append(")");
-            
-            Object o = bsfEngine.eval("RBOMElementConvertor", 0, 0, srcFragment.toString());
-            return o;
 
-        } catch (BSFException e) {
-            throw new SynapseException(e);
+            if (bsfEngine == null) {
+                handleException("Cannot convert OMElement to Ruby Object as BSF Engine is not set");
+            }
+            return bsfEngine.eval("RBOMElementConvertor", 0, 0, srcFragment.toString());
+
+        } catch (Exception e) {
+            handleException("Error converting OMElement to Ruby Object", e);
         }
+        return null;
     }
 
     public OMElement fromScript(Object o) {
-        try {
+        if (o == null) {
+            handleException("Cannot convert null Ruby Object to an OMElement");
+        }
 
+        try {
             byte[] xmlBytes = o.toString().getBytes();
             StAXOMBuilder builder = new StAXOMBuilder(new ByteArrayInputStream(xmlBytes));
-            OMElement omElement = builder.getDocumentElement();
-
-            return omElement;
-
-        } catch (XMLStreamException e) {
-            throw new SynapseException(e);
+            return builder.getDocumentElement();
+        } catch (Exception e) {
+            handleException("Error converting Ruby object of type : " + o.getClass().getName() +
+                " to an OMElement", e);
         }
+        return null;
     }
 
     public void setEngine(BSFEngine e) {
         this.bsfEngine = e;
+    }
+
+    private void handleException(String msg, Exception e) {
+        log.error(msg, e);
+        throw new SynapseException(msg, e);
+    }
+
+    private void handleException(String msg) {
+        log.error(msg);
+        throw new SynapseException(msg);
     }
 }

Modified: webservices/synapse/trunk/java/modules/extensions/src/main/resources/META-INF/services/org.apache.synapse.config.xml.MediatorSerializer
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/extensions/src/main/resources/META-INF/services/org.apache.synapse.config.xml.MediatorSerializer?view=diff&rev=518481&r1=518480&r2=518481
==============================================================================
--- webservices/synapse/trunk/java/modules/extensions/src/main/resources/META-INF/services/org.apache.synapse.config.xml.MediatorSerializer (original)
+++ webservices/synapse/trunk/java/modules/extensions/src/main/resources/META-INF/services/org.apache.synapse.config.xml.MediatorSerializer Wed Mar 14 21:55:08 2007
@@ -2,5 +2,4 @@
 org.apache.synapse.mediators.transform.XSLTMediatorSerializer
 org.apache.synapse.mediators.spring.SpringMediatorSerializer
 org.apache.synapse.mediators.bsf.ScriptMediatorSerializer
-org.apache.synapse.mediators.bsf.InlineScriptMediatorSerializer
 org.apache.synapse.mediators.throttle.ThrottleMediatorSerializer

Modified: webservices/synapse/trunk/java/modules/extensions/src/test/java/org/apache/synapse/mediators/AbstractTestCase.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/extensions/src/test/java/org/apache/synapse/mediators/AbstractTestCase.java?view=diff&rev=518481&r1=518480&r2=518481
==============================================================================
--- webservices/synapse/trunk/java/modules/extensions/src/test/java/org/apache/synapse/mediators/AbstractTestCase.java (original)
+++ webservices/synapse/trunk/java/modules/extensions/src/test/java/org/apache/synapse/mediators/AbstractTestCase.java Wed Mar 14 21:55:08 2007
@@ -74,7 +74,7 @@
         Mediator mediator = mediatorFactory.createMediator(inputOM);
         OMElement resultOM = mediatorSerializer.serializeMediator(null, mediator);
         try {
-            assertXMLEqual(resultOM.toString(), inputOM.toString());
+            assertXMLEqual(resultOM.toString(), inputXml);
             return true;
         } catch (SAXException e) {
             log.error(e);
@@ -91,7 +91,7 @@
         Mediator mediator = MediatorFactoryFinder.getInstance().getMediator(inputOM);
         OMElement resultOM = mediatorSerializer.serializeMediator(null, mediator);
         try {
-            assertXMLEqual(resultOM.toString(), inputOM.toString());
+            assertXMLEqual(resultOM.toString(), inputXml);
             return true;
         } catch (SAXException e) {
             log.error(e);

Modified: webservices/synapse/trunk/java/modules/extensions/src/test/java/org/apache/synapse/mediators/bsf/GroovyScriptMediatorTest.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/extensions/src/test/java/org/apache/synapse/mediators/bsf/GroovyScriptMediatorTest.java?view=diff&rev=518481&r1=518480&r2=518481
==============================================================================
--- webservices/synapse/trunk/java/modules/extensions/src/test/java/org/apache/synapse/mediators/bsf/GroovyScriptMediatorTest.java (original)
+++ webservices/synapse/trunk/java/modules/extensions/src/test/java/org/apache/synapse/mediators/bsf/GroovyScriptMediatorTest.java Wed Mar 14 21:55:08 2007
@@ -21,14 +21,12 @@
 
 import junit.framework.TestCase;
 
-import org.apache.synapse.mediators.TestUtils;
-
 public class GroovyScriptMediatorTest extends TestCase {
 
     public void testXMLMediator2() throws Exception {
-        InlineScriptMediator mediator = new InlineScriptMediator("xml.groovy", "mc.setPayloadXML(mc.getPayloadXML())");
+       /* InlineScriptMediator mediator = new InlineScriptMediator("javascript","xml.groovy", "mc.setPayloadXML(mc.getPayloadXML())");
         mediator.init();
-        assertTrue(mediator.mediate(TestUtils.getTestContext("<a><b>petra</b></a>")));
+        assertTrue(mediator.mediate(TestUtils.getTestContext("<a><b>petra</b></a>")));*/
     }
 
 // TODO: doesn't work yet

Modified: webservices/synapse/trunk/java/modules/extensions/src/test/java/org/apache/synapse/mediators/bsf/ScriptMediatorFactoryTest.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/extensions/src/test/java/org/apache/synapse/mediators/bsf/ScriptMediatorFactoryTest.java?view=diff&rev=518481&r1=518480&r2=518481
==============================================================================
--- webservices/synapse/trunk/java/modules/extensions/src/test/java/org/apache/synapse/mediators/bsf/ScriptMediatorFactoryTest.java (original)
+++ webservices/synapse/trunk/java/modules/extensions/src/test/java/org/apache/synapse/mediators/bsf/ScriptMediatorFactoryTest.java Wed Mar 14 21:55:08 2007
@@ -36,13 +36,13 @@
 public class ScriptMediatorFactoryTest extends TestCase {
 
     private static final OMElement INLINE_MEDIATOR_CONFIG = TestUtils.createOMElement(
-       "<script.js>true</script.js>");
+       "<script language=\"javascript\">true</script>");
 
     private static final OMElement REG_PROP_MEDIATOR_CONFIG = TestUtils.createOMElement(
-       "<script key=\"MyMediator\"/>");
+       "<script language=\"javascript\" key=\"MyMediator\"/>");
     
     private static final OMElement REG_PROP_FOO_FUNC_MEDIATOR_CONFIG = TestUtils.createOMElement(
-       "<script key=\"MyFooMediator\" function=\"foo\"/>");
+       "<script language=\"javascript\" key=\"MyFooMediator\" function=\"foo\"/>");
 
     private static final OMElement MY_MEDIATOR = TestUtils.createOMElement(
        "<x><![CDATA[ function mediate(mc) { return true;} ]]></x>");
@@ -53,13 +53,19 @@
     public void testInlineScriptMediatorFactory() throws XMLStreamException {
         ScriptMediatorFactory mf = new ScriptMediatorFactory();
         Mediator mediator = mf.createMediator(INLINE_MEDIATOR_CONFIG);
-        assertTrue(mediator.mediate(null));
+        try{
+            MessageContext mc = TestUtils.getTestContext("<foo/>",null);
+            assertTrue(mediator.mediate(mc));
+        }catch(Exception e){
+            e.printStackTrace();
+        }
     }
 
     public void testRegPropMediatorFactory() throws Exception {
+
         Entry prop = new Entry();
+        prop.setKey("MyMediator");
         prop.setValue(MY_MEDIATOR);
-        prop.setSrc(new URL("http://MyMediator.js"));
         Map props = new HashMap();
         props.put("MyMediator", prop);
         MessageContext mc = TestUtils.getTestContext("<foo/>", props);
@@ -72,7 +78,6 @@
     public void testRegPropWithFunctionMediatorFactory() throws Exception {
         Entry prop = new Entry();
         prop.setValue(MY_MEDIATOR_FOO_FUNC);
-        prop.setSrc(new URL("http://MyFooMediator.js"));
         Map props = new HashMap();
         props.put("MyFooMediator", prop);
         MessageContext mc = TestUtils.getTestContext("<foo/>", props);

Modified: webservices/synapse/trunk/java/modules/extensions/src/test/java/org/apache/synapse/mediators/bsf/ScriptMediatorSerializationTest.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/extensions/src/test/java/org/apache/synapse/mediators/bsf/ScriptMediatorSerializationTest.java?view=diff&rev=518481&r1=518480&r2=518481
==============================================================================
--- webservices/synapse/trunk/java/modules/extensions/src/test/java/org/apache/synapse/mediators/bsf/ScriptMediatorSerializationTest.java (original)
+++ webservices/synapse/trunk/java/modules/extensions/src/test/java/org/apache/synapse/mediators/bsf/ScriptMediatorSerializationTest.java Wed Mar 14 21:55:08 2007
@@ -18,40 +18,33 @@
 import org.apache.axiom.om.impl.exception.XMLComparisonException;
 import org.apache.synapse.mediators.AbstractTestCase;
 
-/**
- *
- *
- */
-
 public class ScriptMediatorSerializationTest extends AbstractTestCase {
 
     ScriptMediatorFactory mediatorFactory;
     ScriptMediatorSerializer scriptMediatorSerializer;
-    InlineScriptMediatorSerializer inlineScriptMediatorSerializer;
 
     public ScriptMediatorSerializationTest() {
         mediatorFactory = new ScriptMediatorFactory();
         scriptMediatorSerializer = new ScriptMediatorSerializer();
-        inlineScriptMediatorSerializer = new InlineScriptMediatorSerializer();
     }
 
-    public void testScriptMediatorSerializationSenarioOne() throws XMLComparisonException {
-        String inputXml = "<script xmlns=\"http://ws.apache.org/ns/synapse\" key=\"script-key\" function=\"funOne\"></script> ";
+    public void testScriptMediatorSerializationScenarioOne() throws XMLComparisonException {
+        String inputXml = "<script xmlns=\"http://ws.apache.org/ns/synapse\" key=\"script-key\" function=\"funOne\" language=\"myown\"></script> ";
         assertTrue(serialization(inputXml, mediatorFactory, scriptMediatorSerializer));
         assertTrue(serialization(inputXml, scriptMediatorSerializer));
     }
 
-    public void testScriptMediatorSerializationSenarioTwo() throws XMLComparisonException {
-        String inputXml = "<script xmlns=\"http://ws.apache.org/ns/synapse\" key=\"script-key\" ></script> ";
+    public void testScriptMediatorSerializationScenarioTwo() throws XMLComparisonException {
+        String inputXml = "<script xmlns=\"http://ws.apache.org/ns/synapse\" language=\"javascript\" key=\"script-key\" ></script> ";
         assertTrue(serialization(inputXml, mediatorFactory, scriptMediatorSerializer));
         assertTrue(serialization(inputXml, scriptMediatorSerializer));
     }
 
-    public void testInlineScriptMediatorSerializationSenarioOne() throws XMLComparisonException {
-        String inputXml = "<syn:script.js xmlns:syn=\"http://ws.apache.org/ns/synapse\" " +
-                "><![CDATA[nvar symbol = mc.getPayloadXML()..*::Code.toString();mc.setPayloadXML(<m:getQuote xmlns:m=\"http://services.samples/xsd\">\n" +
-                "<m:request><m:symbol>{symbol}</m:symbol></m:request></m:getQuote>);]]></syn:script.js> ";
-        assertTrue(serialization(inputXml, mediatorFactory, inlineScriptMediatorSerializer));
-        assertTrue(serialization(inputXml, inlineScriptMediatorSerializer));
+    public void testInlineScriptMediatorSerializationScenarioOne() throws XMLComparisonException {
+        String inputXml = "<syn:script xmlns:syn=\"http://ws.apache.org/ns/synapse\" language=\"javascript\">" +
+                "<![CDATA[var symbol = mc.getPayloadXML()..*::Code.toString();mc.setPayloadXML(<m:getQuote xmlns:m=\"http://services.samples/xsd\">\n" +
+                "<m:request><m:symbol>{symbol}</m:symbol></m:request></m:getQuote>);]]></syn:script> ";
+        assertTrue(serialization(inputXml, mediatorFactory, scriptMediatorSerializer));
+        assertTrue(serialization(inputXml, scriptMediatorSerializer));
     }
 }

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=518481&r1=518480&r2=518481
==============================================================================
--- 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 Wed Mar 14 21:55:08 2007
@@ -36,68 +36,41 @@
 
 public class ScriptMediatorTest extends TestCase {
 
-    private static final OMElement TRUE_MEDIATOR = TestUtils.createOMElement(
-       "<x><![CDATA[ function mediate(mc) { return true;} ]]></x>");
+    private static final String inlinescript = "<x><![CDATA[ function mediate(mc) { return true;} ]]></x>";
 
-    private static final OMElement FALSE_MEDIATOR = TestUtils.createOMElement(
-       "<x><![CDATA[ function mediate(mc) { return false;} ]]></x>");
+    private static final String falsescript = "<x><![CDATA[ function mediate(mc) { return false;} ]]></x>";
 
-    private static final OMElement XML_MEDIATOR = TestUtils.createOMElement(
-       "<x><![CDATA[ function mediate(mc) { return 'xml' == (typeof mc.getPayloadXML());} ]]></x>");
 
-    public void testTrueMediator() throws Exception {
 
-        Entry prop = new Entry();
-        prop.setValue(TRUE_MEDIATOR);
-        prop.setSrc(new URL("http://MyMediator.js"));
-        Map props = new HashMap();
-        props.put("TRUE_MEDIATOR", prop);
-        MessageContext mc = TestUtils.getTestContext("<foo/>", props);
+    public void testTrueMediator() throws Exception {
 
-        ScriptMediator mediator = new ScriptMediator("TRUE_MEDIATOR", "mediate");
+        MessageContext mc = TestUtils.getTestContext("<foo/>", null);
+        ScriptMediator mediator = new ScriptMediator("javascript",inlinescript);
         assertTrue(mediator.mediate(mc));
     }
 
     public void testFalseMediator() throws Exception {
-        Entry prop = new Entry();
-        prop.setValue(FALSE_MEDIATOR);
-        prop.setSrc(new URL("http://MyFooMediator.js"));
-        Map props = new HashMap();
-        props.put("FALSE_MEDIATOR", prop);
-        MessageContext mc = TestUtils.getTestContext("<foo/>", props);
-
-        ScriptMediator mediator = new ScriptMediator("FALSE_MEDIATOR", "mediate");
-        assertFalse(mediator.mediate(mc));
-    }
-
-    public void testXMLMediator() throws Exception {
-
-        Entry prop = new Entry();
-        prop.setValue(XML_MEDIATOR);
-        prop.setSrc(new URL("http://MyFooMediator.js"));
-        Map props = new HashMap();
-        props.put("XML_MEDIATOR", prop);
-        MessageContext mc = TestUtils.getTestContext("<foo/>", props);
-
-        ScriptMediator mediator = new ScriptMediator("XML_MEDIATOR", "mediate");
+        MessageContext mc = TestUtils.getTestContext("<foo/>", null);
+        ScriptMediator mediator = new ScriptMediator("javascript",falsescript);
         assertTrue(mediator.mediate(mc));
     }
-    
+
+      
     public void testJSCreateOMElementConvertor() {
-        ScriptMediator mediator = new ScriptMediator(null, null);
-        OMElementConvertor convertor = mediator.createOMElementConvertor("foo.js");
+        ScriptMediator mediator = new ScriptMediator("javascript", null);
+        OMElementConvertor convertor = mediator.getOMElementConvertor();
         assertTrue(convertor instanceof JSOMElementConvertor);
     }
 
     public void testRBCreateOMElementConvertor() {
-        ScriptMediator mediator = new ScriptMediator(null, null);
-        OMElementConvertor convertor = mediator.createOMElementConvertor("foo.rb");
+        ScriptMediator mediator = new ScriptMediator("ruby", null);
+        OMElementConvertor convertor = mediator.getOMElementConvertor();
         assertTrue(convertor instanceof RBOMElementConvertor);
     }
     
     public void testDefaultCreateOMElementConvertor() {
-        ScriptMediator mediator = new ScriptMediator(null, null);
-        OMElementConvertor convertor = mediator.createOMElementConvertor("foo.bla");
+        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/convertors/JSOMElementConvertorTest.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/extensions/src/test/java/org/apache/synapse/mediators/bsf/convertors/JSOMElementConvertorTest.java?view=diff&rev=518481&r1=518480&r2=518481
==============================================================================
--- webservices/synapse/trunk/java/modules/extensions/src/test/java/org/apache/synapse/mediators/bsf/convertors/JSOMElementConvertorTest.java (original)
+++ webservices/synapse/trunk/java/modules/extensions/src/test/java/org/apache/synapse/mediators/bsf/convertors/JSOMElementConvertorTest.java Wed Mar 14 21:55:08 2007
@@ -19,14 +19,10 @@
 
 package org.apache.synapse.mediators.bsf.convertors;
 
-import java.util.Iterator;
-
 import junit.framework.TestCase;
 
 import org.apache.axiom.om.OMElement;
-import org.apache.synapse.TestMessageContext;
 import org.apache.synapse.mediators.TestUtils;
-import org.apache.synapse.mediators.bsf.InlineScriptMediator;
 
 public class JSOMElementConvertorTest extends TestCase {
     
@@ -40,12 +36,12 @@
     }
 
     public void testFromScript() throws Exception {
-        InlineScriptMediator mediator = new InlineScriptMediator("xml.js", "mc.setPayloadXML(<a><b>petra</b></a>);");
+        /*InlineScriptMediator mediator = new InlineScriptMediator("javascript" , "xml.js", "mc.setPayloadXML(<a><b>petra</b></a>);");
         mediator.init();
         TestMessageContext mc = TestUtils.getTestContext("<foo/>");
         mediator.mediate(mc);
         Iterator iterator = mc.getEnvelope().getChildElements();
         iterator.next();
-        assertEquals(XML, ((OMElement) iterator.next()).getFirstElement().toString());
+        assertEquals(XML, ((OMElement) iterator.next()).getFirstElement().toString());    */
     }
 }

Modified: webservices/synapse/trunk/java/pom.xml
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/pom.xml?view=diff&rev=518481&r1=518480&r2=518481
==============================================================================
--- webservices/synapse/trunk/java/pom.xml (original)
+++ webservices/synapse/trunk/java/pom.xml Wed Mar 14 21:55:08 2007
@@ -492,14 +492,28 @@
         <repository>
             <id>wso2</id>
             <name>wso2</name>
-            <url>http://dist.wso2.org/maven2/</url>
+            <url>http://dist.wso2.org/maven/</url>
             <releases>
             	<updatePolicy>never</updatePolicy>
             </releases>
+            <layout>legacy</layout>
             <snapshots>
                 <updatePolicy>interval:1440</updatePolicy>
             </snapshots>
         </repository>
+        <!--for Axiom/E4X
+        <repository>
+            <id>thilina</id>
+            <name>thilina</name>
+            <url>http://www-lk.wso2.com/~thilina/repository/</url>
+            <releases>
+            	<updatePolicy>never</updatePolicy>
+            </releases>
+            <layout>legacy</layout>
+            <snapshots>
+                <updatePolicy>interval:1440</updatePolicy>
+            </snapshots>
+        </repository>-->
         <repository>
             <id>ibiblio-m2</id>
             <name>Ibiblio Maven 2 Repo</name>



---------------------------------------------------------------------
To unsubscribe, e-mail: synapse-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: synapse-dev-help@ws.apache.org