Author: karthick
Date: Fri Feb 27 21:23:35 2009
New Revision: 748707

URL: http://svn.apache.org/viewvc?rev=748707&view=rev
Log:
ODE-531 Handle unhandled faults in query/expression languages gracefully.

Modified:
    
ode/branches/APACHE_ODE_1.X/bpel-api/src/main/java/org/apache/ode/bpel/explang/EvaluationContext.java
    
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath10/runtime/JaxenContexts.java
    
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath20/runtime/JaxpFunctionResolver.java
    
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ASSIGN.java
    
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ExprEvaluationContextImpl.java
    
ode/branches/APACHE_ODE_1.X/bpel-test/src/test/resources/bpel/2.0/TestXQueryExpression/HelloXQueryWorld.bpel

Modified: 
ode/branches/APACHE_ODE_1.X/bpel-api/src/main/java/org/apache/ode/bpel/explang/EvaluationContext.java
URL: 
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-api/src/main/java/org/apache/ode/bpel/explang/EvaluationContext.java?rev=748707&r1=748706&r2=748707&view=diff
==============================================================================
--- 
ode/branches/APACHE_ODE_1.X/bpel-api/src/main/java/org/apache/ode/bpel/explang/EvaluationContext.java
 (original)
+++ 
ode/branches/APACHE_ODE_1.X/bpel-api/src/main/java/org/apache/ode/bpel/explang/EvaluationContext.java
 Fri Feb 27 21:23:35 2009
@@ -88,7 +88,7 @@
      *          the query expression
      * @return node returned by query
      */
