Author: mckierna
Date: Wed Jul  4 09:37:50 2007
New Revision: 553261

URL: http://svn.apache.org/viewvc?view=rev&rev=553261
Log:
Make dup operation both 1 way and 2 way (SANDESHA2-95)

Modified:
    
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/Sandesha2Constants.java
    
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/handlers/SandeshaGlobalInHandler.java
    
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/SequenceProcessor.java
    
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/util/SandeshaUtil.java
    
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/util/SpecSpecificConstants.java
    webservices/sandesha/trunk/java/modules/mar/module.xml

Modified: 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/Sandesha2Constants.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/Sandesha2Constants.java?view=diff&rev=553261&r1=553260&r2=553261
==============================================================================
--- 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/Sandesha2Constants.java
 (original)
+++ 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/Sandesha2Constants.java
 Wed Jul  4 09:37:50 2007
@@ -269,11 +269,13 @@
                
                int LAST_MESSAGE = 12;
 
-               int DUPLICATE_MESSAGE = 13;
+               int DUPLICATE_MESSAGE_IN_ONLY = 13;
                
-               int POLL_RESPONSE_MESSAGE = 14;
+               int DUPLICATE_MESSAGE_IN_OUT = 14;
+               
+               int POLL_RESPONSE_MESSAGE = 15;
 
-               int MAX_MESSAGE_TYPE = 14;
+               int MAX_MESSAGE_TYPE = 15;
        }
 
        public interface MessageParts {
@@ -559,7 +561,8 @@
        static final String SANDESHA_OP_PREFIX    = "Sandesha2Operation";
        static final QName RM_OUT_IN_OPERATION    = new 
QName(SANDESHA_OP_PREFIX + "OutIn");
        static final QName RM_OUT_ONLY_OPERATION  = new 
QName(SANDESHA_OP_PREFIX + "OutOnly");
-       static final QName RM_DUPLICATE_OPERATION = new 
QName(SANDESHA_OP_PREFIX + "Duplicate");
+       static final QName RM_DUPLICATE_IN_ONLY_OPERATION = new 
QName(SANDESHA_OP_PREFIX + "DuplicateInOnly");
+       static final QName RM_DUPLICATE_IN_OUT_OPERATION = new 
QName(SANDESHA_OP_PREFIX + "DuplicateInOut");
        static final QName RM_IN_OUT_OPERATION    = new 
QName(SANDESHA_OP_PREFIX + "InOut");
        static final QName RM_IN_ONLY_OPERATION   = new 
QName(SANDESHA_OP_PREFIX + "InOnly");
        

Modified: 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/handlers/SandeshaGlobalInHandler.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/handlers/SandeshaGlobalInHandler.java?view=diff&rev=553261&r1=553260&r2=553261
==============================================================================
--- 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/handlers/SandeshaGlobalInHandler.java
 (original)
+++ 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/handlers/SandeshaGlobalInHandler.java
 Wed Jul  4 09:37:50 2007
@@ -30,6 +30,7 @@
 import org.apache.axis2.description.AxisService;
 import org.apache.axis2.description.Parameter;
 import org.apache.axis2.handlers.AbstractHandler;
+import org.apache.axis2.wsdl.WSDLConstants;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.sandesha2.RMMsgContext;
@@ -221,24 +222,8 @@
             if (service==null)
                  throw new SandeshaException ("Duplicate message detected. But 
cant dispatch since the Service has not been found");
             
-            AxisOperation duplicateMessageOperation = 
SpecSpecificConstants.getWSRMOperation(
-                Sandesha2Constants.MessageTypes.DUPLICATE_MESSAGE,
-                Sandesha2Constants.SPEC_VERSIONS.v1_0,
-                service);
-            
rmMsgCtx.getMessageContext().setAxisOperation(duplicateMessageOperation);
+            setupDuplicateOperation(rmMsgCtx);
             
-            
-            /**
-             * Adding a MessageID here if this is a response message. If this 
is not added AddressingValidators will fail.
-             * This is becoz the DuplicateOperation I added here has a InOut 
operation. According to Addressing a InOut msg
-             * Must contain a MessageID.
-             */
-            
-            RelatesTo relatesTo = messageContext.getRelatesTo();
-            String messageID = messageContext.getOptions().getMessageId();
-            if (relatesTo!=null && messageID==null) {
-               messageContext.getOptions().setMessageId 
(SandeshaUtil.getUUID());
-            }
         }
       } else {
         
@@ -252,12 +237,7 @@
           if (service==null)
                  throw new SandeshaException ("Duplicate message detected. But 
cant dispatch since the Service has not been found");
           
-          AxisOperation duplicateMessageOperation = 
SpecSpecificConstants.getWSRMOperation(
-              Sandesha2Constants.MessageTypes.DUPLICATE_MESSAGE,
-              Sandesha2Constants.SPEC_VERSIONS.v1_0,
-              service);
-          
rmMsgCtx.getMessageContext().setAxisOperation(duplicateMessageOperation);
-          
+          setupDuplicateOperation(rmMsgCtx);   
       }
       
       if(transaction != null && transaction.isActive()) transaction.commit();
@@ -269,5 +249,53 @@
     }
     if (log.isDebugEnabled())
       log.debug("Exit: SandeshaGlobalInHandler::processApplicationMessage");
