You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ode.apache.org by mi...@apache.org on 2009/04/15 01:38:29 UTC

svn commit: r765008 - in /ode/branches/APACHE_ODE_1.X: axis2-war/src/test/java/org/apache/ode/axis2/ axis2-war/src/test/resources/TestFailFast/ axis2/src/main/java/org/apache/ode/axis2/ axis2/src/main/java/org/apache/ode/axis2/util/ bpel-runtime/src/ma...

Author: midon
Date: Tue Apr 14 23:38:29 2009
New Revision: 765008

URL: http://svn.apache.org/viewvc?rev=765008&view=rev
Log:
ODE-578: better error reporting

Modified:
    ode/branches/APACHE_ODE_1.X/axis2-war/src/test/java/org/apache/ode/axis2/FailFastTest.java
    ode/branches/APACHE_ODE_1.X/axis2-war/src/test/resources/TestFailFast/HelloWorld2.bpel
    ode/branches/APACHE_ODE_1.X/axis2/src/main/java/org/apache/ode/axis2/ODEService.java
    ode/branches/APACHE_ODE_1.X/axis2/src/main/java/org/apache/ode/axis2/OdeFault.java
    ode/branches/APACHE_ODE_1.X/axis2/src/main/java/org/apache/ode/axis2/SoapExternalService.java
    ode/branches/APACHE_ODE_1.X/axis2/src/main/java/org/apache/ode/axis2/util/SoapMessageConverter.java
    ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelRuntimeContextImpl.java
    ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/MessageExchangeImpl.java
    ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/INVOKE.java

Modified: ode/branches/APACHE_ODE_1.X/axis2-war/src/test/java/org/apache/ode/axis2/FailFastTest.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/axis2-war/src/test/java/org/apache/ode/axis2/FailFastTest.java?rev=765008&r1=765007&r2=765008&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/axis2-war/src/test/java/org/apache/ode/axis2/FailFastTest.java (original)
+++ ode/branches/APACHE_ODE_1.X/axis2-war/src/test/java/org/apache/ode/axis2/FailFastTest.java Tue Apr 14 23:38:29 2009
@@ -22,8 +22,10 @@
             String response = server.sendRequestFile("http://localhost:8888/processes/helloWorld",
                     bundleName, "testRequest.soap");
             System.out.println(response);
-            String badBadMessage = "java.util.concurrent.TimeoutException: Message exchange org.apache.ode.bpel.engine.MyRoleMessageExchangeImpl$ResponseFuture";
-            assertFalse("Client should NOT time out! It should receive the true failure", response.contains(badBadMessage));
+            String badMessage = "java.util.concurrent.TimeoutException: Message exchange org.apache.ode.bpel.engine.MyRoleMessageExchangeImpl$ResponseFuture";
+            String rightMessage = "The service cannot be found for the endpoint reference (EPR) 127.0.0.1/processes/DummyService";
+            assertFalse("Client should NOT time out! It should receive the true failure", response.contains(badMessage));
+            assertTrue("Client did not receive the right error message!", response.contains(rightMessage));
         } finally {
             server.undeployProcess(bundleName);
         }

Modified: ode/branches/APACHE_ODE_1.X/axis2-war/src/test/resources/TestFailFast/HelloWorld2.bpel
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/axis2-war/src/test/resources/TestFailFast/HelloWorld2.bpel?rev=765008&r1=765007&r2=765008&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/axis2-war/src/test/resources/TestFailFast/HelloWorld2.bpel (original)
+++ ode/branches/APACHE_ODE_1.X/axis2-war/src/test/resources/TestFailFast/HelloWorld2.bpel Tue Apr 14 23:38:29 2009
@@ -39,9 +39,8 @@
     
    <variables>
      <variable name="myVar" messageType="test:HelloMessage"/>
