Author: chamikara
Date: Thu Aug 10 03:02:50 2006
New Revision: 430344

URL: http://svn.apache.org/viewvc?rev=430344&view=rev
Log:
Applied the patch from Matt on refactoring the SequenceAcknowledgement header 
processing.

Modified:
    
webservices/sandesha/trunk/java/src/org/apache/sandesha2/Sandesha2Constants.java
    
webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaGlobalInHandler.java
    
webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaInHandler.java
    
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/AcknowledgementProcessor.java
    
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java
    
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/CreateSeqResponseMsgProcessor.java
    
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/MsgProcessorFactory.java
    
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/TerminateSeqMsgProcessor.java
    
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/AcknowledgementManager.java
    
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/FaultManager.java
    
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/RMMsgCreator.java
    webservices/sandesha/trunk/java/src/org/apache/sandesha2/workers/Sender.java
    
webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/RMElements.java
    
webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/SequenceAcknowledgement.java
    
webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/wsrm/SequenceAcknowledgementTest.java

Modified: 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/Sandesha2Constants.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/Sandesha2Constants.java?rev=430344&r1=430343&r2=430344&view=diff
==============================================================================
--- 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/Sandesha2Constants.java
 (original)
+++ 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/Sandesha2Constants.java
 Thu Aug 10 03:02:50 2006
@@ -505,4 +505,8 @@
        
        String SECURITY_MANAGER = "Sandesha2SecurityManager";
        
+       String [] SPEC_NS_URIS = {
+                       SPEC_2005_02.NS_URI,
+                       SPEC_2005_10.NS_URI
+       };
 }

Modified: 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaGlobalInHandler.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaGlobalInHandler.java?rev=430344&r1=430343&r2=430344&view=diff
==============================================================================
--- 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaGlobalInHandler.java
 (original)
+++ 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaGlobalInHandler.java
 Thu Aug 10 03:02:50 2006
@@ -365,14 +365,6 @@
        }
 
        private void doGlobalProcessing(RMMsgContext rmMsgCtx) throws 
SandeshaException {
-               switch (rmMsgCtx.getMessageType()) {
-               case Sandesha2Constants.MessageTypes.ACK:
-
-               // //rmMsgCtx.addRelatesTo(null);
-               // rmMsgCtx.getMessageContext().getre
-               // //Removing the relatesTo part from ackMessageIf present. Some
-               // Frameworks tend to send this.
-               }
        }
 
        public QName getName() {

Modified: 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaInHandler.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaInHandler.java?rev=430344&r1=430343&r2=430344&view=diff
==============================================================================
--- 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaInHandler.java
 (original)
+++ 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaInHandler.java
 Thu Aug 10 03:02:50 2006
@@ -32,6 +32,7 @@
 import org.apache.sandesha2.SandeshaException;
 import org.apache.sandesha2.i18n.SandeshaMessageHelper;
 import org.apache.sandesha2.i18n.SandeshaMessageKeys;
+import org.apache.sandesha2.msgprocessors.AcknowledgementProcessor;
 import org.apache.sandesha2.msgprocessors.MsgProcessor;
 import org.apache.sandesha2.msgprocessors.MsgProcessorFactory;
 import org.apache.sandesha2.storage.StorageManager;
@@ -77,6 +78,10 @@
                        return; // Reinjected messages are not processed by 
Sandesha2 inflow
                                        // handlers
                }
+               
+               // Process Ack headers in the message
+               AcknowledgementProcessor ackProcessor = new 
AcknowledgementProcessor();
+               ackProcessor.processAckHeaders(msgCtx);
 
                StorageManager storageManager = 
SandeshaUtil.getSandeshaStorageManager(context, context.getAxisConfiguration());
 

Modified: 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/AcknowledgementProcessor.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/AcknowledgementProcessor.java?rev=430344&r1=430343&r2=430344&view=diff
==============================================================================
--- 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/AcknowledgementProcessor.java
 (original)
+++ 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/AcknowledgementProcessor.java
 Thu Aug 10 03:02:50 2006
@@ -21,6 +21,11 @@
 import java.util.Collection;
 import java.util.Iterator;
 
