You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fx-dev@ws.apache.org by ga...@apache.org on 2007/03/20 12:47:27 UTC
svn commit: r520369 - in /webservices/sandesha/trunk/java: config/
src/org/apache/sandesha2/ src/org/apache/sandesha2/handlers/
src/org/apache/sandesha2/msgprocessors/ src/org/apache/sandesha2/util/
src/org/apache/sandesha2/wsrm/ test/src/org/apache/sa...
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: sandesha-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: sandesha-dev-help@ws.apache.org