Author: uswick
Date: Tue Jul 30 09:09:39 2013
New Revision: 1508349

URL: http://svn.apache.org/r1508349
Log:
fixing https://issues.apache.org/jira/browse/SYNAPSE-932

Modified:
    
synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/ScriptMediator.java
    
synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/ScriptMediatorFactory.java
    
synapse/trunk/java/modules/extensions/src/test/java/org/apache/synapse/mediators/bsf/GroovyScriptMediatorTest.java
    
synapse/trunk/java/modules/extensions/src/test/java/org/apache/synapse/mediators/bsf/ScriptMediatorTest.java
    
synapse/trunk/java/modules/extensions/src/test/java/org/apache/synapse/mediators/bsf/javascript/JavaScriptMediatorTest.java

Modified: 
synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/ScriptMediator.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/ScriptMediator.java?rev=1508349&r1=1508348&r2=1508349&view=diff
==============================================================================
--- 
synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/ScriptMediator.java
 (original)
+++ 
synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/ScriptMediator.java
 Tue Jul 30 09:09:39 2013
@@ -31,6 +31,7 @@ import org.apache.synapse.SynapseLog;
 import org.apache.synapse.config.Entry;
 import org.apache.synapse.mediators.AbstractMediator;
 import org.apache.synapse.mediators.Value;
+import org.mozilla.javascript.Context;
 
 import javax.activation.DataHandler;
 import javax.script.*;
@@ -113,14 +114,20 @@ public class ScriptMediator extends Abst
     private final Object resourceLock = new Object();
 
     /**
+     * Store the class loader from properties
+     */
+    private ClassLoader loader;
+
+    /**
      * 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) {
+    public ScriptMediator(String language, String scriptSourceCode,ClassLoader 
classLoader) {
         this.language = language;
         this.scriptSourceCode = scriptSourceCode;
+        this.setLoader(classLoader);
         this.includes = new TreeMap<Value, Object>();
         initInlineScript();
     }
@@ -134,9 +141,10 @@ public class ScriptMediator extends Abst
      * @param function       the function to be invoked
      */
     public ScriptMediator(String language, Map<Value, Object> includeKeysMap,
-                          Value key, String function) {
+                          Value key, String function,ClassLoader classLoader) {
         this.language = language;
         this.key = key;
+        this.setLoader(classLoader);
         this.includes = includeKeysMap;
         if (function != null) {
             this.function = function;
@@ -198,6 +206,12 @@ public class ScriptMediator extends Abst
         boolean returnValue;
         try {
 
+            //if the engine is Rhino then needs to set the class loader 
specifically
+            if(language.equals("js")){
+                Context cx = Context.enter();
+                cx.setApplicationClassLoader(this.loader);
+            }
+
             Object returnObject;
             if (key != null) {
                 returnObject = mediateWithExternalScript(synCtx);
@@ -218,7 +232,12 @@ public class ScriptMediator extends Abst
                     "external " + language + " script" + " : " + key +
                     (function != null ? " function " + function : ""), e, 
synCtx);
             returnValue = false;
-        }
+        }  finally {
+                if(language.equals("js")){
+                          Context.exit();
+                     }
+    }
+
         return returnValue;
     }
 
@@ -441,4 +460,12 @@ public class ScriptMediator extends Abst
         return includes;
     }
 
+    public ClassLoader getLoader() {
+        return loader;
+    }
+
+    public void setLoader(ClassLoader loader) {
+        this.loader = loader;
+    }
+
 }

Modified: 
synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/ScriptMediatorFactory.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/ScriptMediatorFactory.java?rev=1508349&r1=1508348&r2=1508349&view=diff
==============================================================================
--- 
synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/ScriptMediatorFactory.java
 (original)
+++ 
synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/ScriptMediatorFactory.java
 Tue Jul 30 09:09:39 2013
@@ -27,7 +27,7 @@ import org.apache.synapse.config.xml.Abs
 import org.apache.synapse.config.xml.XMLConfigConstants;
 import org.apache.synapse.mediators.Value;
 import org.apache.synapse.config.xml.ValueFactory;
-
+import org.apache.synapse.SynapseConstants;
 import javax.xml.namespace.QName;
 import java.util.*;
 
