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]

Reply via email to