You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ode.apache.org by va...@apache.org on 2008/10/22 01:14:37 UTC

svn commit: r706808 - in /ode/trunk: bpel-test/src/main/java/org/apache/ode/test/ extensions/e4x/src/main/java/org/apache/ode/extension/e4x/ extensions/e4x/src/test/java/org/apache/ode/extension/e4x/

Author: vanto
Date: Tue Oct 21 16:14:37 2008
New Revision: 706808

URL: http://svn.apache.org/viewvc?rev=706808&view=rev
Log:
bugfix and faults

Modified:
    ode/trunk/bpel-test/src/main/java/org/apache/ode/test/MockExtensionContext.java
    ode/trunk/extensions/e4x/src/main/java/org/apache/ode/extension/e4x/JSExtensionOperation.java
    ode/trunk/extensions/e4x/src/main/java/org/apache/ode/extension/e4x/TopLevelFunctions.java
    ode/trunk/extensions/e4x/src/main/java/org/apache/ode/extension/e4x/VariableDelegator.java
    ode/trunk/extensions/e4x/src/test/java/org/apache/ode/extension/e4x/JSOperationTest.java

Modified: ode/trunk/bpel-test/src/main/java/org/apache/ode/test/MockExtensionContext.java
URL: http://svn.apache.org/viewvc/ode/trunk/bpel-test/src/main/java/org/apache/ode/test/MockExtensionContext.java?rev=706808&r1=706807&r2=706808&view=diff
==============================================================================
--- ode/trunk/bpel-test/src/main/java/org/apache/ode/test/MockExtensionContext.java (original)
+++ ode/trunk/bpel-test/src/main/java/org/apache/ode/test/MockExtensionContext.java Tue Oct 21 16:14:37 2008
@@ -43,6 +43,7 @@
 	private Map<String, Node> variables = new HashMap<String, Node>();
 	public boolean completed;
 	public boolean faulted;
+	public FaultException fault;
 	public URI duDir;
 	public List<String> msgs = new ArrayList<String>();
 	
@@ -111,6 +112,7 @@
 	public void completeWithFault(FaultException fault) {
 		this.completed = true;
 		this.faulted = true;
+		this.fault = fault;
 	}
 
 	public OdeInternalInstance getInternalInstance() {

Modified: ode/trunk/extensions/e4x/src/main/java/org/apache/ode/extension/e4x/JSExtensionOperation.java
URL: http://svn.apache.org/viewvc/ode/trunk/extensions/e4x/src/main/java/org/apache/ode/extension/e4x/JSExtensionOperation.java?rev=706808&r1=706807&r2=706808&view=diff
==============================================================================
--- ode/trunk/extensions/e4x/src/main/java/org/apache/ode/extension/e4x/JSExtensionOperation.java (original)
+++ ode/trunk/extensions/e4x/src/main/java/org/apache/ode/extension/e4x/JSExtensionOperation.java Tue Oct 21 16:14:37 2008
@@ -28,6 +28,7 @@
 import org.mozilla.javascript.Context;
 import org.mozilla.javascript.ContextFactory;
 import org.mozilla.javascript.Scriptable;
+import org.mozilla.javascript.WrappedException;
 import org.mozilla.javascript.xml.XMLLib;
 import org.mozilla.javascript.xml.XMLLib.Factory;
 import org.w3c.dom.Element;
@@ -54,11 +55,17 @@
 			VariableDelegator delegator = new VariableDelegator(scope, context, ctx);
 			ctx.evaluateString(delegator, source, context.getActivityName(), 1, null);
 			delegator.writeVariables();
+		} catch (WrappedException e) {
+			__logger.warn("Error during JS execution.", e);
+			if (e.getWrappedException() instanceof FaultException) {
+				throw (FaultException)e.getWrappedException();
+			}
+			throw new FaultException(new QName("ExtensionEvaluationFault", JSExtensionBundle.NS), e.getMessage());
 		} catch (FaultException e) {
-			__logger.error("Fault during JS execution.", e);
+			__logger.warn("Fault during JS execution.", e);
 			throw e;
 		} catch (Exception e) {
-			__logger.error("Error during JS execution.", e);
+			__logger.warn("Error during JS execution.", e);
 			throw new FaultException(new QName("ExtensionEvaluationFault", JSExtensionBundle.NS), e.getMessage());
 		} finally {
 			Context.exit();

Modified: ode/trunk/extensions/e4x/src/main/java/org/apache/ode/extension/e4x/TopLevelFunctions.java
URL: http://svn.apache.org/viewvc/ode/trunk/extensions/e4x/src/main/java/org/apache/ode/extension/e4x/TopLevelFunctions.java?rev=706808&r1=706807&r2=706808&view=diff
==============================================================================
--- ode/trunk/extensions/e4x/src/main/java/org/apache/ode/extension/e4x/TopLevelFunctions.java (original)
+++ ode/trunk/extensions/e4x/src/main/java/org/apache/ode/extension/e4x/TopLevelFunctions.java Tue Oct 21 16:14:37 2008
@@ -25,6 +25,7 @@
 import java.net.MalformedURLException;
 import java.net.URI;
 
+import javax.xml.namespace.QName;
 import javax.xml.transform.OutputKeys;
 import javax.xml.transform.Result;
 import javax.xml.transform.Source;
@@ -34,6 +35,7 @@
 import javax.xml.transform.dom.DOMSource;
 import javax.xml.transform.stream.StreamResult;
 
+import org.apache.ode.bpel.common.FaultException;
 import org.apache.ode.bpel.rtrep.common.extension.ExtensionContext;
 import org.mozilla.javascript.Context;
 import org.mozilla.javascript.Function;
@@ -53,7 +55,7 @@
  */
 public class TopLevelFunctions extends ImporterTopLevel {
 	private static final long serialVersionUID = 1L;
-	private static final String[] METHODS = { "load", "print", "pid", "js2dom", "dom2js" };
+	private static final String[] METHODS = { "load", "print", "pid", "activityName", "js2dom", "dom2js", "throwFault" };
 	private URI _duDir;
 	private ExtensionContext _ectx;
 	
@@ -164,6 +166,23 @@
 		}
 	}
 	
