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