+import javax.xml.namespace.QName;
+
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.soap.SOAPEnvelope;
+import org.apache.axiom.soap.SOAPHeader;
 import org.apache.axis2.AxisFault;
 import org.apache.axis2.context.ConfigurationContext;
 import org.apache.axis2.context.MessageContext;
@@ -41,6 +46,7 @@
 import org.apache.sandesha2.storage.beans.SequencePropertyBean;
 import org.apache.sandesha2.util.AcknowledgementManager;
 import org.apache.sandesha2.util.FaultManager;
+import org.apache.sandesha2.util.MsgInitializer;
 import org.apache.sandesha2.util.SandeshaUtil;
 import org.apache.sandesha2.util.SequenceManager;
 import org.apache.sandesha2.util.TerminateManager;
@@ -49,35 +55,53 @@
 import org.apache.sandesha2.wsrm.SequenceAcknowledgement;
 
 /**
- * Responsible for processing an incoming acknowledgement message.
+ * Responsible for processing acknowledgement headers on incoming messages.
  */
 
-public class AcknowledgementProcessor implements MsgProcessor {
+public class AcknowledgementProcessor {
 
        private static final Log log = 
LogFactory.getLog(AcknowledgementProcessor.class);
 
-       public void processInMessage(RMMsgContext rmMsgCtx) throws 
SandeshaException {
+       public void processAckHeaders(MessageContext message) throws 
SandeshaException {
                if (log.isDebugEnabled())
-                       log.debug("Enter: 
AcknowledgementProcessor::processInMessage");
+                       log.debug("Enter: 
AcknowledgementProcessor::processAckHeaders");
 
-               SequenceAcknowledgement sequenceAck = (SequenceAcknowledgement) 
rmMsgCtx
-                               
.getMessagePart(Sandesha2Constants.MessageParts.SEQ_ACKNOWLEDGEMENT);
-               if (sequenceAck == null) {
-                       String message = 
SandeshaMessageHelper.getMessage(SandeshaMessageKeys.seqAckPartIsNull);
-                       log.debug(message);
-                       throw new SandeshaException(message);
+               SOAPEnvelope envelope = message.getEnvelope();
+               SOAPHeader header = envelope.getHeader();
+               
+               for(int i = 0; i < Sandesha2Constants.SPEC_NS_URIS.length; i++) 
{
+                       QName headerName = new 
QName(Sandesha2Constants.SPEC_NS_URIS[i], 
Sandesha2Constants.WSRM_COMMON.SEQUENCE_ACK);
+                       
+                       Iterator acks = header.getChildrenWithName(headerName);
+                       while(acks.hasNext()) {
+                               OMElement ack = (OMElement) acks.next();
+                               SequenceAcknowledgement seqAck = new 
SequenceAcknowledgement(null, headerName.getNamespaceURI());
+                         seqAck.fromOMElement(ack);
+                         processAckHeader(message, seqAck);
+                       }
                }
 
-               MessageContext msgCtx = rmMsgCtx.getMessageContext();
+               if (log.isDebugEnabled())
+                       log.debug("Exit: 
AcknowledgementProcessor::processAckHeaders");
+       }
+       
+       private void processAckHeader(MessageContext msgCtx, 
SequenceAcknowledgement sequenceAck)
+       throws SandeshaException
+       {
+               if (log.isDebugEnabled())
+                       log.debug("Enter: 
AcknowledgementProcessor::processAckHeader");
+               
+               // TODO: Note that this RMMessageContext is not really any use 
- but we need to create it
+               // so that it can be passed to the fault handling chain. It's 
really no more than a
+               // container for the correct addressing and RM spec levels, so 
we'd be better off passing
+               // them in directly. Unfortunately that change ripples through 
the codebase...
+               RMMsgContext rmMsgCtx = 
MsgInitializer.initializeMessage(msgCtx);
+
                ConfigurationContext configCtx = 
msgCtx.getConfigurationContext();
 
                StorageManager storageManager = 
SandeshaUtil.getSandeshaStorageManager(configCtx, configCtx
                                .getAxisConfiguration());
 
-               // setting mustUnderstand to false.
-               sequenceAck.setMustUnderstand(false);
-               rmMsgCtx.addSOAPEnvelope();
-
                SenderBeanMgr retransmitterMgr = 
storageManager.getRetransmitterBeanMgr();
                SequencePropertyBeanMgr seqPropMgr = 
storageManager.getSequencePropertyBeanMgr();
 
@@ -102,23 +126,9 @@
                FaultManager faultManager = new FaultManager();
                RMMsgContext faultMessageContext = faultManager
                                .checkForUnknownSequence(rmMsgCtx, 
outSequenceId, storageManager);
-               if (faultMessageContext != null) {
-
-                       ConfigurationContext configurationContext = 
msgCtx.getConfigurationContext();
-                       AxisEngine engine = new 
AxisEngine(configurationContext);
-
-                       try {
-                               
engine.sendFault(faultMessageContext.getMessageContext());
-                       } catch (AxisFault e) {
-                               throw new 
SandeshaException(SandeshaMessageHelper.getMessage(SandeshaMessageKeys.couldNotSendFault,
 e
-                                               .toString()));
-                       }
-
-                       msgCtx.pause();
-                       return;
+               if(faultMessageContext == null) {
+                       faultMessageContext = 
faultManager.checkForInvalidAcknowledgement(rmMsgCtx, storageManager);
                }
-
-               faultMessageContext = 
faultManager.checkForInvalidAcknowledgement(rmMsgCtx, storageManager);
                if (faultMessageContext != null) {
 
                        ConfigurationContext configurationContext = 
msgCtx.getConfigurationContext();
@@ -127,10 +137,12 @@
                        try {
                                
engine.sendFault(faultMessageContext.getMessageContext());
                        } catch (AxisFault e) {
-                               throw new 
SandeshaException(SandeshaMessageHelper.getMessage(SandeshaMessageKeys.couldNotSendFault,
 e
-                                               .toString()));
+                               throw new SandeshaException(
+                                               
SandeshaMessageHelper.getMessage(SandeshaMessageKeys.couldNotSendFault, 
e.toString()),
+                                               e);
                        }
 
+                       // TODO: Should a bad ack stop processing of the 
message?
                        msgCtx.pause();
                        return;
                }
@@ -147,24 +159,11 @@
                if (internalSequenceBean == null || 
internalSequenceBean.getValue() == null) {
                        String message = 
SandeshaMessageHelper.getMessage(SandeshaMessageKeys.tempSeqIdNotSet);
                        log.debug(message);
-
                        throw new SandeshaException(message);
                }
 
                String internalSequenceId = (String) 
internalSequenceBean.getValue();
 
-               // Following happens in the SandeshaGlobal handler
-               
rmMsgCtx.getMessageContext().setProperty(Sandesha2Constants.ACK_PROCSSED, 
"true");
-
-               // Removing relatesTo - Some v1_0 endpoints tend to set 
relatesTo value
-               // for ack messages.
-               // Because of this dispatching may go wrong. So we set 
relatesTo value
-               // to null for ackMessages.
-               // (this happens in the SandeshaGlobal handler). Do this only 
if this is
-               // a standalone ACK.
-               // if (rmMsgCtx.getMessageType() == 
Sandesha2Constants.MessageTypes.ACK)
-               // rmMsgCtx.setRelatesTo(null);
-
                SenderBean input = new SenderBean();
                input.setSend(true);
                input.setReSend(true);
@@ -253,11 +252,12 @@
                        }
                }
 
+               // TODO - surely this is only appropriate for standalone ack 
messages?
                // stopping the progress of the message further.
                rmMsgCtx.pause();
 
                if (log.isDebugEnabled())
-                       log.debug("Exit: 
AcknowledgementProcessor::processInMessage");
+                       log.debug("Exit: 
AcknowledgementProcessor::processAckHeader");
        }
 
        private SenderBean getRetransmitterEntry(Collection collection, long 
msgNo) {
@@ -286,11 +286,4 @@
                return noOfMsgs;
        }
 
-       public void processOutMessage(RMMsgContext rmMsgCtx) throws 
SandeshaException {
-               if (log.isDebugEnabled()) {
-                       log.debug("Enter: 
AcknowledgementProcessor::processOutMessage");
-                       log.debug("Exit: 
AcknowledgementProcessor::processOutMessage");
-               }
-
-       }
 }

Modified: 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java?rev=430344&r1=430343&r2=430344&view=diff
==============================================================================
--- 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java
 (original)
+++ 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java
 Thu Aug 10 03:02:50 2006
@@ -90,23 +90,6 @@
                if (log.isDebugEnabled())
                        log.debug("Enter: 
ApplicationMsgProcessor::processInMessage");
 
-               // Processing for ack if any
-               SequenceAcknowledgement sequenceAck = (SequenceAcknowledgement) 
rmMsgCtx
-                               
.getMessagePart(Sandesha2Constants.MessageParts.SEQ_ACKNOWLEDGEMENT);
-               if (sequenceAck != null) {
-                       AcknowledgementProcessor ackProcessor = new 
AcknowledgementProcessor();
-
-                       // setting message type temporarily as ack message. so 
that the ack
-                       // processor would not be confused
-                       int messageType = rmMsgCtx.getMessageType();
-                       
rmMsgCtx.setMessageType(Sandesha2Constants.MessageTypes.ACK);
-
-                       ackProcessor.processInMessage(rmMsgCtx);
-
-                       // resetting the correct message type.
-                       rmMsgCtx.setMessageType(messageType);
-               }
-
                // TODO process embedded ack requests
                AckRequested ackRequested = (AckRequested) 
rmMsgCtx.getMessagePart(Sandesha2Constants.MessageParts.ACK_REQUEST);
                if (ackRequested != null) {

Modified: 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/CreateSeqResponseMsgProcessor.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/CreateSeqResponseMsgProcessor.java?rev=430344&r1=430343&r2=430344&view=diff
==============================================================================
--- 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/CreateSeqResponseMsgProcessor.java
 (original)
+++ 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/CreateSeqResponseMsgProcessor.java
 Thu Aug 10 03:02:50 2006
@@ -77,24 +77,6 @@
                StorageManager storageManager = 
SandeshaUtil.getSandeshaStorageManager(configCtx, configCtx
                                .getAxisConfiguration());
 
-               // Processing for ack if available
-
-               SequenceAcknowledgement sequenceAck = (SequenceAcknowledgement) 
createSeqResponseRMMsgCtx
-                               
.getMessagePart(Sandesha2Constants.MessageParts.SEQ_ACKNOWLEDGEMENT);
-               if (sequenceAck != null) {
-                       AcknowledgementProcessor ackProcessor = new 
AcknowledgementProcessor();
-
-                       // setting message type temporarily as ack message. so 
that the ack
-                       // processor would not be confused
-                       int messageType = 
createSeqResponseRMMsgCtx.getMessageType();
-                       
createSeqResponseRMMsgCtx.setMessageType(Sandesha2Constants.MessageTypes.ACK);
-
-                       
ackProcessor.processInMessage(createSeqResponseRMMsgCtx);
-
-                       // resetting the correct message type.
-                       createSeqResponseRMMsgCtx.setMessageType(messageType);
-               }
-
                // Processing the create sequence response.
 
                CreateSequenceResponse createSeqResponsePart = 
(CreateSequenceResponse) createSeqResponseRMMsgCtx

Modified: 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/MsgProcessorFactory.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/MsgProcessorFactory.java?rev=430344&r1=430343&r2=430344&view=diff
==============================================================================
--- 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/MsgProcessorFactory.java
 (original)
+++ 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/MsgProcessorFactory.java
 Thu Aug 10 03:02:50 2006
@@ -41,8 +41,6 @@
                        return new ApplicationMsgProcessor();
                case (Sandesha2Constants.MessageTypes.CREATE_SEQ_RESPONSE):
                        return new CreateSeqResponseMsgProcessor();
-               case (Sandesha2Constants.MessageTypes.ACK):
-                       return new AcknowledgementProcessor();
                case (Sandesha2Constants.MessageTypes.CLOSE_SEQUENCE):
                        return new CloseSequenceProcessor();
                case (Sandesha2Constants.MessageTypes.ACK_REQUEST):
@@ -51,4 +49,4 @@
                        return null;
                }
        }
-}
\ No newline at end of file
+}

Modified: 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/TerminateSeqMsgProcessor.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/TerminateSeqMsgProcessor.java?rev=430344&r1=430343&r2=430344&view=diff
==============================================================================
--- 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/TerminateSeqMsgProcessor.java
 (original)
+++ 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/TerminateSeqMsgProcessor.java
 Thu Aug 10 03:02:50 2006
@@ -76,22 +76,6 @@
                        log.debug("Enter: 
TerminateSeqMsgProcessor::processInMessage");
 
                MessageContext terminateSeqMsg = 
terminateSeqRMMsg.getMessageContext();
-               // Processing for ack if any
-               SequenceAcknowledgement sequenceAck = (SequenceAcknowledgement) 
terminateSeqRMMsg
-                               
.getMessagePart(Sandesha2Constants.MessageParts.SEQ_ACKNOWLEDGEMENT);
-               if (sequenceAck != null) {
-                       AcknowledgementProcessor ackProcessor = new 
AcknowledgementProcessor();
-
-                       // setting message type temporarily as ack message. so 
that the ack
-                       // processor would not be confused
-                       int messageType = terminateSeqRMMsg.getMessageType();
-                       
terminateSeqRMMsg.setMessageType(Sandesha2Constants.MessageTypes.ACK);
-
-                       ackProcessor.processInMessage(terminateSeqRMMsg);
-
-                       // resetting the correct message type.
-                       terminateSeqRMMsg.setMessageType(messageType);
-               }
 
                // Processing the terminate message
                // TODO Add terminate sequence message logic.

Modified: 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/AcknowledgementManager.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/AcknowledgementManager.java?rev=430344&r1=430343&r2=430344&view=diff
==============================================================================
--- 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/AcknowledgementManager.java
 (original)
+++ 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/AcknowledgementManager.java
 Thu Aug 10 03:02:50 2006
@@ -22,8 +22,12 @@
 import java.util.HashMap;
 import java.util.Iterator;
 
+import javax.xml.namespace.QName;
+
+import org.apache.axiom.om.OMElement;
 import org.apache.axiom.soap.SOAPEnvelope;
 import org.apache.axiom.soap.SOAPFactory;
+import org.apache.axiom.soap.SOAPHeader;
 import org.apache.axis2.AxisFault;
 import org.apache.axis2.Constants;
 import org.apache.axis2.addressing.AddressingConstants;
@@ -71,12 +75,9 @@
                ConfigurationContext configurationContext = 
rmMessageContext.getConfigurationContext();
 
                SenderBeanMgr retransmitterBeanMgr = 
storageManager.getRetransmitterBeanMgr();
-               SequencePropertyBeanMgr sequencePropertyBeanMgr = 
storageManager.getSequencePropertyBeanMgr();
 
                SenderBean findBean = new SenderBean();
 
-               String sequnceID = 
SandeshaUtil.getSequenceIDFromRMMessage(rmMessageContext);
-
                findBean.setMessageType(Sandesha2Constants.MessageTypes.ACK);
                findBean.setSend(true);
                findBean.setReSend(false);
@@ -95,10 +96,6 @@
                                // //Piggybacking will happen only if the end 
of ack interval
                                // (timeToSend) is not reached.
 
-                               boolean disablePiggybacking = false;
-                               if (disablePiggybacking)
-                                       continue piggybackLoop;
-
                                MessageContext ackMsgContext = 
storageManager.retrieveMessageContext(ackBean.getMessageContextRefKey(),
                                                configurationContext);
 
@@ -108,32 +105,29 @@
                                        continue piggybackLoop;
                                }
 
-                               // String ackSequenceID = 
ackBean.getSequenceID();
-
-                               // //sequenceID has to match for piggybacking
-                               // if (!ackSequenceID.equals(sequnceID)) {
-                               // continue piggybackLoop;
-                               // }
-
                                // deleting the ack entry.
                                
retransmitterBeanMgr.delete(ackBean.getMessageID());
 
-                               // Adding the ack to the application message
-                               RMMsgContext ackRMMsgContext = 
MsgInitializer.initializeMessage(ackMsgContext);
-                               if (ackRMMsgContext.getMessageType() != 
Sandesha2Constants.MessageTypes.ACK) {
+                               // Adding the ack(s) to the application message
+                               boolean acks = false;
+                               SOAPHeader appMsgHeaders = 
rmMessageContext.getMessageContext().getEnvelope().getHeader();
+                               SOAPHeader headers = 
ackMsgContext.getEnvelope().getHeader();
+                               if(headers != null) {
+                                       for(int i = 0; i < 
Sandesha2Constants.SPEC_NS_URIS.length; i++) {
+                                               QName name = new 
QName(Sandesha2Constants.SPEC_NS_URIS[i], 
Sandesha2Constants.WSRM_COMMON.SEQUENCE_ACK);
+                                               Iterator iter = 
headers.getChildrenWithName(name);
+                                               while(iter.hasNext()) {
+                                                       
appMsgHeaders.addChild((OMElement) iter.next());
+                                                       acks = true;
+                                               }
+                                       }
+                               }
+                               if (!acks) {
                                        String message = 
SandeshaMessageHelper.getMessage(SandeshaMessageKeys.invalidAckMessageEntry,
-                                                       
ackRMMsgContext.toString());
+                                                       
ackMsgContext.getEnvelope().toString());
                                        log.debug(message);
                                        throw new SandeshaException(message);
                                }
-
-                               SequenceAcknowledgement sequenceAcknowledgement 
= (SequenceAcknowledgement) ackRMMsgContext
-                                               
.getMessagePart(Sandesha2Constants.MessageParts.SEQ_ACKNOWLEDGEMENT);
-                               
rmMessageContext.setMessagePart(Sandesha2Constants.MessageParts.SEQ_ACKNOWLEDGEMENT,
-                                               sequenceAcknowledgement);
-
-                               rmMessageContext.addSOAPEnvelope();
-                               break piggybackLoop;
                        }
                }
        }

Modified: 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/FaultManager.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/FaultManager.java?rev=430344&r1=430343&r2=430344&view=diff
==============================================================================
--- 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/FaultManager.java 
(original)
+++ 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/FaultManager.java 
Thu Aug 10 03:02:50 2006
@@ -196,38 +196,31 @@
                CreateSeqBeanMgr createSeqMgr = 
storageManager.getCreateSeqBeanMgr();
                int type = rmMessageContext.getMessageType();
 
-               boolean validSequence = true;
+               boolean validSequence = false;
 
-               if (type == Sandesha2Constants.MessageTypes.ACK || type == 
Sandesha2Constants.MessageTypes.CREATE_SEQ_RESPONSE
-                               || type == 
Sandesha2Constants.MessageTypes.TERMINATE_SEQ_RESPONSE
-                               || type == 
Sandesha2Constants.MessageTypes.CLOSE_SEQUENCE_RESPONSE) {
-
-                       CreateSeqBean createSeqFindBean = new CreateSeqBean();
-                       createSeqFindBean.setSequenceID(sequenceID);
-
-                       Collection coll = createSeqMgr.find(createSeqFindBean);
-                       if (coll.size() == 0) {
-                               validSequence = false;
-                       }
+               // Look for an outbound sequence
+               CreateSeqBean createSeqFindBean = new CreateSeqBean();
+               createSeqFindBean.setSequenceID(sequenceID);
+
+               Collection coll = createSeqMgr.find(createSeqFindBean);
+               if (!coll.isEmpty()) {
+                       validSequence = true;
 
                } else {
+                       // Look for an inbound sequence
                        NextMsgBeanMgr mgr = storageManager.getNextMsgBeanMgr();
 
-                       Collection coll = mgr.retrieveAll();
+                       coll = mgr.retrieveAll();
                        Iterator it = coll.iterator();
 
-                       boolean contains = false;
                        while (it.hasNext()) {
                                NextMsgBean nextMsgBean = (NextMsgBean) 
it.next();
                                String tempId = nextMsgBean.getSequenceID();
                                if (tempId.equals(sequenceID)) {
-                                       contains = true;
+                                       validSequence = true;
                                        break;
                                }
                        }
-
-                       if (!contains)
-                               validSequence = false;
                }
 
                String rmNamespaceValue = 
rmMessageContext.getRMNamespaceValue();
@@ -470,7 +463,7 @@
                        return faultRMMsgCtx;
 
                } catch (AxisFault e) {
-                       throw new SandeshaException(e.getMessage());
+                       throw new SandeshaException(e.getMessage(), e);
                }
        }
 

Modified: 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/RMMsgCreator.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/RMMsgCreator.java?rev=430344&r1=430343&r2=430344&view=diff
==============================================================================
--- 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/RMMsgCreator.java 
(original)
+++ 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/RMMsgCreator.java 
Thu Aug 10 03:02:50 2006
@@ -679,39 +679,4 @@
                applicationMsg.setMessageId(SandeshaUtil.getUUID());
        }
 
-       /**
-        * Create a new Acknowledgement message.
-        * 
-        * @param applicationRMMsgCtx
-        * @return
-        * @throws SandeshaException
-        */
-       public static RMMsgContext createAckMessage(RMMsgContext 
relatedRMMessage, String sequenceID,
-                       String rmNamespaceValue, StorageManager storageManager) 
throws SandeshaException {
-
-               try {
-                       MessageContext applicationMsgCtx = 
relatedRMMessage.getMessageContext();
-
-                       AxisOperation ackOperation = AxisOperationFactory
-                                       
.getAxisOperation(WSDL20_2004Constants.MEP_CONSTANT_OUT_ONLY);
-
-                       MessageContext ackMsgCtx = 
SandeshaUtil.createNewRelatedMessageContext(relatedRMMessage, ackOperation);
-
-                       RMMsgContext ackRMMsgCtx = 
MsgInitializer.initializeMessage(ackMsgCtx);
-
-                       initializeCreation(applicationMsgCtx, ackMsgCtx);
-
-                       addAckMessage(ackRMMsgCtx, sequenceID, storageManager);
-
-                       ackMsgCtx.setProperty(MessageContext.TRANSPORT_IN, 
null);
-
-                       finalizeCreation(applicationMsgCtx, ackMsgCtx);
-
-                       ackRMMsgCtx.getMessageContext().setServerSide(true);
-                       return ackRMMsgCtx;
-               } catch (AxisFault e) {
-                       throw new SandeshaException(e.getMessage());
-               }
-       }
-
 }

Modified: 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/workers/Sender.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/workers/Sender.java?rev=430344&r1=430343&r2=430344&view=diff
==============================================================================
--- 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/workers/Sender.java 
(original)
+++ 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/workers/Sender.java 
Thu Aug 10 03:02:50 2006
@@ -224,14 +224,14 @@
 
                                updateMessage(msgCtx);
 
-                               int messageType = rmMsgCtx.getMessageType();
+                               int messageType = senderBean.getMessageType();
                                if (messageType == 
Sandesha2Constants.MessageTypes.APPLICATION) {
                                        Sequence sequence = (Sequence) 
rmMsgCtx.getMessagePart(Sandesha2Constants.MessageParts.SEQUENCE);
                                        String sequenceID = 
sequence.getIdentifier().getIdentifier();
                                }
 
                                // checking weather this message can carry 
piggybacked acks
-                               if (isAckPiggybackableMsgType(messageType) && 
!isAckAlreadyPiggybacked(rmMsgCtx)) {
+                               if (isAckPiggybackableMsgType(messageType)) {
                                        // piggybacking if an ack if available 
for the same
                                        // sequence.
                                        // TODO do piggybacking based on wsa:To
@@ -456,13 +456,6 @@
                if (log.isDebugEnabled())
                        log.debug("Exit: Sender::isAckPiggybackableMsgType, " + 
piggybackable);
                return piggybackable;
-       }
-
-       private boolean isAckAlreadyPiggybacked(RMMsgContext rmMessageContext) {
-               if 
(rmMessageContext.getMessagePart(Sandesha2Constants.MessageParts.SEQ_ACKNOWLEDGEMENT)
 != null)
-                       return true;
-
-               return false;
        }
 
        private boolean isFaultEnvelope(SOAPEnvelope envelope) throws 
SandeshaException {

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?rev=430344&r1=430343&r2=430344&view=diff
==============================================================================
--- 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/RMElements.java 
(original)
+++ 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/RMElements.java 
Thu Aug 10 03:02:50 2006
@@ -91,7 +91,7 @@
                
                if (addressingNamespaceValue==null) {
                        String message = SandeshaMessageHelper.getMessage(
-                                       SandeshaMessageKeys.unknownWSAVersion);
+                                       SandeshaMessageKeys.unknownWSAVersion, 
envelope.toString());
                        throw new SandeshaException (message);
 //                     return;
                }
@@ -104,15 +104,6 @@
                if (sequenceElement != null) {
                        sequence = new Sequence(factory,rmNamespaceValue);
                        sequence.fromOMElement(envelope.getHeader());
-               }
-
-               OMElement sequenceAckElement = envelope.getHeader()
-                               .getFirstChildWithName(
-                                               new QName(rmNamespaceValue,
-                                                               
Sandesha2Constants.WSRM_COMMON.SEQUENCE_ACK));
-               if (sequenceAckElement != null) {
-                       sequenceAcknowledgement = new 
SequenceAcknowledgement(factory,rmNamespaceValue);
-                       
sequenceAcknowledgement.fromOMElement(envelope.getHeader());
                }
 
                OMElement createSeqElement = 
envelope.getBody().getFirstChildWithName(

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?rev=430344&r1=430343&r2=430344&view=diff
==============================================================================
--- 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/SequenceAcknowledgement.java
 (original)
+++ 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/SequenceAcknowledgement.java
 Thu Aug 10 03:02:50 2006
@@ -71,14 +71,7 @@
 
        public Object fromOMElement(OMElement element) throws 
OMException,SandeshaException {
 
-               if (element == null || !(element instanceof SOAPHeader))
-                       throw new OMException(SandeshaMessageHelper.getMessage(
-                                       SandeshaMessageKeys.seqAckNonHeader));
-
-               SOAPHeader header = (SOAPHeader) element;
-               OMElement sequenceAckPart = header.getFirstChildWithName(new 
QName(
-                               namespaceValue, 
Sandesha2Constants.WSRM_COMMON.SEQUENCE_ACK));
-
+               OMElement sequenceAckPart = element;
                if (sequenceAckPart == null)
                        throw new OMException(SandeshaMessageHelper.getMessage(
                                        SandeshaMessageKeys.seqAckPartIsNull));

Modified: 
webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/wsrm/SequenceAcknowledgementTest.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/wsrm/SequenceAcknowledgementTest.java?rev=430344&r1=430343&r2=430344&view=diff
==============================================================================
--- 
webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/wsrm/SequenceAcknowledgementTest.java
 (original)
+++ 
webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/wsrm/SequenceAcknowledgementTest.java
 Thu Aug 10 03:02:50 2006
@@ -37,9 +37,10 @@
     }
 
     public void testFromOMElement()  throws SandeshaException {
+         QName name = new QName(rmNamespace, "SequenceAcknowledgement");
         SequenceAcknowledgement sequenceAck = new 
SequenceAcknowledgement(factory,rmNamespace);
         SOAPEnvelope env = getSOAPEnvelope("", "SequenceAcknowledgement.xml");
-        sequenceAck.fromOMElement(env.getHeader());
+        sequenceAck.fromOMElement(env.getHeader().getFirstChildWithName(name));
 
         Identifier identifier = sequenceAck.getIdentifier();
         assertEquals("uuid:897ee740-1624-11da-a28e-b3b9c4e71445", 
identifier.getIdentifier());



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to