[prev in list] [next in list] [prev in thread] [next in thread] 

List:       sandesha-dev
Subject:    svn commit: r541573 - in
From:       chamikara () apache ! org
Date:       2007-05-25 7:43:25
Message-ID: 20070525074331.D3ACC1A981A () eris ! apache ! org
[Download RAW message or body]

Author: chamikara
Date: Fri May 25 00:43:21 2007
New Revision: 541573

URL: http://svn.apache.org/viewvc?view=rev&rev=541573
Log:
Fixed the empty body LastMessage processing.

In sync scenarios the server will respond this with a LastMessage for the response \
sequence. But this should not be an response to the original message, I.e. there \
should not be an relatesTo.

A fix to throw an exception when offer it not given when it is required.

A couple of other big fixes.

Modified:
    webservices/sandesha/branches/sandesha2/java/1_2/modules/core/src/main/java/org/apache/sandesha2/MessageValidator.java
  webservices/sandesha/branches/sandesha2/java/1_2/modules/core/src/main/java/org/apache/sandesha2/RMMsgContext.java
  webservices/sandesha/branches/sandesha2/java/1_2/modules/core/src/main/java/org/apache/sandesha2/Sandesha2Constants.java
  webservices/sandesha/branches/sandesha2/java/1_2/modules/core/src/main/java/org/apache/sandesha2/handlers/SandeshaGlobalInHandler.java
  webservices/sandesha/branches/sandesha2/java/1_2/modules/core/src/main/java/org/apache/sandesha2/handlers/SandeshaInHandler.java
  webservices/sandesha/branches/sandesha2/java/1_2/modules/core/src/main/java/org/apache/sandesha2/i18n/SandeshaMessageKeys.java
  webservices/sandesha/branches/sandesha2/java/1_2/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java
  webservices/sandesha/branches/sandesha2/java/1_2/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/LastMessageProcessor.java
  webservices/sandesha/branches/sandesha2/java/1_2/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/MsgProcessorFactory.java
  webservices/sandesha/branches/sandesha2/java/1_2/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/SequenceProcessor.java
  webservices/sandesha/branches/sandesha2/java/1_2/modules/core/src/main/java/org/apache/sandesha2/msgreceivers/RMMessageReceiver.java
  webservices/sandesha/branches/sandesha2/java/1_2/modules/core/src/main/java/org/apache/sandesha2/storage/beans/RMSBean.java
  webservices/sandesha/branches/sandesha2/java/1_2/modules/core/src/main/java/org/apache/sandesha2/util/MsgInitializer.java
  webservices/sandesha/branches/sandesha2/java/1_2/modules/core/src/main/java/org/apache/sandesha2/util/SpecSpecificConstants.java
  webservices/sandesha/branches/sandesha2/java/1_2/modules/core/src/main/java/org/apache/sandesha2/workers/SenderWorker.java
  webservices/sandesha/branches/sandesha2/java/1_2/modules/core/src/main/resources/org/apache/sandesha2/i18n/resource.properties


Modified: webservices/sandesha/branches/sandesha2/java/1_2/modules/core/src/main/java/org/apache/sandesha2/MessageValidator.java
                
URL: http://svn.apache.org/viewvc/webservices/sandesha/branches/sandesha2/java/1_2/mod \
ules/core/src/main/java/org/apache/sandesha2/MessageValidator.java?view=diff&rev=541573&r1=541572&r2=541573
 ==============================================================================
--- webservices/sandesha/branches/sandesha2/java/1_2/modules/core/src/main/java/org/apache/sandesha2/MessageValidator.java \
                (original)
+++ webservices/sandesha/branches/sandesha2/java/1_2/modules/core/src/main/java/org/apache/sandesha2/MessageValidator.java \
Fri May 25 00:43:21 2007 @@ -17,6 +17,11 @@
 
 package org.apache.sandesha2;
 
+import org.apache.axis2.addressing.EndpointReference;
+import org.apache.axis2.context.MessageContext;
+import org.apache.axis2.description.AxisOperation;
+import org.apache.axis2.description.WSDL2Constants;
+import org.apache.sandesha2.client.SandeshaClientConstants;
 import org.apache.sandesha2.i18n.SandeshaMessageHelper;
 import org.apache.sandesha2.i18n.SandeshaMessageKeys;
 import org.apache.sandesha2.policy.SandeshaPolicyBean;