-     <variable name="faultInput" messageType="dummy:helloRequest"/>
-     <variable name="faultOutput" messageType="dummy:helloResponse"/>
-     <variable name="faultVar" messageType="dummy:DummyExceptionType"/>
+     <variable name="opInput" messageType="dummy:helloRequest"/>
+     <variable name="opOutput" messageType="dummy:helloResponse"/>
      <variable name="tmpVar" type="xsd:string"/>
    </variables>
 
@@ -51,14 +50,12 @@
 
        <assign>
            <copy>
-                <from><literal><dummy:faultTest><dummy:in>Hello</dummy:in></dummy:faultTest></literal></from>
-                <to>$faultInput.parameters</to>
+                <from><literal><dummy:hello>Hello</dummy:hello></literal></from>
+                <to>$opInput.parameters</to>
            </copy>
        </assign>
-
        <invoke partnerLink="dummyPartnerLink" portType="test:DummyServicePortType"
-               operation="hello" inputVariable="faultInput" outputVariable="faultOutput"/>
-
+               operation="hello" inputVariable="opInput" outputVariable="opOutput"/>
        <assign>
            <copy>
                <from><literal>foo</literal></from>

Modified: ode/branches/APACHE_ODE_1.X/axis2/src/main/java/org/apache/ode/axis2/ODEService.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/axis2/src/main/java/org/apache/ode/axis2/ODEService.java?rev=765008&r1=765007&r2=765008&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/axis2/src/main/java/org/apache/ode/axis2/ODEService.java (original)
+++ ode/branches/APACHE_ODE_1.X/axis2/src/main/java/org/apache/ode/axis2/ODEService.java Tue Apr 14 23:38:29 2009
@@ -34,6 +34,7 @@
 import org.apache.axiom.soap.SOAPEnvelope;
 import org.apache.axiom.soap.SOAPFactory;
 import org.apache.axiom.soap.SOAPFault;
+import org.apache.axiom.om.OMElement;
 import org.apache.axis2.AxisFault;
 import org.apache.axis2.context.MessageContext;
 import org.apache.axis2.description.AxisService;
@@ -55,9 +56,13 @@
 import org.apache.ode.utils.GUID;
 import org.apache.ode.utils.Namespaces;
 import org.apache.ode.utils.Properties;
