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());
+ }
+
}