You are viewing a plain text version of this content. The canonical link for it is here.
Posted to sandesha-dev@ws.apache.org by mc...@apache.org on 2008/09/17 11:54:24 UTC

svn commit: r696224 - in /webservices/sandesha/trunk/java/modules: core/src/main/java/org/apache/sandesha2/msgprocessors/ core/src/main/java/org/apache/sandesha2/util/ tests/src/test/java/org/apache/sandesha2/faulttests/

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: sandesha-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: sandesha-dev-help@ws.apache.org