@@ -32,7 +37,7 @@
  */
 public class MessageValidator {
 
-	public static void validateMessage(RMMsgContext rmMsg,
+	public static void validateIncomingMessage(RMMsgContext rmMsg,
 			StorageManager storageManager) throws SandeshaException {
 
 		int type = rmMsg.getMessageType();
@@ -90,5 +95,33 @@
 
 		// TODO do validation based on states
 		
+	}
+	
+	public static void validateOutgoingMessage (RMMsgContext rmMsgContext) throws \
SandeshaException { +		
+		MessageContext msgContext = rmMsgContext.getMessageContext();
+		if (!msgContext.isServerSide()) {
+			//validating messages from the client.
+			
+			//if sync InOut and NoOffer and RM 1.0 an exception should be thrown
+			String rmNamespace = rmMsgContext.getRMNamespaceValue();
+			String mep = msgContext.getAxisOperation().getMessageExchangePattern();
+			String offer = (String) \
msgContext.getProperty(SandeshaClientConstants.OFFERED_SEQUENCE_ID); +			
+			EndpointReference replyTo = \
rmMsgContext.getMessageContext().getOptions().getReplyTo(); +			boolean anonReplyTo = \
false; +			if (replyTo==null || replyTo.hasAnonymousAddress())
+				anonReplyTo = true;
+			
+			if (Sandesha2Constants.SPEC_VERSIONS.v1_0.equals(rmMsgContext.getRMSpecVersion()) \
&& +				WSDL2Constants.MEP_URI_OUT_IN.equals(mep) &&
+				offer==null && anonReplyTo) {
+				
+				String message = \
SandeshaMessageHelper.getMessage(SandeshaMessageKeys.offerRequiredForAnon); \
+				throw new SandeshaException(message); +				
+			}
+			
+		}
 	}
 }

Modified: webservices/sandesha/branches/sandesha2/java/1_2/modules/core/src/main/java/org/apache/sandesha2/RMMsgContext.java
                
URL: http://svn.apache.org/viewvc/webservices/sandesha/branches/sandesha2/java/1_2/mod \
ules/core/src/main/java/org/apache/sandesha2/RMMsgContext.java?view=diff&rev=541573&r1=541572&r2=541573
 ==============================================================================
--- webservices/sandesha/branches/sandesha2/java/1_2/modules/core/src/main/java/org/apache/sandesha2/RMMsgContext.java \
                (original)
+++ webservices/sandesha/branches/sandesha2/java/1_2/modules/core/src/main/java/org/apache/sandesha2/RMMsgContext.java \
Fri May 25 00:43:21 2007 @@ -51,6 +51,7 @@
 	public RMMsgContext() {
 		rmMessageParts = new HashMap();
 		messageType = Sandesha2Constants.MessageTypes.UNKNOWN;
+		rmNamespaceValue = Sandesha2Constants.DEFAULT_RM_NAMESPACE;
 	}
 
 	public void setMessageContext(MessageContext msgCtx) {

Modified: webservices/sandesha/branches/sandesha2/java/1_2/modules/core/src/main/java/org/apache/sandesha2/Sandesha2Constants.java
                
URL: http://svn.apache.org/viewvc/webservices/sandesha/branches/sandesha2/java/1_2/mod \
ules/core/src/main/java/org/apache/sandesha2/Sandesha2Constants.java?view=diff&rev=541573&r1=541572&r2=541573
 ==============================================================================
--- webservices/sandesha/branches/sandesha2/java/1_2/modules/core/src/main/java/org/apache/sandesha2/Sandesha2Constants.java \
                (original)
+++ webservices/sandesha/branches/sandesha2/java/1_2/modules/core/src/main/java/org/apache/sandesha2/Sandesha2Constants.java \
Fri May 25 00:43:21 2007 @@ -28,7 +28,6 @@
 
 public interface Sandesha2Constants {
 
-	
 	public interface SPEC_VERSIONS {
 		String v1_0 = "Spec_2005_02";
 		String v1_1 = "Spec_2007_02";
@@ -551,12 +550,16 @@
 	
 	static final String SERVICE_CONTAINS_OUT_IN_MEPS = "ServiceContainsOutInMeps";
 	
+	static final String DEFAULT_RM_NAMESPACE = Sandesha2Constants.SPEC_2005_02.NS_URI;
+	
 	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_IN_OUT_OPERATION    = new \
QName(SANDESHA_OP_PREFIX + "InOut");  static final QName RM_IN_ONLY_OPERATION   = new \
QName(SANDESHA_OP_PREFIX + "InOnly"); +	
+	static final String OUT_LAST_MESSAGE = "OutLastMessage";
 
 	static final String [] SPEC_NS_URIS = {
 			SPEC_2005_02.NS_URI,

Modified: webservices/sandesha/branches/sandesha2/java/1_2/modules/core/src/main/java/org/apache/sandesha2/handlers/SandeshaGlobalInHandler.java
                
URL: http://svn.apache.org/viewvc/webservices/sandesha/branches/sandesha2/java/1_2/mod \
ules/core/src/main/java/org/apache/sandesha2/handlers/SandeshaGlobalInHandler.java?view=diff&rev=541573&r1=541572&r2=541573
 ==============================================================================
--- webservices/sandesha/branches/sandesha2/java/1_2/modules/core/src/main/java/org/apache/sandesha2/handlers/SandeshaGlobalInHandler.java \
                (original)
+++ webservices/sandesha/branches/sandesha2/java/1_2/modules/core/src/main/java/org/apache/sandesha2/handlers/SandeshaGlobalInHandler.java \
Fri May 25 00:43:21 2007 @@ -131,7 +131,9 @@
     //This is responsible for Sandesha2 specific 
     InvocationResponse response = FaultManager.processMessagesForFaults(rmMsgCtx, \
storageManager);  
-    if (rmMsgCtx.getMessageType() == Sandesha2Constants.MessageTypes.APPLICATION) {
+    //both application msgs and lastMsg msgs will be processed in the same way here.
+    if (rmMsgCtx.getMessageType() == Sandesha2Constants.MessageTypes.APPLICATION ||
+    		rmMsgCtx.getMessageType() == Sandesha2Constants.MessageTypes.LAST_MESSAGE) {
       processApplicationMessage(rmMsgCtx);
     }
     

Modified: webservices/sandesha/branches/sandesha2/java/1_2/modules/core/src/main/java/org/apache/sandesha2/handlers/SandeshaInHandler.java
                
URL: http://svn.apache.org/viewvc/webservices/sandesha/branches/sandesha2/java/1_2/mod \
ules/core/src/main/java/org/apache/sandesha2/handlers/SandeshaInHandler.java?view=diff&rev=541573&r1=541572&r2=541573
 ==============================================================================
--- webservices/sandesha/branches/sandesha2/java/1_2/modules/core/src/main/java/org/apache/sandesha2/handlers/SandeshaInHandler.java \
                (original)
+++ webservices/sandesha/branches/sandesha2/java/1_2/modules/core/src/main/java/org/apache/sandesha2/handlers/SandeshaInHandler.java \
Fri May 25 00:43:21 2007 @@ -108,7 +108,7 @@
         rmMsgCtx = MsgInitializer.initializeMessage(msgCtx);
 
 			// validating the message
-			MessageValidator.validateMessage(rmMsgCtx, storageManager);
+			MessageValidator.validateIncomingMessage(rmMsgCtx, storageManager);
 			
 			// commit the current transaction
 			if(transaction != null && transaction.isActive()) transaction.commit();

Modified: webservices/sandesha/branches/sandesha2/java/1_2/modules/core/src/main/java/org/apache/sandesha2/i18n/SandeshaMessageKeys.java
                
URL: http://svn.apache.org/viewvc/webservices/sandesha/branches/sandesha2/java/1_2/mod \
ules/core/src/main/java/org/apache/sandesha2/i18n/SandeshaMessageKeys.java?view=diff&rev=541573&r1=541572&r2=541573
 ==============================================================================
--- webservices/sandesha/branches/sandesha2/java/1_2/modules/core/src/main/java/org/apache/sandesha2/i18n/SandeshaMessageKeys.java \
                (original)
+++ webservices/sandesha/branches/sandesha2/java/1_2/modules/core/src/main/java/org/apache/sandesha2/i18n/SandeshaMessageKeys.java \
Fri May 25 00:43:21 2007 @@ -232,5 +232,6 @@
 	public final static String cannotSetPolicyBeanServiceNull = \
"cannotSetPolicyBeanServiceNull";  public final static String noPolling="noPolling";
 	public final static String freeingTransport="freeingTransport";
+	public final static String offerRequiredForAnon = "offerRequiredForAnon";
 
 }

Modified: webservices/sandesha/branches/sandesha2/java/1_2/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java
                
URL: http://svn.apache.org/viewvc/webservices/sandesha/branches/sandesha2/java/1_2/mod \
ules/core/src/main/java/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java?view=diff&rev=541573&r1=541572&r2=541573
 ==============================================================================
--- webservices/sandesha/branches/sandesha2/java/1_2/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java \
                (original)
+++ webservices/sandesha/branches/sandesha2/java/1_2/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java \
Fri May 25 00:43:21 2007 @@ -29,6 +29,7 @@
 import org.apache.axis2.wsdl.WSDLConstants;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.sandesha2.MessageValidator;
 import org.apache.sandesha2.RMMsgContext;
 import org.apache.sandesha2.Sandesha2Constants;
 import org.apache.sandesha2.SandeshaException;
@@ -88,6 +89,9 @@
 		MessageContext msgContext = rmMsgCtx.getMessageContext();
 		ConfigurationContext configContext = msgContext.getConfigurationContext();
 
+		//validating the outgoing message
+		MessageValidator.validateOutgoingMessage(rmMsgCtx);
+		
 		// setting the Fault callback
 		SandeshaListener faultCallback = (SandeshaListener) \
msgContext.getOptions().getProperty(  SandeshaClientConstants.SANDESHA_LISTENER);
@@ -278,7 +282,7 @@
 
 		if (serverSide) {
 			// Deciding whether this is the last message. We assume it is if it relates to
-			// a message which arrived with the LastMessage flag on it.
+			// a message which arrived with the LastMessage flag on it. 
 			RMDBean rmdBean = SandeshaUtil.getRMDBeanFromSequenceId(storageManager, \
inboundSequence);			  // Get the last in message
 			String lastRequestId = rmdBean.getLastInMessageId();
@@ -287,6 +291,11 @@
 					lastRequestId.equals(relatesTo.getValue())) {
 				lastMessage = true;
 			}
+			
+			//or a constant property may call it as the last msg
+			Boolean inboundLast = (Boolean) \
msgContext.getProperty(Sandesha2Constants.MessageContextProperties.INBOUND_LAST_MESSAGE); \
 +			if (inboundLast!=null && inboundLast.booleanValue())
+				lastMessage = true;
 		}
 		
 		if (lastMessage) 
@@ -376,22 +385,20 @@
 		}
 
 		EndpointReference toEPR = msgContext.getTo();
-		if (toEPR == null) {
-			String message = \
                SandeshaMessageHelper.getMessage(SandeshaMessageKeys.toEPRNotValid, \
                null);
-			log.debug(message);
-			throw new SandeshaException(message);
-		}
 
-		// setting default actions.
-		String to = toEPR.getAddress();
-		String operationName = \
                msgContext.getOperationContext().getAxisOperation().getName().getLocalPart();
                
-		if (msgContext.getWSAAction() == null) {
-			msgContext.setWSAAction(to + "/" + operationName);
-		}
-		if (msgContext.getSoapAction() == null) {
-			msgContext.setSoapAction("\"" + to + "/" + operationName + "\"");
+		
+		if (toEPR != null) {
+			// setting default actions.
+			String to = toEPR.getAddress();
+			String operationName = \
msgContext.getOperationContext().getAxisOperation().getName().getLocalPart(); +			if \
(msgContext.getWSAAction() == null) { +				msgContext.setWSAAction(to + "/" + \
operationName); +			}
+			if (msgContext.getSoapAction() == null) {
+				msgContext.setSoapAction("\"" + to + "/" + operationName + "\"");
+			}
 		}
-
+		
 		// processing the response if not an dummy.
 		if (!dummyMessage)
 			processResponseMessage(rmMsgCtx, rmsBean, internalSequenceId, outSequenceID, \
messageNumber, storageKey, storageManager);

Modified: webservices/sandesha/branches/sandesha2/java/1_2/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/LastMessageProcessor.java
                
URL: http://svn.apache.org/viewvc/webservices/sandesha/branches/sandesha2/java/1_2/mod \
ules/core/src/main/java/org/apache/sandesha2/msgprocessors/LastMessageProcessor.java?view=diff&rev=541573&r1=541572&r2=541573
 ==============================================================================
--- webservices/sandesha/branches/sandesha2/java/1_2/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/LastMessageProcessor.java \
                (original)
+++ webservices/sandesha/branches/sandesha2/java/1_2/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/LastMessageProcessor.java \
Fri May 25 00:43:21 2007 @@ -3,36 +3,120 @@
 import org.apache.axiom.soap.SOAPEnvelope;
 import org.apache.axiom.soap.SOAPFactory;
 import org.apache.axis2.AxisFault;
+import org.apache.axis2.Constants;
 import org.apache.axis2.client.Options;
+import org.apache.axis2.context.ConfigurationContext;
 import org.apache.axis2.context.MessageContext;
+import org.apache.axis2.context.OperationContext;
+import org.apache.axis2.description.AxisOperation;
+import org.apache.axis2.description.AxisOperationFactory;
+import org.apache.axis2.description.OutInAxisOperation;
 import org.apache.axis2.engine.AxisEngine;
 import org.apache.axis2.util.MessageContextBuilder;
 import org.apache.sandesha2.RMMsgContext;
 import org.apache.sandesha2.Sandesha2Constants;
+import org.apache.sandesha2.storage.StorageManager;
+import org.apache.sandesha2.storage.Transaction;
+import org.apache.sandesha2.storage.beanmanagers.RMDBeanMgr;
+import org.apache.sandesha2.storage.beanmanagers.RMSBeanMgr;
+import org.apache.sandesha2.storage.beans.RMDBean;
+import org.apache.sandesha2.storage.beans.RMSBean;
+import org.apache.sandesha2.util.MsgInitializer;
+import org.apache.sandesha2.util.SandeshaUtil;
+import org.apache.sandesha2.util.SpecSpecificConstants;
+import org.apache.sandesha2.wsrm.Sequence;
+import org.ietf.jgss.MessageProp;
 
-public class LastMessageProcessor  {
+public class LastMessageProcessor  implements MsgProcessor {
+
+	
+	
+	
+	public boolean processInMessage(RMMsgContext rmMsgCtx, Transaction transaction) \
throws AxisFault { +		processLastMessage(rmMsgCtx);
+		return true;
+	}
+
+	public boolean processOutMessage(RMMsgContext rmMsgCtx) throws AxisFault {
+		// TODO Auto-generated method stub
+		return false;
+	}
 
 	public static void processLastMessage(RMMsgContext rmMsgCtx) throws AxisFault {
 		
 		if (!Sandesha2Constants.SPEC_VERSIONS.v1_0.equals(rmMsgCtx.getRMSpecVersion()))
 			return;
 		
-		MessageContext msgContext = rmMsgCtx.getMessageContext();
-		MessageContext outMessage = \
MessageContextBuilder.createOutMessageContext(msgContext); +		Sequence sequence = \
(Sequence) rmMsgCtx.getMessagePart(Sandesha2Constants.MessageParts.SEQUENCE); \
+		String sequenceId = sequence.getIdentifier().getIdentifier();  
-		//add the SOAP envelope with body null
-		SOAPFactory factory = (SOAPFactory) msgContext.getEnvelope().getOMFactory();
-		SOAPEnvelope envelope = factory.getDefaultEnvelope();
-		outMessage.setEnvelope(envelope);
-		
-		//set the LastMessageAction and the property
-		if (outMessage.getOptions()==null)
-			outMessage.setOptions(new Options ());
+		ConfigurationContext configurationContext = rmMsgCtx.getConfigurationContext();
+		StorageManager storageManager = SandeshaUtil.getSandeshaStorageManager(
+							configurationContext, configurationContext.getAxisConfiguration());
+		
+		RMDBeanMgr rmdMgr = storageManager.getRMDBeanMgr();
+		RMDBean rmdBean = rmdMgr.retrieve(sequenceId);
+		String outBoundInternalSequence = rmdBean.getOutboundInternalSequence();
+		
+		RMSBeanMgr rmsBeanMgr = storageManager.getRMSBeanMgr();
+		RMSBean findBean = new RMSBean ();
+		findBean.setInternalSequenceID(outBoundInternalSequence);
+		RMSBean rmsBean = rmsBeanMgr.findUnique (findBean);
+		
+		if (rmsBean!=null && rmsBean.getLastOutMessage()<=0) {
+			//there is a RMS sequence without a LastMsg entry
+			
+			MessageContext msgContext = rmMsgCtx.getMessageContext();
+//			MessageContext outMessage = \
MessageContextBuilder.createOutMessageContext(msgContext); +			
+			MessageContext outMessageContext = new MessageContext ();
+			outMessageContext.setServerSide(true);
+			
+			outMessageContext.setTransportOut(msgContext.getTransportOut());
+			outMessageContext.setProperty (Constants.OUT_TRANSPORT_INFO, \
msgContext.getProperty(Constants.OUT_TRANSPORT_INFO)); \
+			outMessageContext.setProperty (MessageContext.TRANSPORT_OUT, \
msgContext.getProperty(MessageContext.TRANSPORT_OUT)); +
+			//add the SOAP envelope with body null
+			SOAPFactory factory = (SOAPFactory) msgContext.getEnvelope().getOMFactory();
+			SOAPEnvelope envelope = factory.getDefaultEnvelope();
+			outMessageContext.setEnvelope(envelope);
+			
+			//set the LastMessageAction and the property
+			if (outMessageContext.getOptions()==null)
+				outMessageContext.setOptions(new Options ());
+			
+			outMessageContext.setConfigurationContext(msgContext.getConfigurationContext());
+			outMessageContext.setServiceContext(msgContext.getServiceContext());
+			outMessageContext.setAxisService(msgContext.getAxisService());
+			
+			AxisOperation operation = \
SpecSpecificConstants.getWSRMOperation(Sandesha2Constants.MessageTypes.LAST_MESSAGE,  \
+																	rmMsgCtx.getRMSpecVersion() , msgContext.getAxisService()); +			
+			OperationContext operationContext = new OperationContext \
(operation,msgContext.getServiceContext()); \
+			operationContext.addMessageContext(outMessageContext); +			
+			String inboundSequenceId = (String) \
msgContext.getProperty(Sandesha2Constants.MessageContextProperties.INBOUND_SEQUENCE_ID);
 +			operationContext.setProperty(Sandesha2Constants.MessageContextProperties.INBOUND_SEQUENCE_ID, \
 +					inboundSequenceId);
+			
+			Long inboundMSgNo = (Long) \
msgContext.getProperty(Sandesha2Constants.MessageContextProperties.INBOUND_MESSAGE_NUMBER);
 +			operationContext.setProperty(Sandesha2Constants.MessageContextProperties.INBOUND_MESSAGE_NUMBER, \
 +					inboundMSgNo);
+			
+			outMessageContext.setAxisOperation(operation);
+			outMessageContext.setOperationContext(operationContext);
+			
+			outMessageContext.getOptions().setAction(Sandesha2Constants.SPEC_2005_02.Actions.ACTION_LAST_MESSAGE);
 +
+			//says that the inbound msg of this was a LastMessage - so the new msg will also \
be a LastMessage +			outMessageContext.setProperty(Sandesha2Constants.MessageContextProperties.INBOUND_LAST_MESSAGE, \
Boolean.TRUE); +			
+			AxisEngine engine = new AxisEngine (rmMsgCtx.getConfigurationContext());
+			engine.send(outMessageContext);
+			
+		}
 		
-		outMessage.getOptions().setAction(Sandesha2Constants.SPEC_2005_02.Actions.ACTION_LAST_MESSAGE);
  
-		AxisEngine engine = new AxisEngine (rmMsgCtx.getConfigurationContext());
-		engine.send(outMessage);
 		
 	}
 

Modified: webservices/sandesha/branches/sandesha2/java/1_2/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/MsgProcessorFactory.java
                
URL: http://svn.apache.org/viewvc/webservices/sandesha/branches/sandesha2/java/1_2/mod \
ules/core/src/main/java/org/apache/sandesha2/msgprocessors/MsgProcessorFactory.java?view=diff&rev=541573&r1=541572&r2=541573
 ==============================================================================
--- webservices/sandesha/branches/sandesha2/java/1_2/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/MsgProcessorFactory.java \
                (original)
+++ webservices/sandesha/branches/sandesha2/java/1_2/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/MsgProcessorFactory.java \
Fri May 25 00:43:21 2007 @@ -45,6 +45,8 @@
 			return new CloseSequenceProcessor();
 		case (Sandesha2Constants.MessageTypes.MAKE_CONNECTION_MSG):
 			return new MakeConnectionProcessor ();
+		case (Sandesha2Constants.MessageTypes.LAST_MESSAGE):
+			return new LastMessageProcessor ();
 		default:
 			return null;
 		}

Modified: webservices/sandesha/branches/sandesha2/java/1_2/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/SequenceProcessor.java
                
URL: http://svn.apache.org/viewvc/webservices/sandesha/branches/sandesha2/java/1_2/mod \
ules/core/src/main/java/org/apache/sandesha2/msgprocessors/SequenceProcessor.java?view=diff&rev=541573&r1=541572&r2=541573
 ==============================================================================
--- webservices/sandesha/branches/sandesha2/java/1_2/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/SequenceProcessor.java \
                (original)
+++ webservices/sandesha/branches/sandesha2/java/1_2/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/SequenceProcessor.java \
Fri May 25 00:43:21 2007 @@ -54,6 +54,7 @@
 import org.apache.sandesha2.util.AcknowledgementManager;
 import org.apache.sandesha2.util.FaultManager;
 import org.apache.sandesha2.util.SandeshaUtil;
+import org.apache.sandesha2.util.SpecSpecificConstants;
 import org.apache.sandesha2.util.TerminateManager;
 import org.apache.sandesha2.workers.SandeshaThread;
 import org.apache.sandesha2.wsrm.Sequence;
@@ -317,8 +318,9 @@
 		
 		boolean sendAck = false;
 		
+		boolean ackBackChannel = SpecSpecificConstants.sendAckInBackChannel \
(rmMsgCtx.getMessageType());  EndpointReference acksTo = new EndpointReference \
                (bean.getAcksToEPR());
-		if (acksTo.hasAnonymousAddress() && backchannelFree) {
+		if (acksTo.hasAnonymousAddress() && backchannelFree && ackBackChannel) {
 			Object responseWritten = \
msgCtx.getOperationContext().getProperty(Constants.RESPONSE_WRITTEN);  if \
(responseWritten==null || !Constants.VALUE_TRUE.equals(responseWritten)) {				  \
sendAck = true; @@ -354,7 +356,7 @@
 			// Whatever the MEP, we stop processing here and the invoker will do the real \
work. We only  // SUSPEND if we need to keep the backchannel open for the response... \
we may as well ABORT  // to let other cases end more quickly.
-			if(backchannelFree) {
+			if(backchannelFree && ackBackChannel) {
 				result = InvocationResponse.ABORT;
 			} else {
 				result = InvocationResponse.SUSPEND;

Modified: webservices/sandesha/branches/sandesha2/java/1_2/modules/core/src/main/java/org/apache/sandesha2/msgreceivers/RMMessageReceiver.java
                
URL: http://svn.apache.org/viewvc/webservices/sandesha/branches/sandesha2/java/1_2/mod \
ules/core/src/main/java/org/apache/sandesha2/msgreceivers/RMMessageReceiver.java?view=diff&rev=541573&r1=541572&r2=541573
 ==============================================================================
--- webservices/sandesha/branches/sandesha2/java/1_2/modules/core/src/main/java/org/apache/sandesha2/msgreceivers/RMMessageReceiver.java \
                (original)
+++ webservices/sandesha/branches/sandesha2/java/1_2/modules/core/src/main/java/org/apache/sandesha2/msgreceivers/RMMessageReceiver.java \
Fri May 25 00:43:21 2007 @@ -74,14 +74,8 @@
 
 				msgProcessor.processInMessage(rmMsgCtx, transaction);
 
-				//If message is a LastMessage then we deligate the processing to the \
                LastMessageProcessor
-				Sequence sequence = (Sequence) \
                rmMsgCtx.getMessagePart(Sandesha2Constants.MessageParts.SEQUENCE);
-				if (sequence!=null && sequence.getLastMessage()!=null) {
-					LastMessageProcessor.processLastMessage(rmMsgCtx);
-				}
-
-        if(transaction != null && transaction.isActive()) transaction.commit();
-        transaction = null;
+				if(transaction != null && transaction.isActive()) transaction.commit();
+					transaction = null;
 
 			} catch (Exception e) {
 				if (log.isDebugEnabled())

Modified: webservices/sandesha/branches/sandesha2/java/1_2/modules/core/src/main/java/org/apache/sandesha2/storage/beans/RMSBean.java
                
URL: http://svn.apache.org/viewvc/webservices/sandesha/branches/sandesha2/java/1_2/mod \
ules/core/src/main/java/org/apache/sandesha2/storage/beans/RMSBean.java?view=diff&rev=541573&r1=541572&r2=541573
 ==============================================================================
--- webservices/sandesha/branches/sandesha2/java/1_2/modules/core/src/main/java/org/apache/sandesha2/storage/beans/RMSBean.java \
                (original)
+++ webservices/sandesha/branches/sandesha2/java/1_2/modules/core/src/main/java/org/apache/sandesha2/storage/beans/RMSBean.java \
Fri May 25 00:43:21 2007 @@ -152,7 +152,7 @@
 	private static final int TERM_PAUSER_FOR_CS        = 0x00000002;
 	private static final int EXPECTED_REPLIES          = 0x00000020;
 	private static final int SOAP_VERSION_FLAG         = 0x00000200;
-
+	
   /**
    * In WSRM Anon URI scenario, we may not want to terminate a perticular sequence \
                until the CreateSequence has been received
    * for the response side, other wise PollingManager will pause the polling process \
in termination and we will never be able

Modified: webservices/sandesha/branches/sandesha2/java/1_2/modules/core/src/main/java/org/apache/sandesha2/util/MsgInitializer.java
                
URL: http://svn.apache.org/viewvc/webservices/sandesha/branches/sandesha2/java/1_2/mod \
ules/core/src/main/java/org/apache/sandesha2/util/MsgInitializer.java?view=diff&rev=541573&r1=541572&r2=541573
 ==============================================================================
--- webservices/sandesha/branches/sandesha2/java/1_2/modules/core/src/main/java/org/apache/sandesha2/util/MsgInitializer.java \
                (original)
+++ webservices/sandesha/branches/sandesha2/java/1_2/modules/core/src/main/java/org/apache/sandesha2/util/MsgInitializer.java \
Fri May 25 00:43:21 2007 @@ -19,6 +19,7 @@
 
 import java.util.Iterator;
 
+import org.apache.axiom.soap.SOAPEnvelope;
 import org.apache.axis2.AxisFault;
 import org.apache.axis2.addressing.AddressingConstants;
 import org.apache.axis2.context.MessageContext;
@@ -30,6 +31,7 @@
 import org.apache.sandesha2.wsrm.CloseSequenceResponse;
 import org.apache.sandesha2.wsrm.CreateSequence;
 import org.apache.sandesha2.wsrm.CreateSequenceResponse;
+import org.apache.sandesha2.wsrm.LastMessage;
 import org.apache.sandesha2.wsrm.MakeConnection;
 import org.apache.sandesha2.wsrm.RMElements;
 import org.apache.sandesha2.wsrm.Sequence;
@@ -163,7 +165,8 @@
 					elements.getSequenceFault());
 		}
 
-		rmMsgContext.setRMNamespaceValue(rmNamespace);
+		if (rmNamespace!=null)
+			rmMsgContext.setRMNamespaceValue(rmNamespace);
 
 	}
 
@@ -213,7 +216,17 @@
 			rmMsgCtx.setMessageType(Sandesha2Constants.MessageTypes.TERMINATE_SEQ_RESPONSE);
 			sequenceID = terminateSequenceResponse.getIdentifier().getIdentifier();
 		} else if (rmMsgCtx.getMessagePart(Sandesha2Constants.MessageParts.SEQUENCE) != \
                null) {
-			rmMsgCtx.setMessageType(Sandesha2Constants.MessageTypes.APPLICATION);
+			
+			Sequence seq = (Sequence) \
rmMsgCtx.getMessagePart(Sandesha2Constants.MessageParts.SEQUENCE); +			LastMessage \
lastMessage = seq.getLastMessage(); +			SOAPEnvelope envelope = \
rmMsgCtx.getSOAPEnvelope(); +			
+			if (lastMessage!=null && envelope.getBody().getFirstOMChild()==null) {
+				//the message is an empty body last message
+				rmMsgCtx.setMessageType(Sandesha2Constants.MessageTypes.LAST_MESSAGE);
+			}else
+				rmMsgCtx.setMessageType(Sandesha2Constants.MessageTypes.APPLICATION);
+			
 			sequenceID = sequence.getIdentifier().getIdentifier();
 		} else if (sequenceAcknowledgementsIter.hasNext()) {
 			rmMsgCtx.setMessageType(Sandesha2Constants.MessageTypes.ACK);

Modified: webservices/sandesha/branches/sandesha2/java/1_2/modules/core/src/main/java/org/apache/sandesha2/util/SpecSpecificConstants.java
                
URL: http://svn.apache.org/viewvc/webservices/sandesha/branches/sandesha2/java/1_2/mod \
ules/core/src/main/java/org/apache/sandesha2/util/SpecSpecificConstants.java?view=diff&rev=541573&r1=541572&r2=541573
 ==============================================================================
--- webservices/sandesha/branches/sandesha2/java/1_2/modules/core/src/main/java/org/apache/sandesha2/util/SpecSpecificConstants.java \
                (original)
+++ webservices/sandesha/branches/sandesha2/java/1_2/modules/core/src/main/java/org/apache/sandesha2/util/SpecSpecificConstants.java \
Fri May 25 00:43:21 2007 @@ -439,5 +439,17 @@
 		
 		return result;
   }
+	
+	public static boolean sendAckInBackChannel (int messageType) {
+		boolean result = true;
+		
+		switch (messageType) {
+			case Sandesha2Constants.MessageTypes.LAST_MESSAGE:
+				result = false;
+				break;
+		}
+		
+		return result;
+	}
 
 }

Modified: webservices/sandesha/branches/sandesha2/java/1_2/modules/core/src/main/java/org/apache/sandesha2/workers/SenderWorker.java
                
URL: http://svn.apache.org/viewvc/webservices/sandesha/branches/sandesha2/java/1_2/mod \
ules/core/src/main/java/org/apache/sandesha2/workers/SenderWorker.java?view=diff&rev=541573&r1=541572&r2=541573
 ==============================================================================
--- webservices/sandesha/branches/sandesha2/java/1_2/modules/core/src/main/java/org/apache/sandesha2/workers/SenderWorker.java \
                (original)
+++ webservices/sandesha/branches/sandesha2/java/1_2/modules/core/src/main/java/org/apache/sandesha2/workers/SenderWorker.java \
Fri May 25 00:43:21 2007 @@ -408,7 +408,7 @@
 				sequence.setMessageNumber(msgNumber);
 
 				if(senderBean.isLastMessage() &&
-				   SpecSpecificConstants.isLastMessageIndicatorRequired(rmVersion)) {
+				    SpecSpecificConstants.isLastMessageIndicatorRequired(rmVersion)) {
 					sequence.setLastMessage(new LastMessage(namespace));
 				}
 				

Modified: webservices/sandesha/branches/sandesha2/java/1_2/modules/core/src/main/resources/org/apache/sandesha2/i18n/resource.properties
                
URL: http://svn.apache.org/viewvc/webservices/sandesha/branches/sandesha2/java/1_2/mod \
ules/core/src/main/resources/org/apache/sandesha2/i18n/resource.properties?view=diff&rev=541573&r1=541572&r2=541573
 ==============================================================================
--- webservices/sandesha/branches/sandesha2/java/1_2/modules/core/src/main/resources/org/apache/sandesha2/i18n/resource.properties \
                (original)
+++ webservices/sandesha/branches/sandesha2/java/1_2/modules/core/src/main/resources/org/apache/sandesha2/i18n/resource.properties \
Fri May 25 00:43:21 2007 @@ -217,6 +217,7 @@
 invalidElementFoundWithinElement=Found invalid ''{0}'' element within ''{1}'' \
element.  invokerNotFound=An invoker thread was not found to dispatch messages on the \
inbound sequence {0}.  cannotSetPolicyBeanServiceNull=Cannot set the given \
SandeshaPolicyBean since the AxisService is not present +offerRequiredForAnon=If you \
are going to try sync in-out message exchanges with RM 1.0, you must do an offer  
 #------------------
 # Security messages



---------------------------------------------------------------------
To unsubscribe, e-mail: sandesha-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: sandesha-dev-help@ws.apache.org


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic