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 ga...@apache.org on 2007/03/19 17:01:14 UTC

svn commit: r519979 - in /webservices/sandesha/trunk/java: src/org/apache/sandesha2/msgprocessors/ src/org/apache/sandesha2/storage/inmemory/ src/org/apache/sandesha2/util/ src/org/apache/sandesha2/wsrm/ test/src/org/apache/sandesha2/scenarios/

Author: gatfora
Date: Mon Mar 19 09:01:12 2007
New Revision: 519979

URL: http://svn.apache.org/viewvc?view=rev&rev=519979
Log:
MustUnderstands that have been processed are lost after message serialized/deserialized

Modified:
    webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/SequenceProcessor.java
    webservices/sandesha/trunk/java/src/org/apache/sandesha2/storage/inmemory/InMemoryStorageManager.java
    webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SandeshaUtil.java
    webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/RMElements.java
    webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/Sequence.java
    webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/SequenceAcknowledgement.java
    webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/UsesSequenceSTR.java
    webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/scenarios/SerializableScenariosTest.java

Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/SequenceProcessor.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/SequenceProcessor.java?view=diff&rev=519979&r1=519978&r2=519979
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/SequenceProcessor.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/SequenceProcessor.java Mon Mar 19 09:01:12 2007
@@ -140,11 +140,6 @@
 				log.debug("Exit: SequenceProcessor::processReliableMessage, Unknown sequence");
 			return InvocationResponse.ABORT;
 		}
-		
-
-		// setting mustUnderstand to false.
-		sequence.setMustUnderstand(false);
-		rmMsgCtx.addSOAPEnvelope();
 
 		// throwing a fault if the sequence is terminated
 		if (FaultManager.checkForSequenceTerminated(rmMsgCtx, sequenceId, bean)) {

Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/storage/inmemory/InMemoryStorageManager.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/storage/inmemory/InMemoryStorageManager.java?view=diff&rev=519979&r1=519978&r2=519979
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/storage/inmemory/InMemoryStorageManager.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/storage/inmemory/InMemoryStorageManager.java Mon Mar 19 09:01:12 2007
@@ -254,6 +254,9 @@
 		try {
 			if(useSerialization) {
 				ByteArrayOutputStream stream = new ByteArrayOutputStream();
+				// Remove the MustUnderstand parts for serialized message
+
+        SandeshaUtil.removeMustUnderstand(msgContext.getEnvelope());
 				ObjectOutputStream s = new ObjectOutputStream(stream);
 				s.writeObject(msgContext);
 				s.close();

Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SandeshaUtil.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SandeshaUtil.java?view=diff&rev=519979&r1=519978&r2=519979
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SandeshaUtil.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SandeshaUtil.java Mon Mar 19 09:01:12 2007
@@ -854,6 +854,39 @@
 		
 	}
 
+  /**
+   * Remove the MustUnderstand header blocks.
+   * @param envelope
+   */
+  public static SOAPEnvelope removeMustUnderstand(SOAPEnvelope envelope) {
+    if (log.isDebugEnabled())
+      log.debug("Enter: SandeshaUtil::removeMustUnderstand");
+    // you have to explicitely set the 'processed' attribute for header
+    // blocks, since it get lost in the above read from the stream.
+
+    SOAPHeader header = envelope.getHeader();
+    if (header != null) {
+      Iterator childrenOfOldEnv = header.getChildElements();
+      while (childrenOfOldEnv.hasNext()) {
+        
+        SOAPHeaderBlock oldEnvHeaderBlock = (SOAPHeaderBlock) childrenOfOldEnv.next();
+
+        QName oldEnvHeaderBlockQName = oldEnvHeaderBlock.getQName();
+        if (oldEnvHeaderBlockQName != null) {
+          // If we've processed the part and it has a must understand, set it as processed
+          if (oldEnvHeaderBlock.isProcessed() && oldEnvHeaderBlock.getMustUnderstand()) {
+            // Remove the MustUnderstand part
+            oldEnvHeaderBlock.setMustUnderstand(false);
+          }
+        }
+      }
+    }
+    
+    if (log.isDebugEnabled())
+      log.debug("Exit: SandeshaUtil::removeMustUnderstand");
+    return envelope;
+  }
+
 	public static EndpointReference cloneEPR (EndpointReference epr) {
 		EndpointReference newEPR = new EndpointReference (epr.getAddress());
 		Map referenceParams = epr.getAllReferenceParameters();

Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/RMElements.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/RMElements.java?view=diff&rev=519979&r1=519978&r2=519979
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/RMElements.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/RMElements.java Mon Mar 19 09:01:12 2007
@@ -189,7 +189,7 @@
 			element = header.getFirstChildWithName(Sandesha2Constants.SPEC_2007_02.QNames.UsesSequenceSTR);
 			if (element != null) {
 				usesSequenceSTR = new UsesSequenceSTR(factory, Sandesha2Constants.SPEC_2007_02.NS_URI);
-				usesSequenceSTR.fromOMElement(envelope.getHeader());
+				usesSequenceSTR.fromOMElement(element);
 			}
 			
 			element = header.getFirstChildWithName(Sandesha2Constants.SPEC_2007_02.QNames.MessagePending);

Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/Sequence.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/Sequence.java?view=diff&rev=519979&r1=519978&r2=519979
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/Sequence.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/Sequence.java Mon Mar 19 09:01:12 2007
@@ -42,7 +42,6 @@
 	private Identifier identifier;
 	private MessageNumber messageNumber;
 	private LastMessage lastMessage = null;
-	private boolean mustUnderstand = true;
 	private String namespaceValue = null;
 	
 	public Sequence(String namespaceValue) throws SandeshaException {
@@ -86,6 +85,9 @@
 			lastMessage.fromOMElement(sequencePart);
 		}
 
+    // Indicate that we have processed this part of the message.
+    ((SOAPHeaderBlock)sequencePart).setProcessed();
+    
 		return this;
 	}
 
@@ -111,7 +113,8 @@
 		SOAPHeaderBlock sequenceHeaderBlock = soapHeader.addHeaderBlock(
 				Sandesha2Constants.WSRM_COMMON.SEQUENCE, rmNamespace);
 		
-		sequenceHeaderBlock.setMustUnderstand(isMustUnderstand());
+    // Always set the MustUnderstand to true for Sequence messages 
+		sequenceHeaderBlock.setMustUnderstand(true);
 		identifier.toOMElement(sequenceHeaderBlock);
 		messageNumber.toOMElement(sequenceHeaderBlock);
 		if (lastMessage != null)
@@ -159,14 +162,6 @@
 			elem.detach();
 		
 		toOMElement(header);
-	}
-
-	public boolean isMustUnderstand() {
-		return mustUnderstand;
-	}
-
-	public void setMustUnderstand(boolean mustUnderstand) {
-		this.mustUnderstand = mustUnderstand;
 	}
 	
 	public boolean isNamespaceSupported (String namespaceName) {

Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/SequenceAcknowledgement.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/SequenceAcknowledgement.java?view=diff&rev=519979&r1=519978&r2=519979
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/SequenceAcknowledgement.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/SequenceAcknowledgement.java Mon Mar 19 09:01:12 2007
@@ -47,7 +47,6 @@
 	private ArrayList acknowledgementRangeList;
 	private ArrayList nackList;
 	private String namespaceValue = null;
-	private boolean mustUnderstand = false;
 	private AckNone ackNone = null;
 	private AckFinal ackFinal = null;
 	
@@ -110,6 +109,10 @@
 			}
 		}
 		