-    Node evaluateQuery(Node root, OExpression expr) throws FaultException;
+    Node evaluateQuery(Node root, OExpression expr) throws FaultException, 
EvaluationException;
 
     /**
      * Reads the current process instance id.

Modified: 
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath10/runtime/JaxenContexts.java
URL: 
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath10/runtime/JaxenContexts.java?rev=748707&r1=748706&r2=748707&view=diff
==============================================================================
--- 
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath10/runtime/JaxenContexts.java
 (original)
+++ 
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath10/runtime/JaxenContexts.java
 Fri Feb 27 21:23:35 2009
@@ -24,6 +24,7 @@
 import org.apache.ode.bpel.elang.xpath10.o.OXPath10Expression;
 import org.apache.ode.bpel.elang.xpath10.o.OXPath10ExpressionBPEL20;
 import org.apache.ode.bpel.explang.EvaluationContext;
+import org.apache.ode.bpel.explang.EvaluationException;
 import org.apache.ode.bpel.o.OLink;
 import org.apache.ode.bpel.o.OMessageVarType;
 import org.apache.ode.bpel.o.OProcess;
@@ -231,7 +232,14 @@
             } catch (FaultException e) {
                 __log.error("bpws:getVariableData(" + args + ") threw 
FaultException", e);
                 throw new WrappedFaultException.JaxenFunctionException(e);
-            }
+            } catch (EvaluationException e) {
+                __log.error("bpws:getVariableData(" + args + ") threw 
EvaluationException", e);
+                if (e.getCause() instanceof FaultException) {
+                    throw new 
WrappedFaultException.JaxenFunctionException((FaultException) e.getCause());
+                } else {
+                       throw new FunctionCallException("SubLanguageException: 
Unable to evaluate query expression", e);
+                }
+                       }
         }
     }
 

Modified: 
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath20/runtime/JaxpFunctionResolver.java
URL: 
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath20/runtime/JaxpFunctionResolver.java?rev=748707&r1=748706&r2=748707&view=diff
==============================================================================
--- 
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath20/runtime/JaxpFunctionResolver.java
 (original)
+++ 
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath20/runtime/JaxpFunctionResolver.java
 Fri Feb 27 21:23:35 2009
@@ -51,6 +51,7 @@
 import org.apache.ode.bpel.elang.xpath20.compiler.Constants;
 import org.apache.ode.bpel.elang.xpath20.o.OXPath20ExpressionBPEL20;
 import org.apache.ode.bpel.explang.EvaluationContext;
+import org.apache.ode.bpel.explang.EvaluationException;
 import org.apache.ode.bpel.o.OLink;
 import org.apache.ode.bpel.o.OProcess;
 import org.apache.ode.bpel.o.OScope;
@@ -187,7 +188,10 @@
             } catch (FaultException e) {
                 __log.error("bpws:getVariableData(" + args + ") threw 
FaultException");
                 throw new XPathFunctionException(e);
-            }
+            } catch (EvaluationException e) {
+                __log.error("bpws:getVariableData(" + args + ") threw 
FaultException");
+                throw new XPathFunctionException(e);
+                       }
         }
     }
 

Modified: 
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ASSIGN.java
URL: 
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ASSIGN.java?rev=748707&r1=748706&r2=748707&view=diff
==============================================================================
--- 
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ASSIGN.java
 (original)
+++ 
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ASSIGN.java
 Fri Feb 27 21:23:35 2009
@@ -616,7 +616,14 @@
 
         if (expression != null) {
             // Neat little trick....
-            data = ec.evaluateQuery(data, expression);
+            try {
+                               data = ec.evaluateQuery(data, expression);
+                       } catch (EvaluationException e) {
+                String msg = __msgs.msgEvalException(expression.toString(), 
e.getMessage());
+                if (__log.isDebugEnabled()) __log.debug(expression + ": " + 
msg);
+                if (e.getCause() instanceof FaultException) throw 
(FaultException)e.getCause();
+                throw new 
FaultException(getOAsssign().getOwner().constants.qnSubLanguageExecutionFault, 
msg);
+                       }
         }
 
         return data;

Modified: 
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ExprEvaluationContextImpl.java
URL: 
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ExprEvaluationContextImpl.java?rev=748707&r1=748706&r2=748707&view=diff
==============================================================================
--- 
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ExprEvaluationContextImpl.java
 (original)
+++ 
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ExprEvaluationContextImpl.java
 Fri Feb 27 21:23:35 2009
@@ -29,6 +29,7 @@
 import org.apache.ode.bpel.evt.ScopeEvent;
 import org.apache.ode.bpel.evt.VariableReadEvent;
 import org.apache.ode.bpel.explang.EvaluationContext;
+import org.apache.ode.bpel.explang.EvaluationException;
 import org.apache.ode.bpel.o.OConstantVarType;
 import org.apache.ode.bpel.o.OExpression;
 import org.apache.ode.bpel.o.OLink;
@@ -97,16 +98,12 @@
        }
 
        public Node evaluateQuery(Node root, OExpression expr)
-                       throws FaultException {
-               try {
-                       return _native.getExpLangRuntime()
-                                       .evaluateNode(
-                                                       expr,
-                                                       new 
ExprEvaluationContextImpl(_scopeInstance,
-                                                                       
_native, root));
-               } catch (org.apache.ode.bpel.explang.EvaluationException e) {
-                       throw new InvalidProcessException("Expression Failed: " 
+ expr, e);
-               }
+                       throws FaultException, EvaluationException {
+               return _native.getExpLangRuntime()
+                               .evaluateNode(
+                                               expr,
+                                               new 
ExprEvaluationContextImpl(_scopeInstance,
+                                                               _native, root));
        }
 
        public String readMessageProperty(OScope.Variable variable,

Modified: 
ode/branches/APACHE_ODE_1.X/bpel-test/src/test/resources/bpel/2.0/TestXQueryExpression/HelloXQueryWorld.bpel
URL: 
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-test/src/test/resources/bpel/2.0/TestXQueryExpression/HelloXQueryWorld.bpel?rev=748707&r1=748706&r2=748707&view=diff
==============================================================================
--- 
ode/branches/APACHE_ODE_1.X/bpel-test/src/test/resources/bpel/2.0/TestXQueryExpression/HelloXQueryWorld.bpel
 (original)
+++ 
ode/branches/APACHE_ODE_1.X/bpel-test/src/test/resources/bpel/2.0/TestXQueryExpression/HelloXQueryWorld.bpel
 Fri Feb 27 21:23:35 2009
@@ -116,6 +116,24 @@
            
<condition>not($tempVar/wsa:EndpointReference/wsa:Metadata/Service/@EndpointName
 eq "MyEndpoint")</condition>
            <throw faultName="selectionFailure"/>
         </if>
+        <scope>
+            <faultHandlers>
+                <catch faultName="subLanguageExecutionFault">
+                    <empty/>
+                </catch>
+            </faultHandlers>
+            <assign>
+              <copy>
+               <from variable="myVar" part="TestPart">
+                 <query 
queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xquery1.0">
+                    let $j := 10 div 0
+                    return concat("abc", $j)
+                 </query>
+               </from>
+               <to variable="myVar" part="TestPart"/>
+             </copy>
+           </assign>
+        </scope>
         <reply name="end"  
                 partnerLink="HelloXQueryPartnerLink"
                 portType="test:HelloXQueryPortType" 


Reply via email to