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


Reply via email to