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]