+    // Indicate that we have processed this part of the message.
+    ((SOAPHeaderBlock)sequenceAckElement).setProcessed();
+
+    
 		return this;
 	}
 
@@ -151,7 +154,8 @@
 							SandeshaMessageKeys.invalidIdentifier,
 							header.toString()));
 
-		sequenceAcknowledgementHeaderBlock.setMustUnderstand(isMustUnderstand());
+    // SequenceACK messages should always have the MustUnderstand flag set to true
+		sequenceAcknowledgementHeaderBlock.setMustUnderstand(true);
 		identifier.toOMElement(sequenceAcknowledgementHeaderBlock);
 
 		Iterator ackRangeIt = acknowledgementRangeList.iterator();
@@ -251,14 +255,6 @@
 		}
 		
 		toOMElement(header);
-	}
-
-	public boolean isMustUnderstand() {
-		return mustUnderstand;
-	}
-
-	public void setMustUnderstand(boolean mustUnderstand) {
-		this.mustUnderstand = mustUnderstand;
 	}
 
 	public boolean isNamespaceSupported (String namespaceName) {

Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/UsesSequenceSTR.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/UsesSequenceSTR.java?view=diff&rev=519979&r1=519978&r2=519979
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/UsesSequenceSTR.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/UsesSequenceSTR.java Mon Mar 19 09:01:12 2007
@@ -61,6 +61,9 @@
 		if (factory==null)
 			factory = defaultFactory;
 		
+    // Set that we have processed the must understand
+    ((SOAPHeaderBlock)header).setProcessed();
+    
 		return this;
 	}
 

Modified: webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/scenarios/SerializableScenariosTest.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/scenarios/SerializableScenariosTest.java?view=diff&rev=519979&r1=519978&r2=519979
==============================================================================
--- webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/scenarios/SerializableScenariosTest.java (original)
+++ webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/scenarios/SerializableScenariosTest.java Mon Mar 19 09:01:12 2007
@@ -18,6 +18,9 @@
 
 import java.io.File;
 
+import org.apache.axiom.soap.SOAP12Constants;
+import org.apache.axis2.client.Options;
+
 public class SerializableScenariosTest extends RMScenariosTest {
 
 	public SerializableScenariosTest() {
@@ -29,4 +32,14 @@
 		this.axis2_xmlClient = repoPathClient + File.separator + "client_axis2.xml";
 	}
 
+  public void testMustUnderstandSerialization() throws Exception {
+    
+    Options clientOptions = new Options();
+    clientOptions.setSoapVersionURI(SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI);
+    clientOptions.setProperty(org.apache.axis2.addressing.AddressingConstants.ADD_MUST_UNDERSTAND_TO_ADDRESSING_HEADERS, 
+        Boolean.TRUE.toString());
+    
+    // Run the echo test
+    runEcho(clientOptions, true, true, false);
+  }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: sandesha-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: sandesha-dev-help@ws.apache.org