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>
- * <script key="property-key" function="script-function-name" <script/>
+ * <script [key="entry-key"]
+ * [function="script-function-name"] language="javascript|groovy|ruby">
+ * (text | xml)?
+ * </script>
* </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>
- * <script key="property-key" function="script-function-name" <script/>
- * </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>
- * <script.LL>...src code...<script.LL/>
+ * Creates an instance of a Script mediator for inline or external script mediation for BSF
+ * scripting languages.
+ *
+ * * <pre>
+ * <script [key="entry-key"]
+ * [function="script-function-name"] language="javascript|groovy|ruby">
+ * (text | xml)?
+ * </script>
* </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>
- * <script.js>mc.getPayloadXML()..symbol != "IBM";<script.js/>
- * </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