@@ -65,6 +65,7 @@ public class ScriptMediatorFactory exten
     public Mediator createSpecificMediator(OMElement elem, Properties 
properties) {
 
         ScriptMediator mediator;
+        ClassLoader  classLoader = (ClassLoader) 
properties.get(SynapseConstants.SYNAPSE_LIB_LOADER);
         OMAttribute keyAtt = elem.getAttribute(new 
QName(XMLConfigConstants.NULL_NAMESPACE,
                 "key"));
         OMAttribute langAtt = elem.getAttribute(new 
QName(XMLConfigConstants.NULL_NAMESPACE,
@@ -93,9 +94,9 @@ public class ScriptMediatorFactory exten
 
             String functionName = (functionAtt == null ? null : 
functionAtt.getAttributeValue());
             mediator = new ScriptMediator(langAtt.getAttributeValue(),
-                    includeKeysMap, generatedKey, functionName);
+                    includeKeysMap, generatedKey, functionName,classLoader);
         } else {
-            mediator = new ScriptMediator(langAtt.getAttributeValue(), 
elem.getText());
+            mediator = new ScriptMediator(langAtt.getAttributeValue(), 
elem.getText(),classLoader);
         }
 
         processAuditStatus(mediator, elem);

Modified: 
synapse/trunk/java/modules/extensions/src/test/java/org/apache/synapse/mediators/bsf/GroovyScriptMediatorTest.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/extensions/src/test/java/org/apache/synapse/mediators/bsf/GroovyScriptMediatorTest.java?rev=1508349&r1=1508348&r2=1508349&view=diff
==============================================================================
--- 
synapse/trunk/java/modules/extensions/src/test/java/org/apache/synapse/mediators/bsf/GroovyScriptMediatorTest.java
 (original)
+++ 
synapse/trunk/java/modules/extensions/src/test/java/org/apache/synapse/mediators/bsf/GroovyScriptMediatorTest.java
 Tue Jul 30 09:09:39 2013
@@ -25,7 +25,7 @@ import org.apache.synapse.mediators.Test
 public class GroovyScriptMediatorTest extends TestCase {
 
     public void testXMLMediator2() throws Exception {
-       ScriptMediator mediator = new ScriptMediator("groovy", 
"mc.setPayloadXML(mc.getPayloadXML())");
+       ScriptMediator mediator = new ScriptMediator("groovy", 
"mc.setPayloadXML(mc.getPayloadXML())",null);
        mediator.initInlineScript();
        
assertTrue(mediator.mediate(TestUtils.getTestContext("<a><b>petra</b></a>")));
     }

Modified: 
synapse/trunk/java/modules/extensions/src/test/java/org/apache/synapse/mediators/bsf/ScriptMediatorTest.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/extensions/src/test/java/org/apache/synapse/mediators/bsf/ScriptMediatorTest.java?rev=1508349&r1=1508348&r2=1508349&view=diff
==============================================================================
--- 
synapse/trunk/java/modules/extensions/src/test/java/org/apache/synapse/mediators/bsf/ScriptMediatorTest.java
 (original)
+++ 
synapse/trunk/java/modules/extensions/src/test/java/org/apache/synapse/mediators/bsf/ScriptMediatorTest.java
 Tue Jul 30 09:09:39 2013
@@ -38,7 +38,7 @@ public class ScriptMediatorTest extends 
 
     public void testInlineMediator() throws Exception {
         MessageContext mc = TestUtils.getTestContext("<foo/>", null);
-        ScriptMediator mediator = new ScriptMediator("js", inlinescript);
+        ScriptMediator mediator = new ScriptMediator("js", inlinescript,null);
         assertTrue(mediator.mediate(mc));
     }
 
@@ -47,7 +47,7 @@ public class ScriptMediatorTest extends 
         Random rand = new Random();
         String randomno = Integer.toString(rand.nextInt(200));
         mc.getEnvelope().getBody().getFirstElement().setText(randomno);
-        ScriptMediator mediator = new ScriptMediator("js", threadsafetyscript);
+        ScriptMediator mediator = new ScriptMediator("js", 
threadsafetyscript,null);
         mediator.mediate(mc);
         
assertEquals(Integer.parseInt(mc.getEnvelope().getBody().getFirstElement().getText()),
                 Integer.parseInt(randomno) * 2);

Modified: 
synapse/trunk/java/modules/extensions/src/test/java/org/apache/synapse/mediators/bsf/javascript/JavaScriptMediatorTest.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/extensions/src/test/java/org/apache/synapse/mediators/bsf/javascript/JavaScriptMediatorTest.java?rev=1508349&r1=1508348&r2=1508349&view=diff
==============================================================================
--- 
synapse/trunk/java/modules/extensions/src/test/java/org/apache/synapse/mediators/bsf/javascript/JavaScriptMediatorTest.java
 (original)
+++ 
synapse/trunk/java/modules/extensions/src/test/java/org/apache/synapse/mediators/bsf/javascript/JavaScriptMediatorTest.java
 Tue Jul 30 09:09:39 2013
@@ -28,7 +28,7 @@ import org.apache.synapse.mediators.bsf.
 public class JavaScriptMediatorTest extends TestCase {
 
     public void testInlineMediator() throws Exception {
-        ScriptMediator mediator = new ScriptMediator("js", 
"mc.getPayloadXML().b == 'petra';");
+        ScriptMediator mediator = new ScriptMediator("js", 
"mc.getPayloadXML().b == 'petra';",null);
 
         MessageContext mc = TestUtils.getTestContext("<a><b>petra</b></a>", 
null);
         assertTrue(mediator.mediate(mc));
@@ -41,7 +41,7 @@ public class JavaScriptMediatorTest exte
     }
 
     public void testInlineMediator2() throws Exception {
-        ScriptMediator mediator = new ScriptMediator("js", 
"mc.getPayloadXML().b == 'petra';");
+        ScriptMediator mediator = new ScriptMediator("js", 
"mc.getPayloadXML().b == 'petra';",null);
 
         MessageContext mc = TestUtils.getTestContext("<a><b>petra</b></a>", 
null);
         assertTrue(mediator.mediate(mc));


Reply via email to