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]