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 @@
+
lmpx.com only provides a reader for public news (NNTP) servers. It is not
affiliated with the servers or forums shown here and is not responsible for
the content of articles, which is written by their respective authors.