Author: mckierna
Date: Wed Sep 17 02:54:23 2008
New Revision: 696224

URL: http://svn.apache.org/viewvc?rev=696224&view=rev
Log:
Some improvements to invalid ack processing

Modified:
    
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/AcknowledgementProcessor.java
    
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/util/FaultManager.java
    
webservices/sandesha/trunk/java/modules/tests/src/test/java/org/apache/sandesha2/faulttests/FaultTestUtils.java
    
webservices/sandesha/trunk/java/modules/tests/src/test/java/org/apache/sandesha2/faulttests/InvalidAcknowledgementTest.java

Modified: 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/AcknowledgementProcessor.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/AcknowledgementProcessor.java?rev=696224&r1=696223&r2=696224&view=diff
==============================================================================
--- 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/AcknowledgementProcessor.java
 (original)
+++ 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/AcknowledgementProcessor.java
 Wed Sep 17 02:54:23 2008
@@ -156,13 +156,14 @@
                                        for(long messageNo = 
newRanges[rangeIndex].lowerValue; messageNo<=newRanges[rangeIndex].upperValue; 
messageNo++){
                                                
                                                numberOfNewMessagesAcked++;
-                                               SenderBean retransmitterBean = 
retransmitterMgr.retrieve(outSequenceId, messageNo);                            
                 if (retransmitterBean != null) {
+                                               SenderBean retransmitterBean = 
retransmitterMgr.retrieve(outSequenceId, messageNo);                            
                 
+                                               if (retransmitterBean != null) {
                                                        // Check we haven't got 
an Ack for a message that hasn't been sent yet !
                                                        if 
(retransmitterBean.getSentCount() == 0) {
                                                                
FaultManager.makeInvalidAcknowledgementFault(rmMsgCtx, sequenceAck, ackRange,
                                                                                
storageManager, piggybackedAck, null); //do not want to send the fault to 
acksTo in this case
                                                                if 
(log.isDebugEnabled())
-                                                                       
log.debug("Exit: AcknowledgementProcessor::processAckHeader, Invalid Ack");
+                                                                       
log.debug("Exit: AcknowledgementProcessor::processAckHeader, Invalid Ack as 
message has not been sent");
                                                                return;
                                                        }
                                                        

Modified: 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/util/FaultManager.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/util/FaultManager.java?rev=696224&r1=696223&r2=696224&view=diff
==============================================================================
--- 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/util/FaultManager.java
 (original)
+++ 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/util/FaultManager.java
 Wed Sep 17 02:54:23 2008
@@ -228,14 +228,7 @@
                if (log.isDebugEnabled())
                        log.debug("Enter: 
FaultManager::checkForInvalidAcknowledgement");
 
-               // check lower<=upper
-               if (ackRMMessageContext.getMessageType() != 
Sandesha2Constants.MessageTypes.ACK) {
-                       if (log.isDebugEnabled())
-                               log.debug("Exit: 
FaultManager::checkForInvalidAcknowledgement, MessageType not an ACK");
-               }
-
-               boolean invalidAck = false;
-               
+               boolean invalidAck = false;             
                List sequenceAckList = 
sequenceAcknowledgement.getAcknowledgementRanges();
                Iterator it = sequenceAckList.iterator();
 
@@ -256,7 +249,7 @@
                }               
 
                if (log.isDebugEnabled())
-                       log.debug("Exit: 
FaultManager::checkForInvalidAcknowledgement");
+                       log.debug("Exit: 
FaultManager::checkForInvalidAcknowledgement: ack is valid");
                return false;
        }
 
@@ -460,7 +453,7 @@
                if (log.isDebugEnabled())
                        log.debug("Enter: 
FaultManager::checkForSequenceTerminated, " + sequenceID);
 
-               if (bean.isTerminated()) {
+               if (bean!=null && bean.isTerminated()) {
                        MessageContext referenceMessage = 
referenceRMMessage.getMessageContext();
                        FaultData data = new FaultData();
                        int SOAPVersion = 
SandeshaUtil.getSOAPVersion(referenceMessage.getEnvelope());
@@ -500,7 +493,7 @@
                if (log.isDebugEnabled())
                        log.debug("Enter: FaultManager::checkForSequenceClosed, 
" + sequenceID);
 
-               if (rmdBean.isClosed()) {
+               if (rmdBean!=null && rmdBean.isClosed()) {
                        MessageContext referenceMessage = 
referenceRMMessage.getMessageContext();
                        FaultData data = new FaultData();
                        int SOAPVersion = 
SandeshaUtil.getSOAPVersion(referenceMessage.getEnvelope());

Modified: 
webservices/sandesha/trunk/java/modules/tests/src/test/java/org/apache/sandesha2/faulttests/FaultTestUtils.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/tests/src/test/java/org/apache/sandesha2/faulttests/FaultTestUtils.java?rev=696224&r1=696223&r2=696224&view=diff
==============================================================================
--- 
webservices/sandesha/trunk/java/modules/tests/src/test/java/org/apache/sandesha2/faulttests/FaultTestUtils.java
 (original)
+++ 
webservices/sandesha/trunk/java/modules/tests/src/test/java/org/apache/sandesha2/faulttests/FaultTestUtils.java
 Wed Sep 17 02:54:23 2008
@@ -27,7 +27,7 @@
         * Sets up a connection to an HTTP endpoint
         * @return
         */
-       public static HttpURLConnection getHttpURLConnection(String uri, String 
soapAction) throws Exception {
+       public static HttpURLConnection getHttpURLConnection(String uri, String 
soapAction, boolean soap12) throws Exception {
     // Open a connection to the endpoint
                URL endPointURL = new URL(uri);
                
@@ -36,12 +36,27 @@
                connection.setDoInput(true);
                connection.setRequestMethod("POST");
                connection.addRequestProperty("SOAPAction", soapAction);
-               connection.setRequestProperty("Content-Type", "text/xml"); 
+               if(soap12){
+                       connection.setRequestProperty("Content-Type", 
"application/soap+xml");
+               }
+               else{
+                       connection.setRequestProperty("Content-Type", 
"text/xml"); 
+               }
                 
                connection.connect();
 
                return connection;
        }
+
+       /**
+        * A Soap 11 connection
+        * @throws Exception
+        */
+       public static HttpURLConnection getHttpURLConnection(String uri, String 
soapAction) throws Exception {
+           // Open a connection to the endpoint
+               return getHttpURLConnection(uri, soapAction, false);
+       }
+       
        
        /**
         * Reads a response from the HttpURLConnection instance

Modified: 
webservices/sandesha/trunk/java/modules/tests/src/test/java/org/apache/sandesha2/faulttests/InvalidAcknowledgementTest.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/tests/src/test/java/org/apache/sandesha2/faulttests/InvalidAcknowledgementTest.java?rev=696224&r1=696223&r2=696224&view=diff
==============================================================================
--- 
webservices/sandesha/trunk/java/modules/tests/src/test/java/org/apache/sandesha2/faulttests/InvalidAcknowledgementTest.java
 (original)
+++ 
webservices/sandesha/trunk/java/modules/tests/src/test/java/org/apache/sandesha2/faulttests/InvalidAcknowledgementTest.java
 Wed Sep 17 02:54:23 2008
@@ -21,8 +21,13 @@
 import java.io.OutputStream;
 import java.net.HttpURLConnection;
 
+import org.apache.axiom.om.OMAbstractFactory;
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.OMFactory;
+import org.apache.axiom.om.OMNamespace;
 import org.apache.axiom.soap.SOAPEnvelope;
 import org.apache.axiom.soap.SOAPFactory;
+import org.apache.axiom.soap.impl.llom.soap12.SOAP12Factory;
 import org.apache.axiom.soap.impl.llom.soap11.SOAP11Factory;
 import org.apache.axis2.addressing.AddressingConstants;
 import org.apache.axis2.addressing.EndpointReference;
@@ -33,8 +38,10 @@
 import org.apache.sandesha2.SandeshaTestCase;
 import org.apache.sandesha2.storage.StorageManager;
 import org.apache.sandesha2.storage.Transaction;
+import org.apache.sandesha2.storage.beanmanagers.RMDBeanMgr;
 import org.apache.sandesha2.storage.beanmanagers.RMSBeanMgr;
 import org.apache.sandesha2.storage.beanmanagers.SenderBeanMgr;
+import org.apache.sandesha2.storage.beans.RMDBean;
 import org.apache.sandesha2.storage.beans.RMSBean;
 import org.apache.sandesha2.storage.beans.SenderBean;
 import org.apache.sandesha2.util.Range;
@@ -42,6 +49,7 @@
 import org.apache.sandesha2.util.SandeshaUtil;
 import org.apache.sandesha2.util.SpecSpecificConstants;
 import org.apache.sandesha2.wsrm.Identifier;
+import org.apache.sandesha2.wsrm.Sequence;
 import org.apache.sandesha2.wsrm.SequenceAcknowledgement;
 
 
@@ -65,28 +73,47 @@
                serverConfigContext = startServer(server_repoPath, 
server_axis2_xml);
        }
 
-       /**
-        * Sends an ACK message to an RM Source that will be refused and should 
be
-        * rejected with an InvalidAck fault
-        * 
-        * We mock up a RMS sequence on the server, this is for us to then use 
for the fault.
-        * 
-        * @throws Exception
-        */
-       public void testInvalidAcknowledgementSOAPFault() throws Exception {    
        
+       private RMDBean setupRMDBean(String sequenceID)throws Exception
+       {
                // Create an RMS on the service.
                StorageManager storageManager = 
                        
SandeshaUtil.getSandeshaStorageManager(serverConfigContext, 
serverConfigContext.getAxisConfiguration());
+       
+               RMDBeanMgr rmdBeanMgr = storageManager.getRMDBeanMgr();
+       
+               // Mockup an RMSBean
+               RMDBean rmdBean = new RMDBean();
+               rmdBean.setSequenceID(sequenceID);
+               rmdBean.setToEndpointReference(new 
EndpointReference(AddressingConstants.Final.WSA_ANONYMOUS_URL));
+               rmdBean.setAcksToEndpointReference(new 
EndpointReference(AddressingConstants.Final.WSA_ANONYMOUS_URL));
+               rmdBean.setReplyToEndpointReference(new 
EndpointReference(AddressingConstants.Final.WSA_ANONYMOUS_URL));
+               rmdBean.setRMVersion(Sandesha2Constants.SPEC_VERSIONS.v1_1);
+               rmdBean.setServerCompletedMessages(new RangeString());
+               rmdBean.setHighestInMessageNumber(0);
+               rmdBean.setNextMsgNoToProcess(1);
+       
+               // Create a transaction and insert the RMSBean
+               Transaction tran = storageManager.getTransaction();
                
-               RMSBeanMgr rmsBeanMgr = storageManager.getRMSBeanMgr();
-               
-               String seqID = SandeshaUtil.getUUID();
+               rmdBeanMgr.insert(rmdBean);
                
+               tran.commit();
+               return rmdBean;
+       }
+       
+       private RMSBean setupRMSBean(String sequenceID)throws Exception
+       {
+               // Create an RMS on the service.
+               StorageManager storageManager = 
+                       
SandeshaUtil.getSandeshaStorageManager(serverConfigContext, 
serverConfigContext.getAxisConfiguration());
+       
+               RMSBeanMgr rmsBeanMgr = storageManager.getRMSBeanMgr();
+       
                // Mockup an RMSBean
                RMSBean rmsBean = new RMSBean();
                rmsBean.setCreateSeqMsgID(SandeshaUtil.getUUID());
-               rmsBean.setSequenceID(seqID);
-               
rmsBean.setInternalSequenceID(SandeshaUtil.getInternalSequenceID(seqID, null));
+               rmsBean.setSequenceID(sequenceID);
+               
rmsBean.setInternalSequenceID(SandeshaUtil.getInternalSequenceID(sequenceID, 
null));
                rmsBean.setToEndpointReference(new 
EndpointReference(AddressingConstants.Final.WSA_ANONYMOUS_URL));
                rmsBean.setAcksToEndpointReference(new 
EndpointReference(AddressingConstants.Final.WSA_ANONYMOUS_URL));
                rmsBean.setReplyToEndpointReference(new 
EndpointReference(AddressingConstants.Final.WSA_ANONYMOUS_URL));
@@ -100,14 +127,81 @@
                rmsBeanMgr.insert(rmsBean);
                
                tran.commit();
+               return rmsBean;
+       }
+       
+       public void testSoap11_PiggyBackInvalidAcknowledgementSOAPFault() 
throws Exception{
+               runInvalidAcknowledgementSOAPFault(true, false);
+       }
+
+       public void testSoap12_PiggyBackInvalidAcknowledgementSOAPFault() 
throws Exception{
+               runInvalidAcknowledgementSOAPFault(true, true);
+       }
+
+       public void testSoap11_Standalone_InvalidAcknowledgementSOAPFault() 
throws Exception{
+               runInvalidAcknowledgementSOAPFault(false, false);
+       }
+       
+       public void testSoap12_Standalone_InvalidAcknowledgementSOAPFault() 
throws Exception{
+               runInvalidAcknowledgementSOAPFault(false, true);
+       }
+
+       public void 
testSoap11_PiggyBack_InvalidAcknowledgementFromBeanNotSentSOAPFault()throws 
Exception{
+               runInvalidAcknowledgementFromBeanNotSentSOAPFault(true, false);
+       }
+
+       public void 
testSoap12_PiggyBack_InvalidAcknowledgementFromBeanNotSentSOAPFault()throws 
Exception{
+               runInvalidAcknowledgementFromBeanNotSentSOAPFault(true, true);
+       }
+
+       public void 
testSoap11_Standalone_InvalidAcknowledgementFromBeanNotSentSOAPFault()throws 
Exception{
+               runInvalidAcknowledgementFromBeanNotSentSOAPFault(false, false);
+       }
+
+       public void 
testSoap12_Standalone_InvalidAcknowledgementFromBeanNotSentSOAPFault()throws 
Exception{
+               runInvalidAcknowledgementFromBeanNotSentSOAPFault(false, true);
+       }
+       
+       /**
+        * Sends an ACK message to an RM Source that will be refused.
+        * 
+        *  If the ack msg has an application msg on it too then it should be 
ignored. 
+        *  If not then should be rejected with an InvalidAck fault
+        * 
+        * We mock up a RMS sequence on the server, this is for us to then use 
for the fault.
+        * 
+        * @throws Exception
+        */
+       public void runInvalidAcknowledgementSOAPFault(boolean piggyBack, 
boolean soap12) throws Exception {            
+               
+          String ackMsgSeqID = SandeshaUtil.getUUID();
+          String applicationMsgSeqID = SandeshaUtil.getUUID();
+          
+       RMSBean rmsBean = setupRMSBean(ackMsgSeqID);
+       RMDBean rmdBean = setupRMDBean(applicationMsgSeqID);
                
     // Open a connection to the endpoint, using the sequence ack as the action
                HttpURLConnection connection = 
                        FaultTestUtils.getHttpURLConnection("http://127.0.0.1:"; 
+ serverPort + "/axis2/services/RMSampleService",
-                                       
"http://docs.oasis-open.org/ws-rx/wsrm/200702/SequenceAcknowledgement";);
+                                       
"http://docs.oasis-open.org/ws-rx/wsrm/200702/SequenceAcknowledgement";, soap12);
 
+               
+               SOAPFactory factory = null;
+               if(soap12){
+                       factory = new SOAP12Factory();
+               }
+               else{
+                       factory = new SOAP11Factory();
+               }
+               
                OutputStream tmpOut2 = connection.getOutputStream();
-               byte ar[] = getAppMessageAsBytes(seqID);
+               byte ar[] = null;
+               if(piggyBack){
+                       ar = getPiggybackedAckMessageAsBytes(ackMsgSeqID, 
applicationMsgSeqID, factory);
+               }
+               else{
+                       ar = getAckMessageAsBytes(ackMsgSeqID, factory);
+               }
                
                // Send the message to the socket.
                tmpOut2.write(ar);
@@ -116,23 +210,33 @@
                // Get the response message from the connection
                String message = 
FaultTestUtils.retrieveResponseMessage(connection);
     
-    // Check that the fault message isn't null
-    assertNotNull(message);
-    
-    // Check that the response contains the InvalidAcknowledgement tag    
-    assertTrue(message.indexOf("InvalidAcknowledgement") > -1);
-    
-    // Check that the <wsrm:Identifier>seqID</wsrm:Identifier> matches the 
sequence ID specified
-    String faultID = message.substring(message.indexOf("<wsrm:Identifier>") + 
17, message.indexOf("</wsrm:Identifier>"));
-    assertEquals(seqID, faultID);
-    
-    // Disconnect at the end of the test
-    connection.disconnect();
+           // Check that the fault message isn't null
+           assertNotNull(message);
+           
+           if(!piggyBack){
+                   // Check that the response contains the 
InvalidAcknowledgement tag    
+                   assertTrue(message.indexOf("InvalidAcknowledgement") > -1);
+                   
+                   // Check that the <wsrm:Identifier>seqID</wsrm:Identifier> 
matches the sequence ID specified
+                   String faultID = 
message.substring(message.indexOf("<wsrm:Identifier>") + 17, 
message.indexOf("</wsrm:Identifier>"));
+                   assertEquals(ackMsgSeqID, faultID);         
+           }
+           else{
+                   //check the inbound application msg has been processed too
+                   assertEquals(rmdBean.getHighestInMessageNumber(), 1);       
        
+           }
+
+           
+           // Disconnect at the end of the test
+           connection.disconnect();
        }
        
        /**
-        * Sends an ACK message to an RM Source that will be refused and should 
be
-        * rejected with an InvalidAck fault
+        * Sends an ACK message to an RM Source that will be refused since the 
request has not been sent.
+        * 
+        *  If the ack msg has an application msg on it too then it should be 
ignored.
+        *  
+        *  If not then should be rejected with an InvalidAck fault
         * 
         * We mock up a RMS sequence on the server, this is for us to then use 
for the fault.
         * Mock up a couple of SenderBeans which match the 1, 2, 3 message 
numbers
@@ -142,7 +246,7 @@
         * 
         * @throws Exception
         */
-       public void testInvalidAcknowledgementFromBeanNotSentSOAPFault() throws 
Exception {
+       public void runInvalidAcknowledgementFromBeanNotSentSOAPFault(boolean 
piggyBack, boolean soap12) throws Exception {
                
                // Create an RMS on the service.
                StorageManager storageManager = 
@@ -151,29 +255,20 @@
                RMSBeanMgr rmsBeanMgr = storageManager.getRMSBeanMgr();
                SenderBeanMgr senderMgr = storageManager.getSenderBeanMgr();
                
-               String seqID = SandeshaUtil.getUUID();
-               
-               // Mockup an RMSBean
-               RMSBean rmsBean = new RMSBean();
-               rmsBean.setCreateSeqMsgID(SandeshaUtil.getUUID());
-               rmsBean.setSequenceID(seqID);
-               
rmsBean.setInternalSequenceID(SandeshaUtil.getInternalSequenceID(seqID, null));
-               rmsBean.setToEndpointReference(new 
EndpointReference(AddressingConstants.Final.WSA_ANONYMOUS_URL));
-               rmsBean.setAcksToEndpointReference(new 
EndpointReference(AddressingConstants.Final.WSA_ANONYMOUS_URL));
-               rmsBean.setReplyToEndpointReference(new 
EndpointReference(AddressingConstants.Final.WSA_ANONYMOUS_URL));
-               rmsBean.setRMVersion(Sandesha2Constants.SPEC_VERSIONS.v1_1);
-               rmsBean.setClientCompletedMessages(new RangeString());
-               rmsBean.setNextMessageNumber(4);
-               rmsBean.setHighestOutMessageNumber(3);
-               
-               SenderBean bean1 = getSenderBean(seqID, 1, 1);
-               SenderBean bean2 = getSenderBean(seqID, 0, 2);
-               SenderBean bean3 = getSenderBean(seqID, 1, 3);          
+               // Create an RMS on the service.
+               String ackMsgSeqID = SandeshaUtil.getUUID();
+               String applicationMsgSeqID = SandeshaUtil.getUUID();
+                  
+               setupRMSBean(ackMsgSeqID);
+               RMDBean rmdBean = setupRMDBean(applicationMsgSeqID);
+               
+               SenderBean bean1 = getSenderBean(ackMsgSeqID, 1, 1);
+               SenderBean bean2 = getSenderBean(ackMsgSeqID, 0, 2);
+               SenderBean bean3 = getSenderBean(ackMsgSeqID, 1, 3);            
 
                // Create a transaction and insert the RMSBean
                Transaction tran = storageManager.getTransaction();
                
-               rmsBeanMgr.insert(rmsBean);
                senderMgr.insert(bean1);
                senderMgr.insert(bean2);
                senderMgr.insert(bean3);                
@@ -183,10 +278,24 @@
     // Open a connection to the endpoint, using the sequence ack as the action
                HttpURLConnection connection = 
                        FaultTestUtils.getHttpURLConnection("http://127.0.0.1:"; 
+ serverPort + "/axis2/services/RMSampleService",
-                                       
"http://docs.oasis-open.org/ws-rx/wsrm/200702/SequenceAcknowledgement";);
+                                       
"http://docs.oasis-open.org/ws-rx/wsrm/200702/SequenceAcknowledgement";, soap12);
 
                OutputStream tmpOut2 = connection.getOutputStream();
-               byte ar[] = getAppMessageAsBytes(seqID);
+               SOAPFactory factory = null;
+               if(soap12){
+                       factory = new SOAP12Factory();
+               }
+               else{
+                       factory = new SOAP11Factory();
+               }
+               
+               byte ar[] = null;
+               if(piggyBack){
+                       ar = getPiggybackedAckMessageAsBytes(ackMsgSeqID, 
applicationMsgSeqID, factory);
+               }
+               else{
+                       ar = getAckMessageAsBytes(ackMsgSeqID, factory);
+               }
                
                // Send the message to the socket.
                tmpOut2.write(ar);
@@ -195,30 +304,80 @@
                // Get the response message from the connection
                String message = 
FaultTestUtils.retrieveResponseMessage(connection);
     
-    // Check that the fault message isn't null
-    assertNotNull(message);
-    
-    // Check that the response contains the InvalidAcknowledgement tag    
-    assertTrue(message.indexOf("wsrm:InvalidAcknowledgement") > -1);
-    
-    // Check that the <wsrm:Identifier>seqID</wsrm:Identifier> matches the 
sequence ID specified
-    String faultID = message.substring(message.indexOf("<wsrm:Identifier>") + 
17, message.indexOf("</wsrm:Identifier>"));
-    assertEquals(seqID, faultID);
-    
-    // Disconnect at the end of the test
-    connection.disconnect();
+           // Check that the fault message isn't null
+           assertNotNull(message);
+           
+           if(!piggyBack){     
+               // Check that the response contains the InvalidAcknowledgement 
tag    
+               assertTrue(message.indexOf("InvalidAcknowledgement") > -1); 
//note name space prefix is not always the same so ignore                       
    
+
+                   // Check that the <wsrm:Identifier>seqID</wsrm:Identifier> 
matches the sequence ID specified
+                   String faultID = 
message.substring(message.indexOf("<wsrm:Identifier>") + 17, 
message.indexOf("</wsrm:Identifier>"));
+                   assertEquals(ackMsgSeqID, faultID);
+           }
+           else{
+                   //check the inbound application msg has been processed too
+                   assertEquals(rmdBean.getHighestInMessageNumber(), 1);
+                   
+                   //TODO check for response msg
+           }
+           
+           // Disconnect at the end of the test
+           connection.disconnect();
        }
 
+       private byte[] getAckMessageAsBytes(String sequenceIDAck, SOAPFactory 
soapFactory)throws Exception
+       {
+               SOAPEnvelope dummyEnvelope = soapFactory.getDefaultEnvelope();
+               
+               // Create a "new" application message
+               MessageContext messageContext = new MessageContext();
+               messageContext.setConfigurationContext(serverConfigContext);
+               
messageContext.setAxisService(serverConfigContext.getAxisConfiguration().getService("RMSampleService"));
                
+               messageContext.setEnvelope(dummyEnvelope);
+               
+               RMMsgContext applicationRMMsg = new 
RMMsgContext(messageContext);
+               
+               String rmNamespaceValue = 
SpecSpecificConstants.getRMNamespaceValue(Sandesha2Constants.SPEC_VERSIONS.v1_1);
+                               
+               //setup the sequenceAck portion of the msg
+               SequenceAcknowledgement sequenceAck = new 
SequenceAcknowledgement(rmNamespaceValue);
+               // Set the sequenceId
+               Identifier id = new Identifier(rmNamespaceValue);
+               id.setIndentifer(sequenceIDAck);
+               sequenceAck.setIdentifier(id);
+               
+               // Set the Invalid range!
+               Range ackRange = new Range(1,3);
+               sequenceAck.addAcknowledgementRanges(ackRange);
+
+               // Set the SequenceAcknowledgement part in the message
+               applicationRMMsg.addSequenceAcknowledgement(sequenceAck);
+               
+               applicationRMMsg.addSOAPEnvelope();
+
+               // --------------------------------------------
+               // Finished generating SequenceAck part
+               
+               
messageContext.setWSAAction("http://docs.oasis-open.org/ws-rx/wsrm/200702/SequenceAcknowledgement";);
+               
+               ByteArrayOutputStream outputStream = new 
ByteArrayOutputStream();
+               
+               // Serialize the application message
+               
applicationRMMsg.getMessageContext().getEnvelope().serialize(outputStream);
+               
+               return outputStream.toByteArray();
+       }
+       
        /**
-        * Get a SequenceAck message as bytes
+        * Get a SequenceAck piggy backed onto an application msg as bytes
         * 
         * @return
         */
-       private byte[] getAppMessageAsBytes(String sequenceId) throws Exception
+       private byte[] getPiggybackedAckMessageAsBytes(String sequenceIDAck, 
String sequenceIDApplicationMessage, SOAPFactory factory) throws Exception
        {
-               SOAPFactory factory = new SOAP11Factory();
                SOAPEnvelope dummyEnvelope = factory.getDefaultEnvelope();
-               
+       
                // Create a "new" application message
                MessageContext messageContext = new MessageContext();
                messageContext.setConfigurationContext(serverConfigContext);
@@ -227,14 +386,21 @@
                
                RMMsgContext applicationRMMsg = new 
RMMsgContext(messageContext);
                
-               // Generate the SequenceAck field.
-               // -------------------------------
                String rmNamespaceValue = 
SpecSpecificConstants.getRMNamespaceValue(Sandesha2Constants.SPEC_VERSIONS.v1_1);
-
+               
+               //now add a sequence part to simulate a piggy backed 
application msg
+               Sequence sequence = new Sequence(rmNamespaceValue);
+               Identifier sequenceID = new Identifier(rmNamespaceValue);
+               sequenceID.setIndentifer(sequenceIDApplicationMessage); //some 
new uuid ID
+               sequence.setIdentifier(sequenceID);
+               sequence.setMessageNumber(1);
+               applicationRMMsg.setSequence(sequence);
+               
+               //setup the sequenceAck portion of the msg
                SequenceAcknowledgement sequenceAck = new 
SequenceAcknowledgement(rmNamespaceValue);
                // Set the sequenceId
                Identifier id = new Identifier(rmNamespaceValue);
-               id.setIndentifer(sequenceId);
+               id.setIndentifer(sequenceIDAck);
                sequenceAck.setIdentifier(id);
                
                // Set the Invalid range!
@@ -243,14 +409,14 @@
 
                // Set the SequenceAcknowledgement part in the message
                applicationRMMsg.addSequenceAcknowledgement(sequenceAck);
+               
                applicationRMMsg.addSOAPEnvelope();
 
                // --------------------------------------------
                // Finished generating SequenceAck part
                
-               // Create an RMSBean so the create sequence message can be 
created
                
messageContext.setWSAAction("http://docs.oasis-open.org/ws-rx/wsrm/200702/SequenceAcknowledgement";);
-
+               
                ByteArrayOutputStream outputStream = new 
ByteArrayOutputStream();
                
                // Serialize the application message
@@ -277,3 +443,4 @@
 
 
 
+



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to