+import org.apache.ode.il.OMUtils;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 
+import javax.xml.transform.dom.DOMSource;
+import java.io.IOException;
+
 /**
  * A running service, encapsulates the Axis service, its receivers and our
  * receivers as well.
@@ -258,7 +263,10 @@
                 writeHeader(msgContext, mex);
                 break;
             case FAILURE:
-                throw new OdeFault("Message exchange failure");
+                if (__log.isDebugEnabled())
+                    __log.debug("Failure response message: " + mex.getFault());
+                OdeFault odeFault = _converter.createOdeFault(mex.getFaultExplanation(), mex.getFaultResponse());
+                throw odeFault;
             default:
                 throw new OdeFault("Received ODE message exchange in unexpected state: " + mex.getStatus());
         }

Modified: ode/branches/APACHE_ODE_1.X/axis2/src/main/java/org/apache/ode/axis2/OdeFault.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/axis2/src/main/java/org/apache/ode/axis2/OdeFault.java?rev=765008&r1=765007&r2=765008&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/axis2/src/main/java/org/apache/ode/axis2/OdeFault.java (original)
+++ ode/branches/APACHE_ODE_1.X/axis2/src/main/java/org/apache/ode/axis2/OdeFault.java Tue Apr 14 23:38:29 2009
@@ -22,6 +22,7 @@
 import javax.xml.namespace.QName;
 
 import org.apache.axis2.AxisFault;
+import org.apache.axiom.om.OMElement;
 
 /**
  * User-friendly version of AxisFault
@@ -46,4 +47,7 @@
         super(new QName("java:"+cause.getClass().getPackage(), cause.getClass().getName(), "java"), message, cause);
     }
 
+    public OdeFault(String message, OMElement faultDetail) {
+        super(FAULT, message, null, null, faultDetail);
+    }
 }

Modified: ode/branches/APACHE_ODE_1.X/axis2/src/main/java/org/apache/ode/axis2/SoapExternalService.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/axis2/src/main/java/org/apache/ode/axis2/SoapExternalService.java?rev=765008&r1=765007&r2=765008&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/axis2/src/main/java/org/apache/ode/axis2/SoapExternalService.java (original)
+++ ode/branches/APACHE_ODE_1.X/axis2/src/main/java/org/apache/ode/axis2/SoapExternalService.java Tue Apr 14 23:38:29 2009
@@ -20,6 +20,8 @@
 package org.apache.ode.axis2;
 
 import org.apache.axiom.soap.SOAPEnvelope;
+import org.apache.axiom.soap.SOAPFaultReason;
+import org.apache.axiom.soap.SOAPFault;
 import org.apache.axis2.AxisFault;
 import org.apache.axis2.addressing.EndpointReference;
 import org.apache.axis2.client.OperationClient;
@@ -487,8 +489,11 @@
                             } else {
                                 if (__log.isWarnEnabled())
                                     __log.warn("Fault response: faultType=(unkown)\n" + reply.getEnvelope().toString());
-                                odeMex.replyWithFailure(FailureType.OTHER, reply.getEnvelope().getBody().getFault().getReason().getText(),
-                                        OMUtils.toDOM(reply.getEnvelope().getBody()));
+                                final SOAPFaultReason r = reply.getEnvelope().getBody().getFault().getReason();
+                                SOAPFault f = reply.getEnvelope().getBody().getFault();
+                                String reason = r != null ? r.getText() : "Unspecified";
+                                Element details = f != null ? OMUtils.toDOM(f) : null;
+                                odeMex.replyWithFailure(FailureType.OTHER, reason, details);
                             }
                         } else {
                             Message response = odeMex.createMessage(odeMex.getOperation().getOutput().getMessage().getQName());

Modified: ode/branches/APACHE_ODE_1.X/axis2/src/main/java/org/apache/ode/axis2/util/SoapMessageConverter.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/axis2/src/main/java/org/apache/ode/axis2/util/SoapMessageConverter.java?rev=765008&r1=765007&r2=765008&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/axis2/src/main/java/org/apache/ode/axis2/util/SoapMessageConverter.java (original)
+++ ode/branches/APACHE_ODE_1.X/axis2/src/main/java/org/apache/ode/axis2/util/SoapMessageConverter.java Tue Apr 14 23:38:29 2009
@@ -44,7 +44,9 @@
 import javax.wsdl.extensions.soap.SOAPHeader;
 import javax.wsdl.extensions.soap.SOAPOperation;
 import javax.xml.namespace.QName;
+import javax.xml.transform.dom.DOMSource;
 import java.util.*;
+import java.io.IOException;
 
 import org.apache.axiom.om.OMAbstractFactory;
 import org.apache.axiom.om.OMElement;
@@ -544,4 +546,28 @@
         return WsdlUtils.inferFault(operation, elName);
     }
 
+    /**
+     *
+     * @param faultExplanation
+     * @param faultResponse
+     * @return an OdeFault
+     */
+    public OdeFault createOdeFault(String faultExplanation, org.apache.ode.bpel.iapi.Message faultResponse) {
+        String message = new StringBuilder("Message exchange failure due to: ").append(faultExplanation).toString();
+        OMElement detail = null;
+        if (faultResponse!=null) {
+            Element messageElement = faultResponse.getMessage();
+            if (messageElement != null) {
+                Element detailElement = DOMUtils.getFirstChildElement(messageElement);
+                if (detailElement != null) {
+                    try {
+                        detail = OMUtils.toOM(new DOMSource(messageElement));
+                    } catch (IOException ignore) {
+                    }
+                }
+            }
+        }
+        return new OdeFault(message, detail);
+    }
+
 }

