Author: gatfora
Date: Tue Mar 20 04:47:25 2007
New Revision: 520369
URL: http://svn.apache.org/viewvc?view=rev&rev=520369
Log:
Mark the RMSBean as terminated if a SequenceUnknown or SequenceTerminated fault
is returned from the RMD
Modified:
webservices/sandesha/trunk/java/config/module.xml
webservices/sandesha/trunk/java/src/org/apache/sandesha2/Sandesha2Constants.java
webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaInHandler.java
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/CreateSeqMsgProcessor.java
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/FaultManager.java
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SpecSpecificConstants.java
webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/FaultCode.java
webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/faulttests/SequenceTerminatedFaultTest.java
Modified: webservices/sandesha/trunk/java/config/module.xml
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/config/module.xml?view=diff&rev=520369&r1=520368&r2=520369
==============================================================================
--- webservices/sandesha/trunk/java/config/module.xml (original)
+++ webservices/sandesha/trunk/java/config/module.xml Tue Mar 20 04:47:25 2007
@@ -43,10 +43,12 @@
<actionMapping>http://schemas.xmlsoap.org/ws/2005/02/rm/SequenceAcknowledgement</actionMapping>
<!-- namespaces for the 2007-02 spec -->
-
<actionMapping>http://docs.oasis-open.org/ws-rx/wsrm/200702/SequenceAcknowledgement</actionMapping>
-
+
<actionMapping>http://docs.oasis-open.org/ws-rx/wsrm/200702/SequenceAcknowledgement</actionMapping>
+
<actionMapping>http://docs.oasis-open.org/ws-rx/wsrm/200702/fault</actionMapping>
+
<!-- For interoparability perposes. Some WSRM implementations tend to
send this as the LastMessage -->
<actionMapping>http://schemas.xmlsoap.org/ws/2005/02/rm/LastMessage</actionMapping>
+
</operation>
<operation name="RMInOutOperation"
mep="http://www.w3.org/2006/01/wsdl/in-out">
Modified:
webservices/sandesha/trunk/java/src/org/apache/sandesha2/Sandesha2Constants.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/Sandesha2Constants.java?view=diff&rev=520369&r1=520368&r2=520369
==============================================================================
---
webservices/sandesha/trunk/java/src/org/apache/sandesha2/Sandesha2Constants.java
(original)
+++
webservices/sandesha/trunk/java/src/org/apache/sandesha2/Sandesha2Constants.java
Tue Mar 20 04:47:25 2007
@@ -96,27 +96,29 @@
public interface Actions {
// WS-RM actions
- String ACTION_CREATE_SEQUENCE =
SPEC_2007_02.NS_URI + "/CreateSequence";
- String ACTION_CREATE_SEQUENCE_RESPONSE =
SPEC_2007_02.NS_URI + "/CreateSequenceResponse";
- String ACTION_CLOSE_SEQUENCE =
SPEC_2007_02.NS_URI + "/CloseSequence";
- String ACTION_CLOSE_SEQUENCE_RESPONSE =
SPEC_2007_02.NS_URI + "/CloseSequenceResponse";
- String ACTION_TERMINATE_SEQUENCE =
SPEC_2007_02.NS_URI + "/TerminateSequence";
- String ACTION_TERMINATE_SEQUENCE_RESPONSE =
SPEC_2007_02.NS_URI + "/TerminateSequenceResponse";
- String ACTION_SEQUENCE_ACKNOWLEDGEMENT =
SPEC_2007_02.NS_URI + "/SequenceAcknowledgement";
- String ACTION_ACK_REQUEST =
SPEC_2007_02.NS_URI + "/AckRequested";
+ public static final String ACTION_CREATE_SEQUENCE
= SPEC_2007_02.NS_URI + "/CreateSequence";
+ public static final String
ACTION_CREATE_SEQUENCE_RESPONSE = SPEC_2007_02.NS_URI +
"/CreateSequenceResponse";
+ public static final String ACTION_CLOSE_SEQUENCE
= SPEC_2007_02.NS_URI + "/CloseSequence";
+ public static final String
ACTION_CLOSE_SEQUENCE_RESPONSE = SPEC_2007_02.NS_URI +
"/CloseSequenceResponse";
+ public static final String ACTION_TERMINATE_SEQUENCE
= SPEC_2007_02.NS_URI + "/TerminateSequence";
+ public static final String
ACTION_TERMINATE_SEQUENCE_RESPONSE = SPEC_2007_02.NS_URI +
"/TerminateSequenceResponse";
+ public static final String
ACTION_SEQUENCE_ACKNOWLEDGEMENT = SPEC_2007_02.NS_URI +
"/SequenceAcknowledgement";
+ public static final String ACTION_ACK_REQUEST
= SPEC_2007_02.NS_URI + "/AckRequested";
+ public static final String ACTION_FAULT
= SPEC_2007_02.NS_URI + "/fault";
// WS-MC actions
- String ACTION_MAKE_CONNECTION =
SPEC_2007_02.MC_NS_URI + "/MakeConnection";
+ public static final String ACTION_MAKE_CONNECTION
= SPEC_2007_02.MC_NS_URI + "/MakeConnection";
- String SOAP_ACTION_CREATE_SEQUENCE =
ACTION_CREATE_SEQUENCE;
- String SOAP_ACTION_CREATE_SEQUENCE_RESPONSE =
ACTION_CREATE_SEQUENCE_RESPONSE;
- String SOAP_ACTION_CLOSE_SEQUENCE =
ACTION_CLOSE_SEQUENCE;
- String SOAP_ACTION_CLOSE_SEQUENCE_RESPONSE =
ACTION_CLOSE_SEQUENCE_RESPONSE;
- String SOAP_ACTION_TERMINATE_SEQUENCE =
ACTION_TERMINATE_SEQUENCE;
- String SOAP_ACTION_TERMINATE_SEQUENCE_RESPONSE =
ACTION_TERMINATE_SEQUENCE_RESPONSE;
- String SOAP_ACTION_SEQUENCE_ACKNOWLEDGEMENT =
ACTION_SEQUENCE_ACKNOWLEDGEMENT;
- String SOAP_ACTION_ACK_REQUEST =
ACTION_ACK_REQUEST;
- String SOAP_ACTION_MAKE_CONNECTION =
ACTION_MAKE_CONNECTION;
+ public static final String SOAP_ACTION_CREATE_SEQUENCE
= ACTION_CREATE_SEQUENCE;
+ public static final String
SOAP_ACTION_CREATE_SEQUENCE_RESPONSE = ACTION_CREATE_SEQUENCE_RESPONSE;
+ public static final String SOAP_ACTION_CLOSE_SEQUENCE
= ACTION_CLOSE_SEQUENCE;
+ public static final String
SOAP_ACTION_CLOSE_SEQUENCE_RESPONSE = ACTION_CLOSE_SEQUENCE_RESPONSE;
+ public static final String
SOAP_ACTION_TERMINATE_SEQUENCE = ACTION_TERMINATE_SEQUENCE;
+ public static final String
SOAP_ACTION_TERMINATE_SEQUENCE_RESPONSE = ACTION_TERMINATE_SEQUENCE_RESPONSE;
+ public static final String
SOAP_ACTION_SEQUENCE_ACKNOWLEDGEMENT = ACTION_SEQUENCE_ACKNOWLEDGEMENT;
+ public static final String SOAP_ACTION_ACK_REQUEST
= ACTION_ACK_REQUEST;
+ public static final String SOAP_ACTION_MAKE_CONNECTION
= ACTION_MAKE_CONNECTION;
+ public static final String SOAP_ACTION_FAULT
= ACTION_FAULT;
}
public interface QNames {
Modified:
webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaInHandler.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaInHandler.java?view=diff&rev=520369&r1=520368&r2=520369
==============================================================================
---
webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaInHandler.java
(original)
+++
webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaInHandler.java
Tue Mar 20 04:47:25 2007
@@ -134,7 +134,8 @@
returnValue =
seqProcessor.processSequenceHeader(rmMsgCtx);
} catch (Exception e) {
- if (log.isDebugEnabled())
log.debug("SandeshaInHandler::invoke Exception caught during processInMessage",
e);
+ if (log.isDebugEnabled())
+ log.debug("SandeshaInHandler::invoke Exception
caught during processInMessage", e);
// message should not be sent in a exception situation.
msgCtx.pause();
returnValue = InvocationResponse.SUSPEND;
@@ -148,6 +149,10 @@
log.debug(message, e);
}
}
+
+ // Rethrow the original exception if it is an AxisFault
+ if (e instanceof AxisFault)
+ throw (AxisFault)e;
String message =
SandeshaMessageHelper.getMessage(SandeshaMessageKeys.inMsgError, e.toString());
throw new AxisFault(message, e);
Modified:
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/CreateSeqMsgProcessor.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/CreateSeqMsgProcessor.java?view=diff&rev=520369&r1=520368&r2=520369
==============================================================================
---
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/CreateSeqMsgProcessor.java
(original)
+++
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/CreateSeqMsgProcessor.java
Tue Mar 20 04:47:25 2007
@@ -104,6 +104,35 @@
secManager.checkProofOfPossession(token, body,
msgcontext);
}
+ //if toAddress is RMAnon we may need to terminate the
request side sequence here.
+ EndpointReference toEPR = createSeqMsg.getTo();
+ if (toEPR.hasAnonymousAddress()) {
+
+ RMSBean findBean = new RMSBean ();
+ findBean.setReplyToEPR(toEPR.getAddress());
+ findBean.setTerminationPauserForCS(true);
+
+ //TODO recheck
+ RMSBean rmsBean =
storageManager.getRMSBeanMgr().findUnique(findBean);
+ if (rmsBean!=null) {
+ //AckManager hs not done the
termination. Do the termination here.
+ MessageContext requestSideRefMessage =
storageManager.retrieveMessageContext(rmsBean.getReferenceMessageStoreKey(),context);
+ if (requestSideRefMessage==null) {
+
FaultManager.makeCreateSequenceRefusedFault(createSeqRMMsg,
+
SandeshaMessageHelper.getMessage(SandeshaMessageKeys.referencedMessageNotFound,
rmsBean.getInternalSequenceID()),
+ new
Exception());
+ // Return false if an Exception
hasn't been thrown.
+ if (log.isDebugEnabled())
+ log.debug("Exit:
CreateSeqMsgProcessor::processInMessage " + Boolean.FALSE);
+ return false;
+ }
+
+ RMMsgContext requestSideRefRMMessage =
MsgInitializer.initializeMessage(requestSideRefMessage);
+
TerminateManager.addTerminateSequenceMessage(requestSideRefRMMessage,
rmsBean.getInternalSequenceID(), rmsBean.getSequenceID(), storageManager);
+ }
+ }
+
+
MessageContext outMessage = null;
// Create the new sequence id, as well as establishing
the beans that handle the
@@ -206,7 +235,6 @@
// If the inbound sequence is targetted at the
anonymous URI, we need to start
// polling for this sequence.
- EndpointReference toEPR = createSeqMsg.getTo();
if (toEPR.hasAnonymousAddress()) {
if
(Sandesha2Constants.SPEC_VERSIONS.v1_1.equals(createSeqRMMsg.getRMSpecVersion()))
{
rmdBean.setPollingMode(true);
@@ -242,33 +270,6 @@
// findBean.setName
(Sandesha2Constants.SequenceProperties.TERMINATE_ON_CREATE_SEQUENCE);
// findBean.setValue(createSeqMsg.getTo().getAddress());
- //if toAddress is RMAnon we may need to terminate the
request side sequence here.
- if (toEPR.hasAnonymousAddress()) {
-
- RMSBean findBean = new RMSBean ();
- findBean.setReplyToEPR(toEPR.getAddress());
- findBean.setTerminationPauserForCS(true);
-
- //TODO recheck
- RMSBean rmsBean =
storageManager.getRMSBeanMgr().findUnique(findBean);
- if (rmsBean!=null) {
- //AckManager hs not done the
termination. Do the termination here.
- MessageContext requestSideRefMessage =
storageManager.retrieveMessageContext(rmsBean.getReferenceMessageStoreKey(),context);
- if (requestSideRefMessage==null) {
-
FaultManager.makeCreateSequenceRefusedFault(createSeqRMMsg,
-
SandeshaMessageHelper.getMessage(SandeshaMessageKeys.referencedMessageNotFound,
rmsBean.getInternalSequenceID()),
- new
Exception());
- // Return false if an Exception
hasn't been thrown.
- if (log.isDebugEnabled())
- log.debug("Exit:
CreateSeqMsgProcessor::processInMessage " + Boolean.FALSE);
- return false;
- }
-
- RMMsgContext requestSideRefRMMessage =
MsgInitializer.initializeMessage(requestSideRefMessage);
-
TerminateManager.addTerminateSequenceMessage(requestSideRefRMMessage,
rmsBean.getInternalSequenceID(), rmsBean.getSequenceID(), storageManager);
- }
- }
-
createSeqRMMsg.pause();
}
catch (Exception e) {
Modified:
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/FaultManager.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/FaultManager.java?view=diff&rev=520369&r1=520368&r2=520369
==============================================================================
---
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/FaultManager.java
(original)
+++
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/FaultManager.java
Tue Mar 20 04:47:25 2007
@@ -466,7 +466,11 @@
referenceRMMsgContext.getMessageContext().getOperationContext().setProperty(
org.apache.axis2.Constants.RESPONSE_WRITTEN, Constants.VALUE_TRUE);
-
+
+ // Set the action
+ faultMessageContext.setWSAAction(
+
SpecSpecificConstants.getAddressingFaultAction(referenceRMMsgContext.getRMSpecVersion()));
+
if (log.isDebugEnabled())
log.debug("Sending fault message " +
faultMessageContext.getEnvelope().getHeader());
// Send the message
@@ -479,6 +483,7 @@
throw new SandeshaException (message);
}
AxisFault fault = new
AxisFault(faultColdValue.getTextAsQName(), data.getReason(), "", "",
data.getDetail());
+
fault.setFaultAction(SpecSpecificConstants.getAddressingFaultAction(referenceRMMsgContext.getRMSpecVersion()));
throw fault;
}
@@ -516,6 +521,7 @@
String SOAPNamespaceValue = factory.getSoapVersionURI();
String soapFaultSubcode = null;
+ String identifier = null;
if
(SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI.equals(SOAPNamespaceValue)) {
// Log the fault
if (faultPart.getCode() != null &&
@@ -530,15 +536,21 @@
// If the sequence fault part is not null, then we have an RM
specific fault.
if (sequenceFault != null) {
soapFaultSubcode = sequenceFault.getFaultCode().getFaultCode();
+
+ // Get the identifier - if there is one.
+ identifier = sequenceFault.getFaultCode().getDetail();
}
} catch (SandeshaException e) {
if (log.isDebugEnabled())
- log.debug("Unable to process SequenceFault");
+ log.debug("Unable to process SequenceFault", e);
}
}
if
(Sandesha2Constants.SOAPFaults.Subcodes.CREATE_SEQUENCE_REFUSED.equals(soapFaultSubcode))
{
processCreateSequenceRefusedFault(rmMsgCtx, fault);
+ } else if
(Sandesha2Constants.SOAPFaults.Subcodes.UNKNOWN_SEQUENCE.equals(soapFaultSubcode)
||
+
Sandesha2Constants.SOAPFaults.Subcodes.SEQUENCE_TERMINATED.equals(soapFaultSubcode)
) {
+ processSequenceUnknownFault(rmMsgCtx, fault,
identifier);
}
}
@@ -683,7 +695,52 @@
if (log.isDebugEnabled())
log.debug("Exit:
FaultManager::processCreateSequenceRefusedFault");
}
-
+
+ /**
+ * If the RMD returns a SequenceTerminated, or an Unknown sequence
fault, then we should
+ * mark the RMS Sequence as terminated and notify clients of the error.
+ *
+ * @param rmMsgCtx
+ * @param fault
+ * @param identifier
+ */
+ private static void processSequenceUnknownFault(RMMsgContext rmMsgCtx,
AxisFault fault, String sequenceID) throws AxisFault {
+ if (log.isDebugEnabled())
+ log.debug("Enter:
FaultManager::processSequenceUnknownFault " + sequenceID);
+
+ ConfigurationContext configCtx =
rmMsgCtx.getMessageContext().getConfigurationContext();
+
+ StorageManager storageManager =
SandeshaUtil.getSandeshaStorageManager(configCtx, configCtx
+ .getAxisConfiguration());
+
+ // Find the rmsBean
+ RMSBean rmsBean =
SandeshaUtil.getRMSBeanFromSequenceId(storageManager, sequenceID);
+ if (rmsBean == null) {
+ if (log.isDebugEnabled())
+ log.debug("Exit:
FaultManager::processSequenceUnknownFault Unable to find RMSBean");
+ return;
+ }
+
+ // Notify the clients of a failure
+ notifyClientsOfFault(rmsBean.getInternalSequenceID(),
storageManager, configCtx, fault);
+
+ rmMsgCtx.pause();
+
+ // Cleanup sending side.
+ if (log.isDebugEnabled())
+ log.debug("Terminating sending sequence " + rmsBean);
+ TerminateManager.terminateSendingSide(rmsBean, storageManager);
+
+ // Update the last activated time.
+ rmsBean.setLastActivatedTime(System.currentTimeMillis());
+
+ // Update the bean in the map
+ storageManager.getRMSBeanMgr().update(rmsBean);
+
+ if (log.isDebugEnabled())
+ log.debug("Exit:
FaultManager::processSequenceUnknownFault");
+ }
+
static void notifyClientsOfFault(String internalSequenceId,
StorageManager storageManager, ConfigurationContext
configCtx, AxisFault fault) throws SandeshaStorageException {
// Locate and update all of the messages for this sequence, now
that we know
Modified:
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SpecSpecificConstants.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SpecSpecificConstants.java?view=diff&rev=520369&r1=520368&r2=520369
==============================================================================
---
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SpecSpecificConstants.java
(original)
+++
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SpecSpecificConstants.java
Tue Mar 20 04:47:25 2007
@@ -293,15 +293,15 @@
addressingNSURI));
}
- public static String getAddressingFaultAction (String addressingNSURI)
throws SandeshaException {
- if
(AddressingConstants.Submission.WSA_NAMESPACE.equals(addressingNSURI))
- return
"http://docs.oasis-open.org/ws-rx/wsrm/200608/fault"; //this is not available
in addressing constants )-:
- else if
(AddressingConstants.Final.WSA_NAMESPACE.equals(addressingNSURI))
+ public static String getAddressingFaultAction (String specVersion)
throws SandeshaException {
+ if (Sandesha2Constants.SPEC_VERSIONS.v1_0.equals(specVersion))
return AddressingConstants.Final.WSA_FAULT_ACTION;
- else
+ else if
(Sandesha2Constants.SPEC_VERSIONS.v1_1.equals(specVersion))
+ return
Sandesha2Constants.SPEC_2007_02.Actions.SOAP_ACTION_FAULT;
+ else
throw new SandeshaException
(SandeshaMessageHelper.getMessage(
- SandeshaMessageKeys.unknownWSAVersion,
- addressingNSURI));
+ SandeshaMessageKeys.unknownSpec,
+ specVersion));
}
public static String getAddressingNamespace(String rmNamespace) throws
SandeshaException {
Modified:
webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/FaultCode.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/FaultCode.java?view=diff&rev=520369&r1=520368&r2=520369
==============================================================================
---
webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/FaultCode.java
(original)
+++
webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/FaultCode.java
Tue Mar 20 04:47:25 2007
@@ -81,8 +81,16 @@
this.faultCode = faultCodePart.getText();
- if (detailPart != null)
- detail = detailPart.getText();
+ if (detailPart != null) {
+ detailOMElement = detailPart;
+
+ OMElement identifier = detailPart
+ .getFirstChildWithName(new
QName(namespaceValue,
+
Sandesha2Constants.WSRM_COMMON.IDENTIFIER));
+ if (identifier != null) {
+ detail = identifier.getText();
+ }
+ }
return sequenceFault;
Modified:
webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/faulttests/SequenceTerminatedFaultTest.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/faulttests/SequenceTerminatedFaultTest.java?view=diff&rev=520369&r1=520368&r2=520369
==============================================================================
---
webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/faulttests/SequenceTerminatedFaultTest.java
(original)
+++
webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/faulttests/SequenceTerminatedFaultTest.java
Tue Mar 20 04:47:25 2007
@@ -20,19 +20,28 @@
import java.io.File;
import java.io.OutputStream;
import java.net.HttpURLConnection;
+import java.util.List;
import javax.xml.namespace.QName;
+import org.apache.axiom.soap.SOAP12Constants;
import org.apache.axiom.soap.SOAPEnvelope;
import org.apache.axiom.soap.SOAPFactory;
import org.apache.axiom.soap.impl.llom.soap11.SOAP11Factory;
import org.apache.axis2.addressing.AddressingConstants;
+import org.apache.axis2.addressing.EndpointReference;
+import org.apache.axis2.client.Options;
+import org.apache.axis2.client.ServiceClient;
import org.apache.axis2.context.ConfigurationContext;
+import org.apache.axis2.context.ConfigurationContextFactory;
import org.apache.axis2.context.MessageContext;
import org.apache.axis2.description.AxisOperation;
import org.apache.sandesha2.RMMsgContext;
import org.apache.sandesha2.Sandesha2Constants;
import org.apache.sandesha2.SandeshaTestCase;
+import org.apache.sandesha2.client.SandeshaClient;
+import org.apache.sandesha2.client.SandeshaClientConstants;
+import org.apache.sandesha2.client.SequenceReport;
import org.apache.sandesha2.msgreceivers.RMMessageReceiver;
import org.apache.sandesha2.storage.StorageManager;
import org.apache.sandesha2.storage.Transaction;
@@ -263,6 +272,134 @@
}
/**
+ * When sending application messages, if the RMD sequence returns a
sequence terminated
+ * fault, then the RMS Sequence should be terminated
+ */
+ public void testRMSSequenceTerminatedOnSequenceTerminatedFault() throws
Exception {
+ runSequenceTerminated(false, false);
+ }
+
+ /**
+ * When sending application messages, if the RMD sequence returns a
sequence terminated
+ * fault, then the RMS Sequence should be terminated.
+ *
+ * Runs at SOAP12 level
+ */
+ public void testRMSSequenceTerminatedOnSequenceTerminatedFaultSOAP12()
throws Exception {
+ runSequenceTerminated(false, true);
+ }
+
+ /**
+ * When sending application messages, if the RMD sequence returns a
sequence terminated
+ * fault, then the RMS Sequence should be terminated
+ */
+ public void testRMSSequenceTerminatedOnSequenceUnknownFault() throws
Exception {
+ runSequenceTerminated(true, false);
+ }
+
+ /**
+ * When sending application messages, if the RMD sequence returns a
sequence terminated
+ * fault, then the RMS Sequence should be terminated
+ *
+ * Runs at SOAP12 level
+ */
+ public void testRMSSequenceTerminatedOnSequenceUnknownFaultSOAP12()
throws Exception {
+ org.apache.log4j.BasicConfigurator.configure();
+ runSequenceTerminated(true, true);
+ }
+
+ private void runSequenceTerminated(boolean deleteRMSBean, boolean
soap12) throws Exception {
+ String to = "http://127.0.0.1:" + serverPort +
"/axis2/services/RMSampleService";
+
+ String repoPath = "target" + File.separator + "repos" +
File.separator + "client";
+ String axis2_xml = "target" + File.separator + "repos" +
File.separator + "client" + File.separator + "client_axis2.xml";
+
+ ConfigurationContext configContext =
ConfigurationContextFactory.createConfigurationContextFromFileSystem(repoPath,axis2_xml);
+
+ Options clientOptions = new Options ();
+ clientOptions.setAction(pingAction);
+ clientOptions.setTo(new EndpointReference (to));
+
+ String sequenceKey = SandeshaUtil.getUUID();
+
clientOptions.setProperty(SandeshaClientConstants.SEQUENCE_KEY,sequenceKey);
+
clientOptions.setProperty(SandeshaClientConstants.RM_SPEC_VERSION,Sandesha2Constants.SPEC_VERSIONS.v1_1);
+
+ if (soap12)
+
clientOptions.setSoapVersionURI(SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI);
+
+ ServiceClient serviceClient = new ServiceClient
(configContext,null);
+ serviceClient.setOptions(clientOptions);
+
+ // Send a single ping message
+ serviceClient.fireAndForget(getPingOMBlock("ping1"));
+
+ long limit = System.currentTimeMillis() + waitTime;
+ Error lastError = null;
+ while(System.currentTimeMillis() < limit) {
+ Thread.sleep(tickTime); // Try the assertions each tick
interval, until they pass or we time out
+
+ // Check that the sequence has been deleted.
+ StorageManager storageManager =
+
SandeshaUtil.getSandeshaStorageManager(serverConfigContext,
serverConfigContext.getAxisConfiguration());
+
+ Transaction tran = storageManager.getTransaction();
+
+ RMDBean finderBean = new RMDBean();
+ List rmdBeans =
storageManager.getRMDBeanMgr().find(finderBean);
+
+ tran.commit();
+
+ lastError = null;
+
+ if (rmdBeans.isEmpty())
+ lastError = new Error("rmdBeans empty " +
rmdBeans);
+ else {
+ RMDBean bean = (RMDBean)rmdBeans.get(0);
+ if
(!bean.getServerCompletedMessages().getContainedElementsAsNumbersList().contains(new
Integer(1))) {
+ tran = storageManager.getTransaction();
+ if (deleteRMSBean) {
+
storageManager.getRMDBeanMgr().delete(bean.getSequenceID());
+ } else {
+ bean.setTerminated(true);
+
storageManager.getRMDBeanMgr().update(bean);
+ }
+ tran.commit();
+ break;
+ }
+
+ lastError = new Error("App message has not
arrived");
+ }
+ }
+
+ if(lastError != null) throw lastError;
+
+ // Send a second application message.
+ serviceClient.fireAndForget(getPingOMBlock("ping2"));
+
+ while(System.currentTimeMillis() < limit) {
+ Thread.sleep(tickTime); // Try the assertions each tick
interval, until they pass or we time out
+
+ try {
+ //Check that the outgoing sequence is terminated
+ SequenceReport sequenceReport =
SandeshaClient.getOutgoingSequenceReport(serviceClient);
+
assertEquals(sequenceReport.getSequenceStatus(),SequenceReport.SEQUENCE_STATUS_TERMINATED);
+
assertEquals(sequenceReport.getSequenceDirection(),SequenceReport.SEQUENCE_DIRECTION_OUT);
+
+ lastError = null;
+ break;
+ } catch(Error e) {
+ lastError = e;
+ }
+ }
+
+ if(lastError != null) throw lastError;
+
+ configContext.getListenerManager().stop();
+ serviceClient.cleanup();
+
+ }
+
+ /**
* Get an application message as bytes
*
* @return
@@ -410,4 +547,5 @@
}
}
+
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]