+  }
+  
+  
+  /**
+   * Find the duplicate RM AxisOperation that is appropriate for the message - 
we need a
+   * different dup operation depending on whether the MEP is one way or two 
way.
+   */
+  private static void setupDuplicateOperation(RMMsgContext rmMsgCtx) throws 
SandeshaException {
+    if (log.isDebugEnabled()) log.debug("Enter: 
SandeshaGlobalInHandler::setupDuplicateOperation");
+
+    MessageContext ctx = rmMsgCtx.getMessageContext();
+    AxisOperation duplicateMessageOperation = null;
+    int mep = WSDLConstants.MEP_CONSTANT_IN_ONLY;
+    AxisOperation userOp = ctx.getAxisOperation();
+    if(userOp != null) mep = userOp.getAxisSpecificMEPConstant();
+    boolean inOut = false;
+
+    if(WSDLConstants.MEP_CONSTANT_IN_ONLY == mep ){
+      duplicateMessageOperation = SpecSpecificConstants.getWSRMOperation(
+        Sandesha2Constants.MessageTypes.DUPLICATE_MESSAGE_IN_ONLY,
+        Sandesha2Constants.SPEC_VERSIONS.v1_0,
+        rmMsgCtx.getMessageContext().getAxisService());                
+    } else {
+      duplicateMessageOperation = SpecSpecificConstants.getWSRMOperation(
+        Sandesha2Constants.MessageTypes.DUPLICATE_MESSAGE_IN_OUT,
+        Sandesha2Constants.SPEC_VERSIONS.v1_0,
+        rmMsgCtx.getMessageContext().getAxisService());      
+       inOut = true;
+    }
+
+    ctx.setRelationships(null);
+    ctx.setAxisOperation(duplicateMessageOperation);
+    
+    if(inOut){
+      /**
+       * Adding a MessageID here if this is a response message. If this is not 
added AddressingValidators will fail.
+       * This is becoz the DuplicateOperation I added here has a InOut 
operation. According to Addressing a InOut msg
+       * Must contain a MessageID.
+       */
+      
+      RelatesTo relatesTo = rmMsgCtx.getRelatesTo();
+      String messageID = 
rmMsgCtx.getMessageContext().getOptions().getMessageId();
+      if (relatesTo!=null && messageID==null) {
+       rmMsgCtx.getMessageContext().getOptions().setMessageId 
(SandeshaUtil.getUUID());
+      }
+    }
+
+    if (log.isDebugEnabled()) log.debug("Exit: 
SandeshaGlobalInHandler::setupDuplicateOperation");
   }
 }

Modified: 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/SequenceProcessor.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/SequenceProcessor.java?view=diff&rev=553261&r1=553260&r2=553261
==============================================================================
--- 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/SequenceProcessor.java
 (original)
+++ 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/SequenceProcessor.java
 Wed Jul  4 09:37:50 2007
@@ -200,8 +200,11 @@
                }
                
                String specVersion = rmMsgCtx.getRMSpecVersion();
