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));