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