+	/**
+	 * This method is exposed to the JS environment and allows users to
+	 * throw BPEL faults.
+	 * 
+	 * @throws FaultException 
+	 */
+	public static void throwFault(Context cx, Scriptable thisObj, Object[] args,
+			Function funObj) throws FaultException {
+		if (args.length != 3) {
+			Context.reportError("throwFault expects the following parameters: throwFault(namespace, localname, faultMessage)");
+		}
+		String ns = Context.toString(args[0]);
+		String localname = Context.toString(args[1]);
+		String msg = Context.toString(args[2]);
+		throw new FaultException(new QName(ns, localname), msg);
+	}
+
 	public static String domToString(Node n) throws TransformerException {
 		TransformerFactory xformFactory	= TransformerFactory.newInstance();
 		Transformer idTransform = xformFactory.newTransformer();

Modified: ode/trunk/extensions/e4x/src/main/java/org/apache/ode/extension/e4x/VariableDelegator.java
URL: http://svn.apache.org/viewvc/ode/trunk/extensions/e4x/src/main/java/org/apache/ode/extension/e4x/VariableDelegator.java?rev=706808&r1=706807&r2=706808&view=diff
==============================================================================
--- ode/trunk/extensions/e4x/src/main/java/org/apache/ode/extension/e4x/VariableDelegator.java (original)
+++ ode/trunk/extensions/e4x/src/main/java/org/apache/ode/extension/e4x/VariableDelegator.java Tue Oct 21 16:14:37 2008
@@ -80,7 +80,7 @@
 			Node n = _ectx.readVariable(name);
 			XMLObject xmlObj = (XMLObject)_sctx.newObject(start, "XML", new Object[] {Context.javaToJS(TopLevelFunctions.domToString(n), start)});
 			_env.put(name, xmlObj);
-			if (_variables.contains(name)) {
+			if (!_variables.contains(name)) {
 				_variables.add(name);
 			}
 			return xmlObj;

Modified: ode/trunk/extensions/e4x/src/test/java/org/apache/ode/extension/e4x/JSOperationTest.java
URL: http://svn.apache.org/viewvc/ode/trunk/extensions/e4x/src/test/java/org/apache/ode/extension/e4x/JSOperationTest.java?rev=706808&r1=706807&r2=706808&view=diff
==============================================================================
--- ode/trunk/extensions/e4x/src/test/java/org/apache/ode/extension/e4x/JSOperationTest.java (original)
+++ ode/trunk/extensions/e4x/src/test/java/org/apache/ode/extension/e4x/JSOperationTest.java Tue Oct 21 16:14:37 2008
@@ -163,4 +163,38 @@
 		Assert.assertEquals("4711", c.msgs.get(0));
 	}
 
+	@Test public void testActivityName() throws Exception {
+		StringBuffer s = new StringBuffer();
+		s.append("myvar = activityName();\n");
+		s.append("print(myvar);\n");
+
+		MockExtensionContext c = new MockExtensionContext();
+		c.duDir = this.getClass().getResource("/").toURI();
+		JSExtensionOperation jso = new JSExtensionOperation();
+		Element e = DOMUtils.stringToDOM("<js:script xmlns:js=\"js\"><![CDATA[" + s + "]]></js:script>");
+		jso.run(c, e);
+		Assert.assertTrue(c.completed);
+		Assert.assertFalse(c.faulted);
+		Assert.assertEquals(1, c.msgs.size());
+		Assert.assertEquals("mockActivity", c.msgs.get(0));
+	}
+
+	@Test public void testThrowFault() throws Exception {
+		StringBuffer s = new StringBuffer();
+		s.append("throwFault('urn:test', 'myfault', 'Ohje');\n");
+		s.append("print('unreachable');\n");
+
+		MockExtensionContext c = new MockExtensionContext();
+		c.duDir = this.getClass().getResource("/").toURI();
+		JSExtensionOperation jso = new JSExtensionOperation();
+		Element e = DOMUtils.stringToDOM("<js:script xmlns:js=\"js\"><![CDATA[" + s + "]]></js:script>");
+		jso.run(c, e);
+		Assert.assertTrue(c.completed);
+		Assert.assertTrue(c.faulted);
+		Assert.assertEquals(0, c.msgs.size());
+		Assert.assertEquals("myfault", c.fault.getQName().getLocalPart());
+		Assert.assertEquals("urn:test", c.fault.getQName().getNamespaceURI());
+		Assert.assertEquals("{urn:test}myfault: Ohje", c.fault.getMessage());
+	}
+
 }