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