You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fx-dev@ws.apache.org by ch...@apache.org on 2007/05/25 09:43:25 UTC

svn commit: r541573 - in /webservices/sandesha/branches/sandesha2/java/1_2/modules/core/src/main: java/org/apache/sandesha2/ java/org/apache/sandesha2/handlers/ java/org/apache/sandesha2/i18n/ java/org/apache/sandesha2/msgprocessors/ java/org/apache/sa...

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/modules/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/modules/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/modules/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/modules/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/modules/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/modules/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/modules/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/modules/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/modules/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/modules/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/modules/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/modules/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/modules/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/modules/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/modules/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/modules/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