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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to