-               if 
(rmMsgCtx.getMessageContext().getAxisOperation().getName().getLocalPart().equals(Sandesha2Constants.RM_DUPLICATE_OPERATION.getLocalPart())
+               if 
((SandeshaUtil.isDuplicateInOnlyMessage(rmMsgCtx.getMessageContext())
+                                               ||
+                                       
SandeshaUtil.isDuplicateInOutMessage(rmMsgCtx.getMessageContext()))
                                && 
(Sandesha2Constants.QOS.InvocationType.DEFAULT_INVOCATION_TYPE == 
Sandesha2Constants.QOS.InvocationType.EXACTLY_ONCE)) {
+                       
                        // this is a duplicate message and the invocation type 
is EXACTLY_ONCE. We try to return
                        // ack messages at this point, as if someone is sending 
duplicates then they may have
                        // missed earlier acks. We also have special processing 
for sync 2-way with RM 1.0

Modified: 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/util/SandeshaUtil.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/util/SandeshaUtil.java?view=diff&rev=553261&r1=553260&r2=553261
==============================================================================
--- 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/util/SandeshaUtil.java
 (original)
+++ 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/util/SandeshaUtil.java
 Wed Jul  4 09:37:50 2007
@@ -1035,6 +1035,27 @@
        }
        
        
+       public static boolean isDuplicateInOnlyMessage(MessageContext 
msgContext)
+       {
+               AxisOperation operation = msgContext.getAxisOperation();
+               String localName = operation.getName().getLocalPart();
+               
if(localName.equals(Sandesha2Constants.RM_DUPLICATE_IN_ONLY_OPERATION.getLocalPart())){
+                       return true;
+               }
+               else return false;
+       }
+       
+       public static boolean isDuplicateInOutMessage(MessageContext msgContext)
+       {
+               AxisOperation operation = msgContext.getAxisOperation();
+               String localName = operation.getName().getLocalPart();
+               
if(localName.equals(Sandesha2Constants.RM_DUPLICATE_IN_OUT_OPERATION.getLocalPart())){
+                       return true;
+               }
+               else return false;
+       }       
+       
+       
        public static SOAPEnvelope cloneEnvelope(SOAPEnvelope envelope) throws 
SandeshaException {
                
                // Now clone the env and set it in the message context

Modified: 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/util/SpecSpecificConstants.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/util/SpecSpecificConstants.java?view=diff&rev=553261&r1=553260&r2=553261
==============================================================================
--- 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/util/SpecSpecificConstants.java
 (original)
+++ 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/util/SpecSpecificConstants.java
 Wed Jul  4 09:37:50 2007
@@ -343,8 +343,11 @@
                        case Sandesha2Constants.MessageTypes.LAST_MESSAGE:
                                result = 
service.getOperation(Sandesha2Constants.RM_OUT_ONLY_OPERATION);
                                break;                  
-                       case Sandesha2Constants.MessageTypes.DUPLICATE_MESSAGE:
-                               result = 
service.getOperation(Sandesha2Constants.RM_DUPLICATE_OPERATION);
+                       case 
Sandesha2Constants.MessageTypes.DUPLICATE_MESSAGE_IN_ONLY:
+                         result = 
service.getOperation(Sandesha2Constants.RM_DUPLICATE_IN_ONLY_OPERATION);
+                         break;
+                       case 
Sandesha2Constants.MessageTypes.DUPLICATE_MESSAGE_IN_OUT:
+                               result = 
service.getOperation(Sandesha2Constants.RM_DUPLICATE_IN_OUT_OPERATION);
                                break;
                        case 
Sandesha2Constants.MessageTypes.POLL_RESPONSE_MESSAGE:
                                result = 
service.getOperation(Sandesha2Constants.RM_OUT_ONLY_OPERATION);

Modified: webservices/sandesha/trunk/java/modules/mar/module.xml
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/mar/module.xml?view=diff&rev=553261&r1=553260&r2=553261
==============================================================================
--- webservices/sandesha/trunk/java/modules/mar/module.xml (original)
+++ webservices/sandesha/trunk/java/modules/mar/module.xml Wed Jul  4 09:37:50 
2007
@@ -80,7 +80,11 @@
         <messageReceiver 
class="org.apache.sandesha2.msgreceivers.RMMessageReceiver"/>
     </operation>
 
-    <operation name="Sandesha2OperationDuplicate" 
mep="http://www.w3.org/2006/01/wsdl/in-out";>
+               <operation name="Sandesha2OperationDuplicateInOnly" 
mep="http://www.w3.org/2006/01/wsdl/in-only";>
+        <messageReceiver 
class="org.apache.sandesha2.msgreceivers.RMMessageReceiver"/>
+    </operation>
+
+    <operation name="Sandesha2OperationDuplicateInOut" 
mep="http://www.w3.org/2006/01/wsdl/in-out";>
         <messageReceiver 
class="org.apache.sandesha2.msgreceivers.RMMessageReceiver"/>
     </operation>
 



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

Reply via email to