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 mc...@apache.org on 2007/07/04 18:37:51 UTC

svn commit: r553261 - in /webservices/sandesha/trunk/java/modules: core/src/main/java/org/apache/sandesha2/ core/src/main/java/org/apache/sandesha2/handlers/ core/src/main/java/org/apache/sandesha2/msgprocessors/ core/src/main/java/org/apache/sandesha2...

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: sandesha-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: sandesha-dev-help@ws.apache.org