Modified: ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelRuntimeContextImpl.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelRuntimeContextImpl.java?rev=765008&r1=765007&r2=765008&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelRuntimeContextImpl.java (original)
+++ ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelRuntimeContextImpl.java Tue Apr 14 23:38:29 2009
@@ -50,7 +50,6 @@
 import org.apache.ode.bpel.evt.ProcessMessageExchangeEvent;
 import org.apache.ode.bpel.evt.ProcessTerminationEvent;
 import org.apache.ode.bpel.evt.ScopeEvent;
-import org.apache.ode.bpel.iapi.BpelEngine;
 import org.apache.ode.bpel.iapi.BpelEngineException;
 import org.apache.ode.bpel.iapi.ContextException;
 import org.apache.ode.bpel.iapi.Endpoint;
@@ -1240,6 +1239,7 @@
         MessageExchange.Status status = MessageExchange.Status.valueOf(dao.getStatus());
         switch (status) {
             case FAULT:
+            case FAILURE:
             case RESPONSE:
                 response = dao.getResponse();
                 if (response == null) {
@@ -1299,6 +1299,18 @@
         __log.info("ActivityRecovery: Registering activity " + activityId + ", failure reason: " + reason +
                 " on channel " + channel.export());
         _dao.createActivityRecovery(channel.export(), (int) activityId, reason, dateTime, details, actions, retries);
+        // Release and fail any outstanding request
+        String[] mexRefs = _outstandingRequests.releaseAll();
+        if(mexRefs!=null){
+            for(String mexRef:mexRefs){
+                MessageExchangeDAO mexDao = _dao.getConnection().getMessageExchange(mexRef);
+                if (mexDao !=null) {
+                    MyRoleMessageExchangeImpl mex = new MyRoleMessageExchangeImpl(_bpelProcess, _bpelProcess._engine, mexDao);
+                    _bpelProcess.initMyRoleMex(mex);
+                    mex.setFailure(FailureType.OTHER, reason, details);
+                }
+            }
+        }
     }
 
     public void unregisterActivityForRecovery(ActivityRecoveryChannel channel) {

Modified: ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/MessageExchangeImpl.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/MessageExchangeImpl.java?rev=765008&r1=765007&r2=765008&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/MessageExchangeImpl.java (original)
+++ ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/MessageExchangeImpl.java Tue Apr 14 23:38:29 2009
@@ -28,6 +28,7 @@
 import org.apache.ode.bpel.iapi.Message;
 import org.apache.ode.bpel.iapi.MessageExchange;
 import org.apache.ode.utils.msg.MessageBundle;
+import org.apache.ode.utils.Namespaces;
 import org.w3c.dom.Element;
 
 import javax.wsdl.Operation;
@@ -175,9 +176,14 @@
     }
 
     void setFailure(FailureType type, String reason, Element details) throws BpelEngineException {
-        // TODO not using FailureType, nor details
+        // TODO not using FailureType
         setStatus(Status.FAILURE);
         getDAO().setFaultExplanation(reason);
+        if (details != null) {
+            Message message = createMessage(new QName(Namespaces.ODE_EXTENSION_NS, "failureMessage"));
+            message.setMessage(details);
+            getDAO().setResponse(((MessageImpl) message)._dao);
+        }
         responseReceived();        
     }
 

Modified: ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/INVOKE.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/INVOKE.java?rev=765008&r1=765007&r2=765008&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/INVOKE.java (original)
+++ ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/INVOKE.java Tue Apr 14 23:38:29 2009
@@ -184,10 +184,10 @@
                         // and either retry or indicate failure condition.
                         // admin to resume the process.
                         String reason = getBpelRuntimeContext().getPartnerFaultExplanation(mexId);
+                        Element msg = getBpelRuntimeContext().getPartnerResponse(mexId);
                         __log.error("Failure during invoke: " + reason);
                         try {
-                            Element el = DOMUtils.stringToDOM("<invokeFailure><![CDATA["+reason+"]]></invokeFailure>");
-                            _self.parent.failure(reason, el);
+                            _self.parent.failure(reason, msg);
                         } catch (Exception e) {
                             _self.parent.failure(reason, null);
                         }