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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to