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 2006/03/31 06:15:11 UTC

svn commit: r390319 [2/3] - in /webservices/sandesha/trunk/src/org/apache/sandesha2: ./ client/ handlers/ msgprocessors/ storage/ storage/beanmanagers/ storage/beans/ storage/inmemory/ util/ workers/ wsrm/

Modified: webservices/sandesha/trunk/src/org/apache/sandesha2/util/SandeshaUtil.java
URL: http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/util/SandeshaUtil.java?rev=390319&r1=390318&r2=390319&view=diff
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/util/SandeshaUtil.java (original)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/util/SandeshaUtil.java Thu Mar 30 20:15:07 2006
@@ -16,6 +16,7 @@
  */
 package org.apache.sandesha2.util;
 
+import java.io.InputStream;
 import java.io.OutputStream;
 import java.lang.reflect.Constructor;
 import java.util.ArrayList;
@@ -25,16 +26,20 @@
 
 import javax.xml.namespace.QName;
 import javax.xml.stream.FactoryConfigurationError;
+import javax.xml.stream.XMLInputFactory;
 import javax.xml.stream.XMLOutputFactory;
 import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
 import javax.xml.stream.XMLStreamWriter;
 
 import org.apache.axis2.AxisFault;
 import org.apache.axis2.Constants;
+import org.apache.axis2.addressing.AddressingConstants;
 import org.apache.axis2.context.ConfigurationContext;
 import org.apache.axis2.context.MessageContext;
 import org.apache.axis2.context.MessageContextConstants;
 import org.apache.axis2.context.OperationContext;
+import org.apache.axis2.context.OperationContextFactory;
 import org.apache.axis2.context.ServiceContext;
 import org.apache.axis2.context.ServiceGroupContext;
 import org.apache.axis2.description.AxisOperation;
@@ -43,12 +48,19 @@
 import org.apache.axis2.description.Parameter;
 import org.apache.axis2.engine.AxisConfiguration;
 import org.apache.axis2.engine.Handler;
+import org.apache.axis2.i18n.Messages;
 import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.impl.builder.StAXBuilder;
+import org.apache.axiom.om.impl.builder.StAXOMBuilder;
 import org.apache.axiom.soap.SOAP11Constants;
 import org.apache.axiom.soap.SOAP12Constants;
 import org.apache.axiom.soap.SOAPEnvelope;
 import org.apache.axiom.soap.SOAPFactory;
 import org.apache.axiom.soap.SOAPHeader;
+import org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder;
+import org.apache.axiom.soap.impl.llom.soap11.SOAP11Factory;
+import org.apache.axis2.transport.TransportUtils;
+import org.apache.axis2.transport.http.HTTPConstants;
 import org.apache.axis2.util.UUIDGenerator;
 import org.apache.axis2.util.Utils;
 import org.apache.commons.logging.Log;
@@ -61,7 +73,12 @@
 import org.apache.sandesha2.storage.beans.SequencePropertyBean;
 import org.apache.sandesha2.workers.InOrderInvoker;
 import org.apache.sandesha2.workers.Sender;
+import org.apache.sandesha2.wsrm.AckRequested;
 import org.apache.sandesha2.wsrm.AcknowledgementRange;
+import org.apache.sandesha2.wsrm.CloseSequence;
+import org.apache.sandesha2.wsrm.CloseSequenceResponse;
+import org.apache.sandesha2.wsrm.Sequence;
+import org.apache.sandesha2.wsrm.SequenceAcknowledgement;
 
 /**
  * Contains utility methods that are used in many plases of Sandesha2.
@@ -71,14 +88,14 @@
 
 public class SandeshaUtil {
 
-	//private static Hashtable storedMsgContexts = new Hashtable();
+	// private static Hashtable storedMsgContexts = new Hashtable();
 
 	private static StorageManager storageManager = null;
 
 	private static Sender sender = new Sender();
 
 	private static InOrderInvoker invoker = new InOrderInvoker();
-	
+
 	private static Log log = LogFactory.getLog(SandeshaUtil.class);
 
 	/**
@@ -87,24 +104,24 @@
 	 * @return
 	 */
 	public static String getUUID() {
-		//String uuid = "uuid:" + UUIDGenerator.getUUID();
+		// String uuid = "uuid:" + UUIDGenerator.getUUID();
 		String uuid = UUIDGenerator.getUUID();
 
 		return uuid;
 	}
 
 	/**
-	 * Used to convert a message number list (a comma seperated list of message numbers) into
-	 * a set of AcknowledgementRanges. This breaks the list, sort the items and group them to create
-	 * the AcknowledgementRange objects.
+	 * Used to convert a message number list (a comma seperated list of message
+	 * numbers) into a set of AcknowledgementRanges. This breaks the list, sort
+	 * the items and group them to create the AcknowledgementRange objects.
 	 * 
 	 * @param msgNoStr
 	 * @param factory
 	 * @return
 	 * @throws SandeshaException
 	 */
-	public static ArrayList getAckRangeArrayList(String msgNoStr,
-			SOAPFactory factory, String rmNamespaceValue) throws SandeshaException {
+	public static ArrayList getAckRangeArrayList(String msgNoStr, SOAPFactory factory, String rmNamespaceValue)
+			throws SandeshaException {
 
 		ArrayList ackRanges = new ArrayList();
 
@@ -127,9 +144,8 @@
 				upper = temp;
 				completed = false;
 			} else {
-				//add ackRange (lower,upper)
-				AcknowledgementRange ackRange = new AcknowledgementRange(
-						factory,rmNamespaceValue);
+				// add ackRange (lower,upper)
+				AcknowledgementRange ackRange = new AcknowledgementRange(factory, rmNamespaceValue);
 				ackRange.setLowerValue(lower);
 				ackRange.setUpperValue(upper);
 				ackRanges.add(ackRange);
@@ -141,7 +157,7 @@
 		}
 
 		if (!completed) {
-			AcknowledgementRange ackRange = new AcknowledgementRange(factory,rmNamespaceValue);
+			AcknowledgementRange ackRange = new AcknowledgementRange(factory, rmNamespaceValue);
 			ackRange.setLowerValue(lower);
 			ackRange.setUpperValue(upper);
 			ackRanges.add(ackRange);
@@ -151,8 +167,7 @@
 		return ackRanges;
 	}
 
-	private static ArrayList getSortedMsgNoArrayList(StringTokenizer tokenizer)
-			throws SandeshaException {
+	private static ArrayList getSortedMsgNoArrayList(StringTokenizer tokenizer) throws SandeshaException {
 		ArrayList msgNubers = new ArrayList();
 
 		while (tokenizer.hasMoreElements()) {
@@ -197,108 +212,24 @@
 		return sortedList;
 	}
 
-//	/**
-//	 * Used to store message context objects. Currently they are stored in a in-memory HashMap.
-//	 * Returned key can be used to retrieve the message context.
-//	 * 
-//	 * @param ctx
-//	 * @return
-//	 * @throws SandeshaException
-//	 */
-//	public static String storeMessageContext(MessageContext ctx)
-//			throws SandeshaException {
-//		if (ctx == null) {
-//			String message = "Stored Msg Ctx is null";
-//			log.debug(message);
-//			throw new SandeshaException(message);
-//		}
-//
-//		String key = getUUID();
-//		storedMsgContexts.put(key, ctx);
-//		return key;
-//	}
-	
-//	/**
-//	 * Retrieve the MessageContexts saved by the above method.
-//	 * 
-//	 * @param key
-//	 * @return
-//	 */
-//	public static MessageContext getStoredMessageContext(String key) {
-//		return (MessageContext) storedMsgContexts.get(key);
-//	}
-
 	public static void startSenderForTheSequence(ConfigurationContext context, String sequenceID) {
-		sender.runSenderForTheSequence (context,sequenceID);
+		sender.runSenderForTheSequence(context, sequenceID);
 	}
 
 	public static void stopSenderForTheSequence(String sequenceID) {
-		sender.stopSenderForTheSequence (sequenceID);
+		sender.stopSenderForTheSequence(sequenceID);
 	}
-	
+
 	public static void startInvokerForTheSequence(ConfigurationContext context, String sequenceID) {
 		if (!invoker.isInvokerStarted()) {
-			invoker.runInvokerForTheSequence(context,sequenceID);
+			invoker.runInvokerForTheSequence(context, sequenceID);
 		}
 	}
-	
+
 	public static void stopInvokerForTheSequence(String sequenceID) {
-		invoker.stopInvokerForTheSequence (sequenceID);
+		invoker.stopInvokerForTheSequence(sequenceID);
 	}
 
-
-
-	/*public static SOAPEnvelope createSOAPMessage(MessageContext msgContext,
-			String soapNamespaceURI) throws AxisFault {
-		try {
-
-			InputStream inStream = (InputStream) msgContext
-					.getProperty(MessageContext.TRANSPORT_IN);
-			msgContext.setProperty(MessageContext.TRANSPORT_IN, null);
-			//this inputstram is set by the TransportSender represents a two
-			// way transport or
-			//by a Transport Recevier
-			if (inStream == null) {
-				throw new AxisFault(Messages.getMessage("inputstreamNull"));
-			}
-
-			String contentType = null;
-
-			StAXBuilder builder = null;
-			SOAPEnvelope envelope = null;
-
-			String charSetEnc = (String) msgContext
-					.getProperty(MessageContext.CHARACTER_SET_ENCODING);
-			if (charSetEnc == null) {
-				charSetEnc = MessageContext.DEFAULT_CHAR_SET_ENCODING;
-			}
-
-			if (contentType != null) {
-				msgContext.setDoingMTOM(true);
-				builder = HTTPTransportUtils.selectBuilderForMIME(msgContext,
-						inStream, (String) contentType);
-				envelope = (SOAPEnvelope) builder.getDocumentElement();
-			} else if (msgContext.isDoingREST()) {
-				XMLStreamReader xmlreader = XMLInputFactory.newInstance()
-						.createXMLStreamReader(inStream, charSetEnc);
-				SOAPFactory soapFactory = new SOAP11Factory();
-				builder = new StAXOMBuilder(xmlreader);
-				builder.setOmbuilderFactory(soapFactory);
-				envelope = soapFactory.getDefaultEnvelope();
-				envelope.getBody().addChild(builder.getDocumentElement());
-			} else {
-				XMLStreamReader xmlreader = XMLInputFactory.newInstance()
-						.createXMLStreamReader(inStream, charSetEnc);
-				builder = new StAXSOAPModelBuilder(xmlreader, soapNamespaceURI);
-				envelope = (SOAPEnvelope) builder.getDocumentElement();
-			}
-			return envelope;
-		} catch (Exception e) {
-			throw new AxisFault(e);
-		}
-
-	}*/
-
 	public static String getMessageTypeString(int messageType) {
 		switch (messageType) {
 		case Sandesha2Constants.MessageTypes.CREATE_SEQ:
@@ -327,8 +258,7 @@
 	}
 
 	public static boolean isGloballyProcessableMessageType(int type) {
-		if (type == Sandesha2Constants.MessageTypes.ACK
-				|| type == Sandesha2Constants.MessageTypes.TERMINATE_SEQ) {
+		if (type == Sandesha2Constants.MessageTypes.ACK || type == Sandesha2Constants.MessageTypes.TERMINATE_SEQ) {
 			return true;
 		}
 
@@ -358,36 +288,30 @@
 		return results;
 	}
 
-	public static String getServerSideIncomingSeqIdFromInternalSeqId (
-			String internalSequenceId) throws SandeshaException  {
-		
+	public static String getServerSideIncomingSeqIdFromInternalSeqId(String internalSequenceId)
+			throws SandeshaException {
+
 		String startStr = Sandesha2Constants.INTERNAL_SEQUENCE_PREFIX + ":";
-		if (!internalSequenceId.startsWith(startStr)){
-			throw new SandeshaException ("Invalid internal sequence ID");
+		if (!internalSequenceId.startsWith(startStr)) {
+			throw new SandeshaException("Invalid internal sequence ID");
 		}
-		
+
 		String incomingSequenceId = internalSequenceId.substring(startStr.length());
 		return incomingSequenceId;
 	}
 
-//	public static String getServerSideInternalSeqIdFromIncomingSeqId(
-//			String incomingSequenceId) {
-//		String internalSequenceId =  Sandesha2Constants.SANDESHA2_INTERNAL_SEQUENCE_ID + ":" + incomingSequenceId;
-//		return internalSequenceId;
-//	}
-
 	/**
-	 * Used to obtain the storage Manager Implementation. 
+	 * Used to obtain the storage Manager Implementation.
+	 * 
 	 * @param context
 	 * @return
 	 * @throws SandeshaException
 	 */
-	public static StorageManager getSandeshaStorageManager(
-			ConfigurationContext context) throws SandeshaException {
-		
-		if (storageManager!=null)
+	public static StorageManager getSandeshaStorageManager(ConfigurationContext context) throws SandeshaException {
+
+		if (storageManager != null)
 			return storageManager;
-		
+
 		String srotageManagerClassStr = PropertyManager.getInstance().getStorageManagerClass();
 
 		if (storageManager != null)
@@ -395,15 +319,12 @@
 
 		try {
 			Class c = Class.forName(srotageManagerClassStr);
-			Class configContextClass = Class.forName(context.getClass()
-					.getName());
-			Constructor constructor = c
-					.getConstructor(new Class[] { configContextClass });
+			Class configContextClass = Class.forName(context.getClass().getName());
+			Constructor constructor = c.getConstructor(new Class[] { configContextClass });
 			Object obj = constructor.newInstance(new Object[] { context });
 
 			if (obj == null || !(obj instanceof StorageManager))
-				throw new SandeshaException(
-						"StorageManager must implement org.apache.sandeshat.storage.StorageManager");
+				throw new SandeshaException("StorageManager must implement org.apache.sandeshat.storage.StorageManager");
 
 			StorageManager mgr = (StorageManager) obj;
 			storageManager = mgr;
@@ -416,13 +337,11 @@
 		}
 	}
 
-	public static int getSOAPVersion(SOAPEnvelope envelope)
-			throws SandeshaException {
+	public static int getSOAPVersion(SOAPEnvelope envelope) throws SandeshaException {
 		String namespaceName = envelope.getNamespace().getName();
 		if (namespaceName.equals(SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI))
 			return Sandesha2Constants.SOAPVersion.v1_1;
-		else if (namespaceName
-				.equals(SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI))
+		else if (namespaceName.equals(SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI))
 			return Sandesha2Constants.SOAPVersion.v1_2;
 		else
 			throw new SandeshaException("Unknown SOAP version");
@@ -441,147 +360,118 @@
 			return false;
 		}
 
-		//TODO make this spec indipendent 
-		
+		// TODO make this spec indipendent
+
 		OMElement sequenceElem = null;
 		if (header != null)
-			sequenceElem = header.getFirstChildWithName(new QName(
-					Sandesha2Constants.SPEC_2005_02.NS_URI, Sandesha2Constants.WSRM_COMMON.SEQUENCE));
+			sequenceElem = header.getFirstChildWithName(new QName(Sandesha2Constants.SPEC_2005_02.NS_URI,
+					Sandesha2Constants.WSRM_COMMON.SEQUENCE));
+
+		if (sequenceElem == null)
+			sequenceElem = header.getFirstChildWithName(new QName(Sandesha2Constants.SPEC_2005_10.NS_URI,
+					Sandesha2Constants.WSRM_COMMON.SEQUENCE));
 
-		if (sequenceElem==null)
-			sequenceElem = header.getFirstChildWithName(new QName(
-					Sandesha2Constants.SPEC_2005_10.NS_URI, Sandesha2Constants.WSRM_COMMON.SEQUENCE));
-			
 		if (sequenceElem != null)
 			rmGlobalMsg = true;
 
-		if (Sandesha2Constants.SPEC_2005_02.Actions.ACTION_SEQUENCE_ACKNOWLEDGEMENT
-				.equals(action))
+		if (Sandesha2Constants.SPEC_2005_02.Actions.ACTION_SEQUENCE_ACKNOWLEDGEMENT.equals(action))
 			rmGlobalMsg = true;
-		
+
 		if (Sandesha2Constants.SPEC_2005_02.Actions.ACTION_CREATE_SEQUENCE_RESPONSE.equals(action))
 			rmGlobalMsg = true;
 
 		if (Sandesha2Constants.SPEC_2005_02.Actions.ACTION_TERMINATE_SEQUENCE.equals(action))
 			rmGlobalMsg = true;
-		
-		
-		
-		if (Sandesha2Constants.SPEC_2005_10.Actions.ACTION_SEQUENCE_ACKNOWLEDGEMENT
-				.equals(action))
+
+		if (Sandesha2Constants.SPEC_2005_10.Actions.ACTION_SEQUENCE_ACKNOWLEDGEMENT.equals(action))
 			rmGlobalMsg = true;
 
 		if (Sandesha2Constants.SPEC_2005_10.Actions.ACTION_TERMINATE_SEQUENCE.equals(action))
 			rmGlobalMsg = true;
-		
+
 		if (Sandesha2Constants.SPEC_2005_10.Actions.ACTION_CREATE_SEQUENCE_RESPONSE.equals(action))
 			rmGlobalMsg = true;
 
-		
 		return rmGlobalMsg;
 	}
 
-//	public static RMMsgContext createResponseRMMessage(
-//			RMMsgContext referenceRMMessage) throws SandeshaException {
-//		try {
-//			MessageContext referenceMessage = referenceRMMessage
-//					.getMessageContext();
-//			MessageContext faultMsgContext = Utils
-//					.createOutMessageContext(referenceMessage);
-//
-//			RMMsgContext faultRMMsgCtx = MsgInitializer
-//					.initializeMessage(faultMsgContext);
-//
-//			return faultRMMsgCtx;
-//
-//		} catch (AxisFault e) {
-//			log.debug(e.getMessage());
-//			throw new SandeshaException(e.getMessage());
-//		}
-//	}
-
-	public static MessageContext createNewRelatedMessageContext(
-			RMMsgContext referenceRMMessage, AxisOperation operation)
+	public static MessageContext createNewRelatedMessageContext(RMMsgContext referenceRMMessage, AxisOperation operation)
 			throws SandeshaException {
 		try {
-			MessageContext referenceMessage = referenceRMMessage
-					.getMessageContext();
-			ConfigurationContext configContext = referenceMessage
-					.getConfigurationContext();
+			MessageContext referenceMessage = referenceRMMessage.getMessageContext();
+			ConfigurationContext configContext = referenceMessage.getConfigurationContext();
 			AxisConfiguration axisConfiguration = configContext.getAxisConfiguration();
-			
+
 			MessageContext newMessageContext = new MessageContext();
 			newMessageContext.setConfigurationContext(configContext);
 
 			if (referenceMessage.getAxisServiceGroup() != null) {
-				newMessageContext.setAxisServiceGroup(referenceMessage
-						.getAxisServiceGroup());
-				newMessageContext.setServiceGroupContext(referenceMessage
-						.getServiceGroupContext());
-				newMessageContext.setServiceGroupContextId(referenceMessage
-						.getServiceGroupContextId());
+				newMessageContext.setAxisServiceGroup(referenceMessage.getAxisServiceGroup());
+				newMessageContext.setServiceGroupContext(referenceMessage.getServiceGroupContext());
+				newMessageContext.setServiceGroupContextId(referenceMessage.getServiceGroupContextId());
 			} else {
-				AxisServiceGroup axisServiceGroup = new AxisServiceGroup (axisConfiguration);
-				ServiceGroupContext serviceGroupContext = new ServiceGroupContext (configContext,axisServiceGroup);
-				
+				AxisServiceGroup axisServiceGroup = new AxisServiceGroup(axisConfiguration);
+				ServiceGroupContext serviceGroupContext = new ServiceGroupContext(configContext, axisServiceGroup);
+
 				newMessageContext.setAxisServiceGroup(axisServiceGroup);
-				newMessageContext.setServiceGroupContext (serviceGroupContext);
+				newMessageContext.setServiceGroupContext(serviceGroupContext);
 			}
 
 			if (referenceMessage.getAxisService() != null) {
-				newMessageContext.setAxisService(referenceMessage
-						.getAxisService());
-				newMessageContext.setServiceContext(referenceMessage
-						.getServiceContext());
-				newMessageContext.setServiceContextID(referenceMessage
-						.getServiceContextID());
+				newMessageContext.setAxisService(referenceMessage.getAxisService());
+				newMessageContext.setServiceContext(referenceMessage.getServiceContext());
+				newMessageContext.setServiceContextID(referenceMessage.getServiceContextID());
 			} else {
-				AxisService axisService = new AxisService ("AnonymousRMService"); //just a dummy name.
-				ServiceContext serviceContext = new ServiceContext (axisService,newMessageContext.getServiceGroupContext());
-				
+				AxisService axisService = new AxisService("AnonymousRMService"); // just
+																					// a
+																					// dummy
+																					// name.
+				ServiceContext serviceContext = new ServiceContext(axisService, newMessageContext
+						.getServiceGroupContext());
+
 				newMessageContext.setAxisService(axisService);
 				newMessageContext.setServiceContext(serviceContext);
 			}
 
 			newMessageContext.setAxisOperation(operation);
 
-			
-			//setting parent child relationships 
+			// setting parent child relationships
 			AxisService service = newMessageContext.getAxisService();
-			if (service!=null && operation!=null) {
+			if (service != null && operation != null) {
 				service.addChild(operation);
 				operation.setParent(service);
 			}
-			
+
 			OperationContext operationContext = new OperationContext(operation);
 			newMessageContext.setOperationContext(operationContext);
 			operationContext.addMessageContext(newMessageContext);
 
-			//adding a blank envelope
-			SOAPFactory factory = SOAPAbstractFactory
-					.getSOAPFactory(SandeshaUtil
-							.getSOAPVersion(referenceMessage.getEnvelope()));
+			// adding a blank envelope
+			SOAPFactory factory = SOAPAbstractFactory.getSOAPFactory(SandeshaUtil.getSOAPVersion(referenceMessage
+					.getEnvelope()));
 			newMessageContext.setEnvelope(factory.getDefaultEnvelope());
 
 			newMessageContext.setTransportIn(referenceMessage.getTransportIn());
-			newMessageContext.setTransportOut(referenceMessage
-					.getTransportOut());
+			newMessageContext.setTransportOut(referenceMessage.getTransportOut());
 
-			copyNecessaryPropertiesFromRelatedContext (referenceMessage,newMessageContext);
-			
-			//copying transport info.
-			newMessageContext.setProperty(MessageContext.TRANSPORT_OUT,
-					referenceMessage.getProperty(MessageContext.TRANSPORT_OUT));
-			newMessageContext.setProperty(Sandesha2Constants.WSP.RM_POLICY_BEAN,
-					referenceMessage
+			copyNecessaryPropertiesFromRelatedContext(referenceMessage, newMessageContext);
+
+			// copying transport info.
+			newMessageContext.setProperty(MessageContext.TRANSPORT_OUT, referenceMessage
+					.getProperty(MessageContext.TRANSPORT_OUT));
+			newMessageContext.setProperty(Sandesha2Constants.WSP.RM_POLICY_BEAN, referenceMessage
 					.getProperty(Sandesha2Constants.WSP.RM_POLICY_BEAN));
 
-			newMessageContext.setProperty(Constants.OUT_TRANSPORT_INFO,referenceMessage.getProperty(Constants.OUT_TRANSPORT_INFO));
-			newMessageContext.setProperty(MessageContext.TRANSPORT_HEADERS,referenceMessage.getProperty(MessageContext.TRANSPORT_HEADERS));
-			newMessageContext.setProperty(MessageContext.TRANSPORT_IN,referenceMessage.getProperty(MessageContext.TRANSPORT_IN));
-			newMessageContext.setProperty(MessageContext.TRANSPORT_OUT,referenceMessage.getProperty(MessageContext.TRANSPORT_OUT));
+			newMessageContext.setProperty(Constants.OUT_TRANSPORT_INFO, referenceMessage
+					.getProperty(Constants.OUT_TRANSPORT_INFO));
+			newMessageContext.setProperty(MessageContext.TRANSPORT_HEADERS, referenceMessage
+					.getProperty(MessageContext.TRANSPORT_HEADERS));
+			newMessageContext.setProperty(MessageContext.TRANSPORT_IN, referenceMessage
+					.getProperty(MessageContext.TRANSPORT_IN));
+			newMessageContext.setProperty(MessageContext.TRANSPORT_OUT, referenceMessage
+					.getProperty(MessageContext.TRANSPORT_OUT));
 			newMessageContext.setExecutionChain(referenceMessage.getExecutionChain());
-			
+
 			return newMessageContext;
 
 		} catch (AxisFault e) {
@@ -590,156 +480,175 @@
 		}
 
 	}
-	
-	private static void copyNecessaryPropertiesFromRelatedContext (MessageContext fromMessage, MessageContext toMessage) {
-		toMessage.setProperty(MessageContextConstants.TRANSPORT_URL,fromMessage.getProperty(MessageContextConstants.TRANSPORT_URL));
-	}
-	
-	public static ArrayList getArrayListFromString (String str) throws SandeshaException {
-		
-		if (str==null || "".equals(str))
-			return new ArrayList ();
+
+	private static void copyNecessaryPropertiesFromRelatedContext(MessageContext fromMessage, MessageContext toMessage) throws SandeshaException {
+		toMessage.setProperty(MessageContextConstants.TRANSPORT_URL, fromMessage
+				.getProperty(MessageContextConstants.TRANSPORT_URL));
+		
+		String addressingVersion = (String) fromMessage.getProperty(AddressingConstants.WS_ADDRESSING_VERSION);
+		if (addressingVersion==null) {
+			OperationContext opCtx = fromMessage.getOperationContext();
+			if (opCtx!=null) {
+				try {
+					MessageContext requestMsg = opCtx.getMessageContext(OperationContextFactory.MESSAGE_LABEL_IN_VALUE);
+					if (requestMsg!=null)
+						addressingVersion = (String) requestMsg.getProperty(AddressingConstants.WS_ADDRESSING_VERSION);
+				} catch (AxisFault e) {
+					throw new SandeshaException (e);
+				}
+			}
+		}
 		
-		if (str.length()<2) {
+		toMessage.setProperty(AddressingConstants.WS_ADDRESSING_VERSION,addressingVersion);
+	}
+
+	public static ArrayList getArrayListFromString(String str) throws SandeshaException {
+
+		if (str == null || "".equals(str))
+			return new ArrayList();
+
+		if (str.length() < 2) {
 			String message = "Invalid String array : " + str;
 			log.debug(message);
-			throw new SandeshaException (message);
+			throw new SandeshaException(message);
 		}
-		
+
 		int length = str.length();
-		
-		if (str.charAt(0)!='[' || str.charAt(length-1)!=']') {
+
+		if (str.charAt(0) != '[' || str.charAt(length - 1) != ']') {
 			String message = "Invalid String array" + str;
 			log.debug(message);
-			throw new SandeshaException (message);
+			throw new SandeshaException(message);
 		}
-		
-		ArrayList retArr = new ArrayList ();
-		
-		String subStr = str.substring(1,length-1);
-		
+
+		ArrayList retArr = new ArrayList();
+
+		String subStr = str.substring(1, length - 1);
+
 		String[] parts = subStr.split(",");
-		
-		for (int i=0;i<parts.length;i++) {
+
+		for (int i = 0; i < parts.length; i++) {
 			if (!"".equals(parts[i]))
 				retArr.add(parts[i].trim());
 		}
-		
+
 		return retArr;
 	}
-	
-	public static ArrayList getArrayListFromMsgsString (String str) throws SandeshaException {
-		
-		if (str==null || "".equals(str))
-			return new ArrayList ();
-		
-		ArrayList retArr = new ArrayList ();
-		
-		StringTokenizer tokenizer = new StringTokenizer (str,",");
-		
+
+	public static ArrayList getArrayListFromMsgsString(String str) throws SandeshaException {
+
+		if (str == null || "".equals(str))
+			return new ArrayList();
+
+		ArrayList retArr = new ArrayList();
+
+		StringTokenizer tokenizer = new StringTokenizer(str, ",");
+
 		while (tokenizer.hasMoreElements()) {
 			String nextToken = tokenizer.nextToken();
-			if (nextToken!=null && !"".equals(nextToken)) {
-				Long lng = new Long (nextToken);
+			if (nextToken != null && !"".equals(nextToken)) {
+				Long lng = new Long(nextToken);
 				retArr.add(lng);
 			}
 		}
-		
+
 		return retArr;
 	}
-	
-	public static String getInternalSequenceID (String to, String sequenceKey) {
-		if (to==null && sequenceKey==null)
+
+	public static String getInternalSequenceID(String to, String sequenceKey) {
+		if (to == null && sequenceKey == null)
 			return null;
-		else if (to==null) 
+		else if (to == null)
 			return sequenceKey;
-		else if (sequenceKey==null)
+		else if (sequenceKey == null)
 			return to;
-		else 
-			return Sandesha2Constants.INTERNAL_SEQUENCE_PREFIX + ":" + to + ":" +sequenceKey;
+		else
+			return Sandesha2Constants.INTERNAL_SEQUENCE_PREFIX + ":" + to + ":" + sequenceKey;
 	}
-	
-	public static String getInternalSequenceID (String sequenceID) {
-			return Sandesha2Constants.INTERNAL_SEQUENCE_PREFIX + ":" + sequenceID;
+
+	public static String getInternalSequenceID(String sequenceID) {
+		return Sandesha2Constants.INTERNAL_SEQUENCE_PREFIX + ":" + sequenceID;
 	}
-	
-	public static String getSequenceIDFromInternalSequenceID (String internalSequenceID, ConfigurationContext configurationContext)  throws SandeshaException {
-		
+
+	public static String getSequenceIDFromInternalSequenceID(String internalSequenceID,
+			ConfigurationContext configurationContext) throws SandeshaException {
+
 		StorageManager storageManager = getSandeshaStorageManager(configurationContext);
 		SequencePropertyBeanMgr sequencePropertyBeanMgr = storageManager.getSequencePropretyBeanMgr();
-		
-		SequencePropertyBean outSequenceBean = sequencePropertyBeanMgr.retrieve(internalSequenceID, Sandesha2Constants.SequenceProperties.OUT_SEQUENCE_ID);
-		
+
+		SequencePropertyBean outSequenceBean = sequencePropertyBeanMgr.retrieve(internalSequenceID,
+				Sandesha2Constants.SequenceProperties.OUT_SEQUENCE_ID);
+
 		String sequeunceID = null;
-		if (outSequenceBean!=null)
+		if (outSequenceBean != null)
 			sequeunceID = outSequenceBean.getValue();
-		
+
 		return sequeunceID;
 	}
-		
-	public static QName getQNameFromString (String qnameStr) throws SandeshaException {
+
+	public static QName getQNameFromString(String qnameStr) throws SandeshaException {
 		String[] parts = qnameStr.split(Sandesha2Constants.QNAME_SEPERATOR);
-		if (!(parts.length==3))
-			throw new SandeshaException ("Invalid QName String");
-		
+		if (!(parts.length == 3))
+			throw new SandeshaException("Invalid QName String");
+
 		if (parts[0].equals(Sandesha2Constants.VALUE_NONE))
-			parts[0]=null;
-		
+			parts[0] = null;
+
 		if (parts[1].equals(Sandesha2Constants.VALUE_NONE))
-			parts[1]=null;
-		
+			parts[1] = null;
+
 		if (parts[2].equals(Sandesha2Constants.VALUE_NONE))
-			parts[2]=null;
-		
+			parts[2] = null;
+
 		if (parts[0].equals(Sandesha2Constants.VALUE_EMPTY))
-			parts[0]="";
-		
+			parts[0] = "";
+
 		if (parts[1].equals(Sandesha2Constants.VALUE_EMPTY))
-			parts[1]="";
-		
+			parts[1] = "";
+
 		if (parts[2].equals(Sandesha2Constants.VALUE_EMPTY))
-			parts[2]="";
-		
+			parts[2] = "";
+
 		String namespace = parts[0];
 		String localPart = parts[1];
 		String prefix = parts[2];
-		
-		QName name = new QName (namespace, localPart,prefix);
+
+		QName name = new QName(namespace, localPart, prefix);
 		return name;
 	}
-	
-	public static String getStringFromQName (QName name) {
+
+	public static String getStringFromQName(QName name) {
 		String localPart = name.getLocalPart();
 		String namespace = name.getNamespaceURI();
 		String prefix = name.getPrefix();
-		
-		if (localPart==null)
+
+		if (localPart == null)
 			localPart = Sandesha2Constants.VALUE_NONE;
 
-		if (namespace==null)
+		if (namespace == null)
 			namespace = Sandesha2Constants.VALUE_NONE;
-		
-		if (prefix==null)
+
+		if (prefix == null)
 			prefix = Sandesha2Constants.VALUE_NONE;
-		
+
 		if ("".equals(localPart))
 			localPart = Sandesha2Constants.VALUE_EMPTY;
 
 		if ("".equals(namespace))
 			namespace = Sandesha2Constants.VALUE_EMPTY;
-		
+
 		if ("".equals(prefix))
 			prefix = Sandesha2Constants.VALUE_EMPTY;
-		
-		String QNameStr = namespace + Sandesha2Constants.QNAME_SEPERATOR + localPart + Sandesha2Constants.QNAME_SEPERATOR 
-								+ prefix;
-		
+
+		String QNameStr = namespace + Sandesha2Constants.QNAME_SEPERATOR + localPart
+				+ Sandesha2Constants.QNAME_SEPERATOR + prefix;
+
 		return QNameStr;
 	}
-	
-	public static String getExecutionChainString (ArrayList executionChain) {
+
+	public static String getExecutionChainString(ArrayList executionChain) {
 		Iterator iter = executionChain.iterator();
-		
+
 		String executionChainStr = "";
 		while (iter.hasNext()) {
 			Handler handler = (Handler) iter.next();
@@ -747,172 +656,196 @@
 			String handlerStr = SandeshaUtil.getStringFromQName(name);
 			executionChainStr = executionChainStr + Sandesha2Constants.EXECUTIN_CHAIN_SEPERATOR + handlerStr;
 		}
-		
+
 		return executionChainStr;
 	}
-	
-	
-	//TODO complete below.
-	public static ArrayList getExecutionChainFromString (String executionChainStr, ConfigurationContext configContext) throws SandeshaException {
+
+	// TODO complete below.
+	public static ArrayList getExecutionChainFromString(String executionChainStr, ConfigurationContext configContext)
+			throws SandeshaException {
 		String[] QNameStrs = executionChainStr.split(Sandesha2Constants.EXECUTIN_CHAIN_SEPERATOR);
-		
+
 		AxisConfiguration axisConfiguration = configContext.getAxisConfiguration();
-		
+
 		int length = QNameStrs.length;
-		for (int i=0;i<length;i++) {
+		for (int i = 0; i < length; i++) {
 			String QNameStr = QNameStrs[i];
 			QName name = getQNameFromString(QNameStr);
-			//axisConfiguration.get
-			
+			// axisConfiguration.get
+
 		}
-		
-		return null;  //not complete yet.
+
+		return null; // not complete yet.
 	}
-	
-	public static void printSOAPEnvelope (SOAPEnvelope envelope, OutputStream out) throws SandeshaException {
+
+	public static void printSOAPEnvelope(SOAPEnvelope envelope, OutputStream out) throws SandeshaException {
 		try {
-			XMLStreamWriter writer =  XMLOutputFactory.newInstance().createXMLStreamWriter(out);
+			XMLStreamWriter writer = XMLOutputFactory.newInstance().createXMLStreamWriter(out);
 			System.out.println("\n");
 			envelope.serialize(writer);
 		} catch (XMLStreamException e) {
-			throw new SandeshaException (e.getMessage());
+			throw new SandeshaException(e.getMessage());
 		} catch (FactoryConfigurationError e) {
-			throw new SandeshaException (e.getMessage());
+			throw new SandeshaException(e.getMessage());
 		}
 	}
-	
+
 	/**
 	 * 
 	 * @param propertyKey
-	 * for the client side - internalSequenceID, for the server side - sequenceID
+	 *            for the client side - internalSequenceID, for the server side -
+	 *            sequenceID
 	 * @param configurationContext
 	 * @return
 	 * @throws SandeshaException
 	 */
-	public static String getRMVersion (String propertyKey, ConfigurationContext configurationContext) throws SandeshaException {
-			StorageManager storageManager = getSandeshaStorageManager(configurationContext);
-			
-			SequencePropertyBeanMgr sequencePropertyBeanMgr = storageManager.getSequencePropretyBeanMgr();
-			SequencePropertyBean specVersionBean = sequencePropertyBeanMgr.retrieve(propertyKey,Sandesha2Constants.SequenceProperties.RM_SPEC_VERSION);
-			
-			if (specVersionBean==null)
-				return null;
-	
-			return specVersionBean.getValue();
-	}
-	
-	
-//	public static boolean isNumberPresentInList (String list, long no) throws SandeshaException {
-//		StringTokenizer tokenizer = new StringTokenizer (list,Sandesha2Constants.LIST_SEPERATOR);
-//		while (tokenizer.hasMoreElements()){
-//			String listPart = tokenizer.nextToken();
-//			if (!"".equals(listPart) && isNumberPresentInListPart(listPart,no))
-//				return true;
-//		}
-//		
-//		return false;
-//	}
-//
-//	public static String putNumberToList (String list, long no) throws SandeshaException {
-//		
-//		StringTokenizer tokenizer = new StringTokenizer (list,Sandesha2Constants.LIST_SEPERATOR);
-//		
-//		boolean present = false;
-//		while (tokenizer.hasMoreElements()){
-//			String listPart = tokenizer.nextToken();
-//			if (!"".equals(listPart) && isNumberPresentInListPart(listPart,no))
-//				present = true;
-//		}
-//		
-//		list = list + Sandesha2Constants.LIST_SEPERATOR + new Long (no).toString();
-//		sortListParts (list);
-//		mergeListParts (list);
-//	}
-//	
-//	private static boolean isNumberPresentInListPart (String listPart, long no) throws SandeshaException {
-//		if (listPart==null || "".equals(listPart))
-//			throw new SandeshaException ("Invalid list part");
-//		
-//		int seperatorPosition = listPart.indexOf(Sandesha2Constants.LIST_PART_SEPERATOR);
-//
-//		try {
-//			if (seperatorPosition<0) {
-//				//this must be a single number
-//				long tempNo = new Long (listPart).longValue();
-//				if (no==tempNo)
-//					return true;
-//				
-//				return false;
-//			} else {
-//				String number1Str = listPart.substring(0,seperatorPosition);
-//				String number2Str = listPart.substring((seperatorPosition+1),listPart.length());
-//				
-//				long number1 = new Long (number1Str).longValue();
-//				long number2 = new Long (number2Str).longValue();
-//				
-//				if (number1>number2)
-//					throw new SandeshaException ("list part have numbers in the wrong order");
-//				
-//				if (no>=number1 && no<=number2)
-//					return true;
-//				
-//				return false;
-//			}
-//		} catch (NumberFormatException e) {
-//			throw new SandeshaException ("Invalid list part",e);
-//		}
-//	}
-//	
-//	private String sortListParts (String list) {
-//		
-//	}
-//	
-//	private String mergeListParts (String list) {
-//		
-//	}
-//	
-//	private void updatePartOfTheList () {
-//		
-//	}
-	
-	public static String getSequenceProperty (String id, String name, ConfigurationContext context) throws SandeshaException {
+	public static String getRMVersion(String propertyKey, ConfigurationContext configurationContext)
+			throws SandeshaException {
+		StorageManager storageManager = getSandeshaStorageManager(configurationContext);
+
+		SequencePropertyBeanMgr sequencePropertyBeanMgr = storageManager.getSequencePropretyBeanMgr();
+		SequencePropertyBean specVersionBean = sequencePropertyBeanMgr.retrieve(propertyKey,
+				Sandesha2Constants.SequenceProperties.RM_SPEC_VERSION);
+
+		if (specVersionBean == null)
+			return null;
+
+		return specVersionBean.getValue();
+	}
+
+	public static String getSequenceProperty(String id, String name, ConfigurationContext context)
+			throws SandeshaException {
 		StorageManager storageManager = SandeshaUtil.getSandeshaStorageManager(context);
 		SequencePropertyBeanMgr sequencePropertyBeanMgr = storageManager.getSequencePropretyBeanMgr();
-		
-		SequencePropertyBean sequencePropertyBean =  sequencePropertyBeanMgr.retrieve(id,name);
-		if (sequencePropertyBean==null)
+
+		SequencePropertyBean sequencePropertyBean = sequencePropertyBeanMgr.retrieve(id, name);
+		if (sequencePropertyBean == null)
 			return null;
 		else
 			return sequencePropertyBean.getValue();
 	}
-	
-	public static boolean isAllMsgsAckedUpto (long highestInMsgNo, String internalSequenceID, ConfigurationContext configCtx) throws SandeshaException {
-		
-		String clientCompletedMessages = getSequenceProperty(internalSequenceID,Sandesha2Constants.SequenceProperties.CLIENT_COMPLETED_MESSAGES,configCtx);
+
+	public static boolean isAllMsgsAckedUpto(long highestInMsgNo, String internalSequenceID,
+			ConfigurationContext configCtx) throws SandeshaException {
+
+		String clientCompletedMessages = getSequenceProperty(internalSequenceID,
+				Sandesha2Constants.SequenceProperties.CLIENT_COMPLETED_MESSAGES, configCtx);
 		ArrayList ackedMsgsList = getArrayListFromString(clientCompletedMessages);
-		
+
 		long smallestMsgNo = 1;
-		for (long tempMsgNo=smallestMsgNo;tempMsgNo<=highestInMsgNo;tempMsgNo++) {
+		for (long tempMsgNo = smallestMsgNo; tempMsgNo <= highestInMsgNo; tempMsgNo++) {
 			if (!ackedMsgsList.contains(new Long(tempMsgNo).toString()))
 				return false;
 		}
-		
-		return true;   //all message upto the highest have been acked.
+
+		return true; // all message upto the highest have been acked.
 	}
-	
-	public static SandeshaPropertyBean getPropretyBean (MessageContext messageCtx) throws SandeshaException {
-		Parameter parameter =  messageCtx.getParameter(Sandesha2Constants.SANDESHA2_POLICY_BEAN);
+
+	public static SandeshaPropertyBean getPropretyBean(MessageContext messageCtx) throws SandeshaException {
+		Parameter parameter = messageCtx.getParameter(Sandesha2Constants.SANDESHA2_POLICY_BEAN);
 		parameter = null;
-		if (parameter==null) {
-			//TODO - get actual values from the module.
+		if (parameter == null) {
+			// TODO - get actual values from the module.
 			log.debug("Property bean not set. Using the default one");
 			SandeshaPropertyBean defaultPropertyBean = PropertyManager.getInstance().getPropertyBean();
 			return defaultPropertyBean;
 		}
-		
-		SandeshaPropertyBean propertyBean = (SandeshaPropertyBean) parameter.getValue ();
+
+		SandeshaPropertyBean propertyBean = (SandeshaPropertyBean) parameter.getValue();
 		return propertyBean;
 	}
-	
-	
+
+	public static String getSequenceIDFromRMMessage(RMMsgContext rmMessageContext) {
+		int messageType = rmMessageContext.getMessageType();
+
+		String sequenceID = null;
+		if (messageType == Sandesha2Constants.MessageTypes.APPLICATION) {
+			Sequence sequence = (Sequence) rmMessageContext.getMessagePart(Sandesha2Constants.MessageParts.SEQUENCE);
+			sequenceID = sequence.getIdentifier().getIdentifier();
+		} else if (messageType == Sandesha2Constants.MessageTypes.ACK) {
+			SequenceAcknowledgement sequenceAcknowledgement = (SequenceAcknowledgement) rmMessageContext
+					.getMessagePart(Sandesha2Constants.MessageParts.SEQ_ACKNOWLEDGEMENT);
+			sequenceID = sequenceAcknowledgement.getIdentifier().getIdentifier();
+		} else if (messageType == Sandesha2Constants.MessageTypes.ACK_REQUEST) {
+			AckRequested ackRequested = (AckRequested) rmMessageContext
+					.getMessagePart(Sandesha2Constants.MessageParts.ACK_REQUEST);
+			sequenceID = ackRequested.getIdentifier().getIdentifier();
+		} else if (messageType == Sandesha2Constants.MessageTypes.CLOSE_SEQUENCE) {
+			CloseSequence closeSequence = (CloseSequence) rmMessageContext
+					.getMessagePart(Sandesha2Constants.MessageParts.CLOSE_SEQUENCE);
+			sequenceID = closeSequence.getIdentifier().getIdentifier();
+		} else if (messageType == Sandesha2Constants.MessageTypes.CLOSE_SEQUENCE_RESPONSE) {
+			CloseSequenceResponse closeSequenceResponse = (CloseSequenceResponse) rmMessageContext
+					.getMessagePart(Sandesha2Constants.MessageParts.CLOSE_SEQUENCE_RESPONSE);
+			sequenceID = closeSequenceResponse.getIdentifier().getIdentifier();
+		}
+
+		// TODO complete for other message types
+
+		return sequenceID;
+	}
+
+	public static SOAPEnvelope createSOAPEnvelopeFromTransportStream(MessageContext msgContext, String soapNamespaceURI)
+			throws AxisFault {
+		InputStream inStream = (InputStream) msgContext.getProperty(MessageContext.TRANSPORT_IN);
+
+		msgContext.setProperty(MessageContext.TRANSPORT_IN, null);
+
+		// this inputstram is set by the TransportSender represents a two way
+		// transport or
+		// by a Transport Recevier
+		if (inStream == null) {
+			throw new AxisFault(Messages.getMessage("inputstreamNull"));
+		}
+
+		return createSOAPMessage(msgContext, inStream, soapNamespaceURI);
+	}
+
+	public static SOAPEnvelope createSOAPMessage(MessageContext msgContext, InputStream inStream,
+			String soapNamespaceURI) throws AxisFault {
+		try {
+			Object contentType;
+
+			StAXBuilder builder;
+			SOAPEnvelope envelope;
+			String charSetEnc = (String) msgContext.getProperty(MessageContext.CHARACTER_SET_ENCODING);
+
+			if (charSetEnc == null) {
+				charSetEnc = MessageContext.DEFAULT_CHAR_SET_ENCODING;
+			}
+			
+			contentType = msgContext.getProperty(MessageContext.CHARACTER_SET_ENCODING);
+			
+
+			if (contentType != null) {
+				msgContext.setDoingMTOM(true);
+				builder = TransportUtils.selectBuilderForMIME(msgContext, inStream, (String) contentType);
+				envelope = (SOAPEnvelope) builder.getDocumentElement();
+			} else if (msgContext.isDoingREST()) {
+				XMLStreamReader xmlreader = XMLInputFactory.newInstance().createXMLStreamReader(inStream, charSetEnc);
+				SOAPFactory soapFactory = new SOAP11Factory();
+
+				builder = new StAXOMBuilder(xmlreader);
+				builder.setOmbuilderFactory(soapFactory);
+				envelope = soapFactory.getDefaultEnvelope();
+				envelope.getBody().addChild(builder.getDocumentElement());
+
+				// We now have the message inside an envolope. However, this is
+				// only an OM; We need to build a SOAP model from it.
+
+				builder = new StAXSOAPModelBuilder(envelope.getXMLStreamReader(), soapNamespaceURI);
+				envelope = (SOAPEnvelope) builder.getDocumentElement();
+			} else {
+				XMLStreamReader xmlreader = XMLInputFactory.newInstance().createXMLStreamReader(inStream, charSetEnc);
+
+				builder = new StAXSOAPModelBuilder(xmlreader, soapNamespaceURI);
+				envelope = (SOAPEnvelope) builder.getDocumentElement();
+			}
+
+			return envelope;
+		} catch (Exception e) {
+			throw new AxisFault(e);
+		}
+	}
+
 }

Modified: webservices/sandesha/trunk/src/org/apache/sandesha2/util/SequenceManager.java
URL: http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/util/SequenceManager.java?rev=390319&r1=390318&r2=390319&view=diff
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/util/SequenceManager.java (original)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/util/SequenceManager.java Thu Mar 30 20:15:07 2006
@@ -11,6 +11,7 @@
 import javax.xml.namespace.QName;
 
 import org.apache.axis2.AxisFault;
+import org.apache.axis2.addressing.AddressingConstants;
 import org.apache.axis2.addressing.EndpointReference;
 import org.apache.axis2.context.ConfigurationContext;
 import org.apache.axis2.context.MessageContext;
@@ -26,6 +27,8 @@
 import org.apache.sandesha2.RMMsgContext;
 import org.apache.sandesha2.Sandesha2Constants;
 import org.apache.sandesha2.SandeshaException;
+import org.apache.sandesha2.SpecSpecificConstants;
+import org.apache.sandesha2.Sandesha2Constants.WSA;
 import org.apache.sandesha2.client.Sandesha2ClientAPI;
 import org.apache.sandesha2.policy.RMPolicyBean;
 import org.apache.sandesha2.storage.StorageManager;
@@ -93,6 +96,15 @@
 		SequencePropertyBean receivedMsgBean = new SequencePropertyBean(
 				sequenceId, Sandesha2Constants.SequenceProperties.SERVER_COMPLETED_MESSAGES, "");
 		
+		
+		//setting the addressing version
+		String addressingNamespaceValue = createSequenceMsg.getAddressingNamespaceValue();
+		SequencePropertyBean addressingNamespaceBean = new SequencePropertyBean (
+				sequenceId,Sandesha2Constants.SequenceProperties.ADDRESSING_NAMESPACE_VALUE,addressingNamespaceValue);
+		seqPropMgr.insert(addressingNamespaceBean);
+		
+		String anonymousURI = SpecSpecificConstants.getAddressingAnonymousURI(addressingNamespaceValue);
+		
 		//If no replyTo value. Send responses as sync.
 		SequencePropertyBean toBean = null;
 		if (replyTo!=null) {
@@ -100,7 +112,7 @@
 				Sandesha2Constants.SequenceProperties.TO_EPR, replyTo.getAddress());
 		}else {
 			toBean = new SequencePropertyBean(sequenceId,
-					Sandesha2Constants.SequenceProperties.TO_EPR, Sandesha2Constants.WSA.NS_URI_ANONYMOUS);
+					Sandesha2Constants.SequenceProperties.TO_EPR, anonymousURI);
 		}
 		
 		SequencePropertyBean replyToBean = new SequencePropertyBean(sequenceId,
@@ -121,12 +133,9 @@
 		
 		// message to invoke. This will apply for only in-order invocations.
 
-		
 		SandeshaUtil.startSenderForTheSequence(configurationContext,sequenceId);
 		
-
-		
-		//getting SPEC version for this sequence.
+		//stting the RM SPEC version for this sequence.
 		String createSequenceMsgAction = createSequenceMsg.getWSAAction();
 		if (createSequenceMsgAction==null)
 		    throw new SandeshaException ("Create sequence message does not have the WSA:Action value");
@@ -151,8 +160,6 @@
 		
 		//TODO get the SOAP version from the create seq message.
 		
-		
-		
 		return sequenceId;
 	}
 
@@ -173,6 +180,31 @@
 		SequencePropertyBeanMgr seqPropMgr = storageManager
 				.getSequencePropretyBeanMgr();
 
+		//setting the addressing version
+		String addressingNamespace = (String) firstAplicationMsgCtx.getProperty(AddressingConstants.WS_ADDRESSING_VERSION);
+		
+		if (addressingNamespace==null) {
+			OperationContext opCtx = firstAplicationMsgCtx.getOperationContext();
+			if (opCtx!=null) {
+				try {
+					MessageContext requestMsg = opCtx.getMessageContext(OperationContextFactory.MESSAGE_LABEL_IN_VALUE);
+					if (requestMsg!=null)
+						addressingNamespace = (String) requestMsg.getProperty(AddressingConstants.WS_ADDRESSING_VERSION);
+				} catch (AxisFault e) {
+					throw new SandeshaException (e);
+				}
+			}
+		}
+		
+		if (addressingNamespace==null)
+			addressingNamespace = AddressingConstants.Final.WSA_NAMESPACE;   //defaults to Final. Make sure this is synchronized with addressing.
+		
+		SequencePropertyBean addressingNamespaceBean = new SequencePropertyBean (
+				internalSequenceId,Sandesha2Constants.SequenceProperties.ADDRESSING_NAMESPACE_VALUE,addressingNamespace);
+		seqPropMgr.insert(addressingNamespaceBean);
+		
+		String anonymousURI = SpecSpecificConstants.getAddressingAnonymousURI(addressingNamespace);
+		
 		EndpointReference toEPR = firstAplicationMsgCtx.getTo();
 		String acksTo = (String) firstAplicationMsgCtx
 				.getProperty(Sandesha2ClientAPI.AcksTo);
@@ -217,7 +249,7 @@
 		}
 		//Default value for acksTo is anonymous  (this happens only for the client side)
 		if (acksTo==null) {
-			acksTo = Sandesha2Constants.WSA.NS_URI_ANONYMOUS;
+			acksTo = anonymousURI;
 		}
 		
 	    acksToBean = new SequencePropertyBean(
@@ -225,7 +257,7 @@
 				acksTo);
 	    
 		//start the in listner for the client side, if acksTo is not anonymous.
-		if (!firstAplicationMsgCtx.isServerSide()  && !Sandesha2Constants.WSA.NS_URI_ANONYMOUS.equals(acksTo)) {
+		if (!firstAplicationMsgCtx.isServerSide()  && !anonymousURI.equals(acksTo)) {
 		    
 			String transportInProtocol = firstAplicationMsgCtx.getOptions().getTransportInProtocol();
 		    if (transportInProtocol==null) {
@@ -281,11 +313,11 @@
 		
 		SandeshaUtil.startSenderForTheSequence(configurationContext,internalSequenceId);
 		
-		updateClientSideListnerIfNeeded (firstAplicationMsgCtx);
+		updateClientSideListnerIfNeeded (firstAplicationMsgCtx,anonymousURI);
 		
 	}
 	
-	private static void updateClientSideListnerIfNeeded (MessageContext messageContext) throws SandeshaException {
+	private static void updateClientSideListnerIfNeeded (MessageContext messageContext, String addressingAnonymousURI) throws SandeshaException {
 		if (messageContext.isServerSide())
 			return;   //listners are updated only for the client side.
 		
@@ -297,7 +329,7 @@
 		boolean startListnerForAsyncAcks = false;
 		boolean startListnerForAsyncControlMsgs = false;   //For async createSerRes & terminateSeq.
 		
-		if (acksTo!=null && !Sandesha2Constants.WSA.NS_URI_ANONYMOUS.equals(acksTo)) {
+		if (acksTo!=null && !addressingAnonymousURI.equals(acksTo)) {
 			//starting listner for async acks.
 			startListnerForAsyncAcks = true;
 		}
@@ -309,14 +341,7 @@
 		
 		try {
 			if ((startListnerForAsyncAcks || startListnerForAsyncControlMsgs) && transportInProtocol==null)
-				throw new SandeshaException ("Cant start the listner since the TransportInProtocol is not set.");
-
-//			if (startListnerForAsyncAcks)
-//				ListenerManager.makeSureStarted(messageContext.getOptions().getTransportInProtocol(),messageContext.getConfigurationContext());
-//		
-//			if (startListnerForAsyncControlMsgs)
-//				ListenerManager.makeSureStarted(messageContext.getOptions().getTransportInProtocol(),messageContext.getConfigurationContext());
-							
+				throw new SandeshaException ("Cant start the listner since the TransportInProtocol is not set.");		
 			
 		} catch (AxisFault e) {
 			String message = "Cant start the listner for incoming messages";
@@ -338,15 +363,6 @@
 		//Transaction lastActivatedTransaction = storageManager.getTransaction();
 		SequencePropertyBeanMgr sequencePropertyBeanMgr = storageManager.getSequencePropretyBeanMgr();
 		
-//		SequencePropertyBean internalSequenceFindBean = new SequencePropertyBean (sequenceID,Sandesha2Constants.SequenceProperties.INTERNAL_SEQUENCE_ID,null);
-//		SequencePropertyBean internalSequenceBean = sequencePropertyBeanMgr.findUnique(internalSequenceFindBean);
-//		if (internalSequenceBean==null) {
-//			String message = "InternalSequenceBean is not set";
-//			log.error(message);
-//			throw new SandeshaException (message);
-//		}
-//		
-//		String internalSequenceID = internalSequenceBean.getValue();
 		SequencePropertyBean lastActivatedBean = sequencePropertyBeanMgr.retrieve(sequenceID, Sandesha2Constants.SequenceProperties.LAST_ACTIVATED_TIME);
 		
 		boolean added = false;
@@ -486,28 +502,6 @@
 		transaction.commit();
 		return false;
 	}
-	
-//	public static long getIncomingSequenceAckedMessageCount (String sequenceID, ConfigurationContext configurationContext) throws SandeshaException {
-//		StorageManager storageManager = SandeshaUtil.getSandeshaStorageManager(configurationContext);
-//		Transaction transaction = storageManager.getTransaction();
-//		SequencePropertyBeanMgr seqPropBeanMgr = storageManager.getSequencePropretyBeanMgr();
-//		
-//		SequencePropertyBean receivedMsgsBean = seqPropBeanMgr.retrieve(sequenceID, Sandesha2Constants.SequenceProperties.COMPLETED_MESSAGES);
-//		
-//		//we should be able to assume that all the received messages has been acked.
-//		String receivedMsgsStr = receivedMsgsBean.getValue();
-//
-//		StringTokenizer tokenizer = new StringTokenizer (receivedMsgsStr,",");
-//		
-//		long count = 0;
-//		while (tokenizer.hasMoreTokens()) {
-//			String temp = tokenizer.nextToken();
-//			count++;
-//		}
-//
-//		transaction.commit();
-//		return count;
-//	}
 	
 	public static boolean isIncomingSequenceCompleted (String sequenceID, ConfigurationContext configurationContext) throws SandeshaException {
 		

Modified: webservices/sandesha/trunk/src/org/apache/sandesha2/workers/InOrderInvoker.java
URL: http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/workers/InOrderInvoker.java?rev=390319&r1=390318&r2=390319&view=diff
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/workers/InOrderInvoker.java (original)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/workers/InOrderInvoker.java Thu Mar 30 20:15:07 2006
@@ -219,8 +219,6 @@
 								break currentIteration;
 							}
 						}
-						
-						
 					}
 
 					if (invoked) {

Modified: webservices/sandesha/trunk/src/org/apache/sandesha2/workers/Sender.java
URL: http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/workers/Sender.java?rev=390319&r1=390318&r2=390319&view=diff
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/workers/Sender.java (original)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/workers/Sender.java Thu Mar 30 20:15:07 2006
@@ -17,19 +17,23 @@
 package org.apache.sandesha2.workers;
 
 import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
 
+import javax.xml.namespace.QName;
+
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.soap.SOAPEnvelope;
+import org.apache.axiom.soap.SOAPHeader;
+import org.apache.axiom.soap.SOAPHeaderBlock;
 import org.apache.axis2.AxisFault;
+import org.apache.axis2.addressing.AddressingConstants;
 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.TransportOutDescription;
 import org.apache.axis2.engine.AxisEngine;
 import org.apache.axis2.transport.TransportSender;
-import org.apache.axis2.transport.TransportUtils;
+import org.apache.axis2.transport.http.HTTPConstants;
+import org.apache.axis2.util.threadpool.ThreadPool;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.sandesha2.AcknowledgementManager;
@@ -48,7 +52,6 @@
 import org.apache.sandesha2.util.SequenceManager;
 import org.apache.sandesha2.wsrm.Sequence;
 import org.apache.sandesha2.wsrm.TerminateSequence;
-import org.apache.axiom.soap.SOAPEnvelope;
 
 /**
  * This is responsible for sending and re-sending messages of Sandesha2. This
@@ -65,6 +68,7 @@
 	private ArrayList workingSequences = new ArrayList();
 	private ConfigurationContext context = null;
 	private Log log = LogFactory.getLog(getClass());
+	private ThreadPool threadPool = new ThreadPool ();
 
 	public synchronized void stopSenderForTheSequence(String sequenceID) {
 		workingSequences.remove(sequenceID);
@@ -93,6 +97,15 @@
 		while (runSender) {
 
 			try {
+				Thread.sleep(Sandesha2Constants.SENDER_SLEEP_TIME);
+			} catch (InterruptedException e1) {
+				// e1.printStackTrace();
+				log.debug("Sender was interupted...");
+				log.debug(e1.getMessage());
+				log.debug("End printing Interrupt...");
+			}
+			
+			try {
 				if (context == null) {
 					String message = "Can't continue the Sender. Context is null";
 					log.debug(message);
@@ -102,188 +115,139 @@
 				Transaction pickMessagesToSendTransaction = storageManager.getTransaction();
 
 				SenderBeanMgr mgr = storageManager.getRetransmitterBeanMgr();
-				Collection coll = mgr.findMsgsToSend();
-				if (coll.size() == 0 && stopSenderAfterWork) {
-					runSender = false;
+				SenderBean senderBean = mgr.getNextMsgToSend();
+				if (senderBean==null) {
 					pickMessagesToSendTransaction.commit();
 					continue;
-				}
-
+			    }
+				
+				MessageRetransmissionAdjuster retransmitterAdjuster = new MessageRetransmissionAdjuster();
+				retransmitterAdjuster.adjustRetransmittion(senderBean, context);
+				
 				pickMessagesToSendTransaction.commit();
+				
+				String key = (String) senderBean.getMessageContextRefKey();
+				MessageContext msgCtx = storageManager.retrieveMessageContext(key, context);
 
-				Iterator iter = coll.iterator();
+				if (msgCtx == null) {
+					String message = "Message context is not present in the storage";
+				}
 
-				while (iter.hasNext()) {
+				// sender will not send the message if following property is
+				// set and not true.
+				// But it will set if it is not set (null)
 
-					SenderBean bean = (SenderBean) iter.next();
-					String key = (String) bean.getMessageContextRefKey();
-					MessageContext msgCtx = storageManager
-							.retrieveMessageContext(key, context);
+				// This is used to make sure that the mesage get passed the Sandesha2TransportSender.
 
-					if (msgCtx == null) {
-						String message = "Message context is not present in the storage";
-					}
-					// sender will not send the message if following property is
-					// set and not true.
-					// But it will set if it is not set (null)
-
-					// This is used to make sure that the mesage get passed the Sandesha2TransportSender.
-
-					String qualifiedForSending = (String) msgCtx
-							.getProperty(Sandesha2Constants.QUALIFIED_FOR_SENDING);
-					if (qualifiedForSending != null
-							&& !qualifiedForSending.equals(Sandesha2Constants.VALUE_TRUE)) {
-						continue;
-					}
-
-					if (msgCtx == null) {
-						log.debug("ERROR: Sender has an Unavailable Message entry");
-						break;
-					}
+				String qualifiedForSending = (String) msgCtx.getProperty(Sandesha2Constants.QUALIFIED_FOR_SENDING);
+				if (qualifiedForSending != null && !qualifiedForSending.equals(Sandesha2Constants.VALUE_TRUE)) {
+					continue;
+				}
 
-					RMMsgContext rmMsgCtx = MsgInitializer
-							.initializeMessage(msgCtx);
+				if (msgCtx == null) {
+					log.debug("ERROR: Sender has an Unavailable Message entry");
+					break;
+				}
 
-					// skip sending if this message has been mentioned as a
-					// message not to send (within sandesha2.properties)
-					ArrayList msgsNotToSend = PropertyManager.getInstance().getMessagesNotToSend();
-
-					if (msgsNotToSend != null
-							&& msgsNotToSend.contains(new Integer(rmMsgCtx.getMessageType()))) {
-						continue;
-					}
+				RMMsgContext rmMsgCtx = MsgInitializer.initializeMessage(msgCtx);
 
-					updateMessage(msgCtx);
+				// skip sending if this message has been mentioned as a
+				// message not to send (within sandesha2.properties)
+				ArrayList msgsNotToSend = PropertyManager.getInstance().getMessagesNotToSend();
 
-					log.info("Sender is sending a '"
-							+ SandeshaUtil.getMessageTypeString(rmMsgCtx
-									.getMessageType()) + "' message.");
-
-					Transaction preSendTransaction = storageManager
-							.getTransaction();
-
-					int messageType = rmMsgCtx.getMessageType();
-
-					if (messageType == Sandesha2Constants.MessageTypes.APPLICATION) {
-						Sequence sequence = (Sequence) rmMsgCtx.getMessagePart(Sandesha2Constants.MessageParts.SEQUENCE);
-						String sequenceID = sequence.getIdentifier().getIdentifier();
-						// checking weather the sequence has been timed out.
-						boolean sequenceTimedOut = SequenceManager.hasSequenceTimedOut(sequenceID, rmMsgCtx);
-						if (sequenceTimedOut) {
-							// sequence has been timed out.
-							// do time out processing.
-
-							// TODO uncomment below line
-							TerminateManager.timeOutSendingSideSequence(context,sequenceID, msgCtx.isServerSide());
-
-							String message = "Sequence timed out";
-							log.debug(message);
-							throw new SandeshaException(message);
-						}
-
-						// piggybacking if an ack if available for the same sequence.
-						//TODO do piggybacking based on wsa:To
-						AcknowledgementManager.piggybackAckIfPresent(rmMsgCtx);
+				if (msgsNotToSend != null && msgsNotToSend.contains(new Integer(rmMsgCtx.getMessageType()))) {
+					continue;
+				}
+				
+				updateMessage(msgCtx);
+				log.info("Sender is sending a '" + SandeshaUtil.getMessageTypeString(rmMsgCtx.getMessageType()) + "' message.");
+				
+				Transaction preSendTransaction = storageManager.getTransaction();
+
+				int messageType = rmMsgCtx.getMessageType();
+				if (messageType == Sandesha2Constants.MessageTypes.APPLICATION) {
+					Sequence sequence = (Sequence) rmMsgCtx.getMessagePart(Sandesha2Constants.MessageParts.SEQUENCE);
+					String sequenceID = sequence.getIdentifier().getIdentifier();
+					// checking weather the sequence has been timed out.
+					boolean sequenceTimedOut = SequenceManager.hasSequenceTimedOut(sequenceID, rmMsgCtx);
+					if (sequenceTimedOut) {
+						// sequence has been timed out.
+						// do time out processing.
+						// TODO uncomment below line
+						TerminateManager.timeOutSendingSideSequence(context,sequenceID, msgCtx.isServerSide());
+						String message = "Sequence timed out";
+						log.debug(message);
+						throw new SandeshaException(message);
 					}
-
-					preSendTransaction.commit();
-
-					//sending the message
-					TransportOutDescription transportOutDescription = msgCtx
-							.getTransportOut();
-					TransportSender transportSender = transportOutDescription
-							.getSender();
+				}
+				
+				//checking weather this message can carry piggybacked acks
+				if (isAckPiggybackableMsgType(messageType) && !isAckAlreadyPiggybacked(rmMsgCtx)) {
+					// piggybacking if an ack if available for the same sequence.
+					//TODO do piggybacking based on wsa:To
+					AcknowledgementManager.piggybackAcksIfPresent(rmMsgCtx);
+				}
+				
+				preSendTransaction.commit();
+				
+				//sending the message
+				TransportOutDescription transportOutDescription = msgCtx.getTransportOut();
+				TransportSender transportSender = transportOutDescription.getSender();
 					
-					boolean successfullySent = false;
-					if (transportSender != null) {
-						try {
-							transportSender.invoke(msgCtx);
-							successfullySent = true;
-						} catch (AxisFault e) {
-							// TODO Auto-generated catch block
-						    log.debug("Could not send message");
-							log.debug(e.getStackTrace().toString());
-						}
-					}
-
-					Transaction postSendTransaction = storageManager.getTransaction();
-
-					MessageRetransmissionAdjuster retransmitterAdjuster = new MessageRetransmissionAdjuster();
-					retransmitterAdjuster.adjustRetransmittion(bean, context);
-
-					// update or delete only if the object is still present.
-					SenderBean bean1 = mgr.retrieve(bean.getMessageID());
-					if (bean1 != null) {
-						if (bean.isReSend()) {
-							bean1.setSentCount(bean.getSentCount());
-							bean1.setTimeToSend(bean.getTimeToSend());
-
-							mgr.update(bean1);
-						} else
-							mgr.delete(bean1.getMessageID());
+				boolean successfullySent = false;
+				if (transportSender != null) {
+					try {
+						
+						//TODO change this to cater for security.
+						transportSender.invoke(msgCtx);
+						successfullySent = true;
+					} catch (AxisFault e) {
+						// TODO Auto-generated catch block
+					    log.debug("Could not send message");
+						log.debug(e.getStackTrace().toString());
 					}
+				}
 
-					postSendTransaction.commit(); // commiting the current transaction
+				Transaction postSendTransaction = storageManager.getTransaction();
 
-					if (successfullySent) {
-						if (!msgCtx.isServerSide())
-							checkForSyncResponses(msgCtx);
-					}
+				// update or delete only if the object is still present.
+				SenderBean bean1 = mgr.retrieve(senderBean.getMessageID());
+				if (bean1 != null) {
+					if (senderBean.isReSend()) {
+						bean1.setSentCount(senderBean.getSentCount());
+						bean1.setTimeToSend(senderBean.getTimeToSend());
+						mgr.update(bean1);
+					} else
+						mgr.delete(bean1.getMessageID());
+				}
 
-					Transaction terminateCleaningTransaction = storageManager
-							.getTransaction();
-					if (rmMsgCtx.getMessageType() == Sandesha2Constants.MessageTypes.TERMINATE_SEQ) {
-						// terminate sending side.
-						TerminateSequence terminateSequence = (TerminateSequence) rmMsgCtx
-								.getMessagePart(Sandesha2Constants.MessageParts.TERMINATE_SEQ);
-						String sequenceID = terminateSequence.getIdentifier()
-								.getIdentifier();
-						ConfigurationContext configContext = msgCtx
-								.getConfigurationContext();
-						TerminateManager.terminateSendingSide(configContext,sequenceID, msgCtx.isServerSide());
-					}
+				postSendTransaction.commit(); // commiting the current transaction
 
-					terminateCleaningTransaction.commit();
+				if (successfullySent) {
+					if (!msgCtx.isServerSide())
+						checkForSyncResponses(msgCtx);
+				}
 
+				Transaction terminateCleaningTransaction = storageManager.getTransaction();
+				if (rmMsgCtx.getMessageType() == Sandesha2Constants.MessageTypes.TERMINATE_SEQ) {
+					// terminate sending side.
+					TerminateSequence terminateSequence = (TerminateSequence) rmMsgCtx.getMessagePart(Sandesha2Constants.MessageParts.TERMINATE_SEQ);
+					String sequenceID = terminateSequence.getIdentifier().getIdentifier();
+					ConfigurationContext configContext = msgCtx.getConfigurationContext();
+					TerminateManager.terminateSendingSide(configContext,sequenceID, msgCtx.isServerSide());
 				}
 
+				terminateCleaningTransaction.commit();
+				
 			} catch (AxisFault e) {
 				String message = "An Exception was throws in sending";
-				log.debug(message);
-				log.debug(e.getMessage());
+				log.debug(message,e);
 
 				// TODO : when this is the client side throw the exception to
 				// the client when necessary.
 
 			}
-
-			try {
-				Thread.sleep(Sandesha2Constants.SENDER_SLEEP_TIME);
-			} catch (InterruptedException e1) {
-				// e1.printStackTrace();
-				log.debug("Sender was interupted...");
-				log.debug(e1.getMessage());
-				log.debug("End printing Interrupt...");
-			}
-		}
-	}
-
-	private boolean isResponseExpected(RMMsgContext rmMsgCtx) {
-		boolean responseExpected = false;
-
-		if (rmMsgCtx.getMessageType() == Sandesha2Constants.MessageTypes.CREATE_SEQ) {
-			responseExpected = true;
-		}
-		if (rmMsgCtx.getMessageType() == Sandesha2Constants.MessageTypes.APPLICATION) {
-			// a ack may arrive. (not a application response)
-			if (rmMsgCtx.getMessageContext().getAxisOperation()
-					.getMessageExchangePattern().equals(
-							org.apache.wsdl.WSDLConstants.MEP_URI_IN_OUT)) {
-				responseExpected = true;
-			}
 		}
-
-		return true;
 	}
 
 	public synchronized void runSenderForTheSequence(
@@ -319,35 +283,27 @@
 			responseMessageContext.setServerSide(false);
 			responseMessageContext.setConfigurationContext(msgCtx
 					.getConfigurationContext());
-			responseMessageContext
-					.setSessionContext(msgCtx.getSessionContext());
 			responseMessageContext.setTransportIn(msgCtx.getTransportIn());
 			responseMessageContext.setTransportOut(msgCtx.getTransportOut());
 
 			responseMessageContext.setProperty(MessageContext.TRANSPORT_IN,
 					msgCtx.getProperty(MessageContext.TRANSPORT_IN));
-			responseMessageContext
-					.setServiceContext(msgCtx.getServiceContext());
-			responseMessageContext.setServiceGroupContext(msgCtx
-					.getServiceGroupContext());
-
-			// we never expect sync responses. so we can freely create a new
-			// operation context for the incoming RM Specific message.
-			AxisOperation inOnlyOperation =
-				 AxisOperationFactory.getAxisOperation(AxisOperationFactory.MEP_CONSTANT_IN_ONLY);
-		    inOnlyOperation.setRemainingPhasesInFlow(msgCtx.getAxisOperation().getRemainingPhasesInFlow());
-			AxisOperation syncResponseAxisOperation = msgCtx.getAxisOperation();
-		    OperationContext inOnlyOperationContext = new OperationContext (inOnlyOperation);
+			responseMessageContext.setServiceContext(msgCtx.getServiceContext());
+			responseMessageContext.setServiceGroupContext(msgCtx.getServiceGroupContext());
 			
-		    responseMessageContext.setAxisOperation(inOnlyOperation);
-		    responseMessageContext.setOperationContext(inOnlyOperationContext);
-			
-//			//following set the operationContext & the axisOperation of the newIncoming message to those
-//			//of the outGoing message. But does not add the message to the op. context or the AxisOperation.
-//			//Currently opcontext does not allow messages outside the map to be added to it.
-//			responseMessageContext.setAxisOperation(syncResponseAxisOperation);
-//			responseMessageContext
-//					.setOperationContext(syncResponseMsgOperationContext);
+			//copying required properties from op. context to the response msg ctx.
+			OperationContext requestMsgOpCtx = msgCtx.getOperationContext();
+			if (requestMsgOpCtx!=null) {
+			     if (responseMessageContext.getProperty(HTTPConstants.MTOM_RECEIVED_CONTENT_TYPE)!=null) {
+			    	 responseMessageContext.setProperty(HTTPConstants.MTOM_RECEIVED_CONTENT_TYPE,
+			    			 requestMsgOpCtx.getProperty(HTTPConstants.MTOM_RECEIVED_CONTENT_TYPE));
+			     }
+			     
+			     if (responseMessageContext.getProperty(HTTPConstants.CHAR_SET_ENCODING)!=null) {
+			    	 responseMessageContext.setProperty(HTTPConstants.CHAR_SET_ENCODING,
+			    			 requestMsgOpCtx.getProperty(HTTPConstants.CHAR_SET_ENCODING));
+			     }
+			}
 
 			// If request is REST we assume the responseMessageContext is REST,
 			// so set the variable
@@ -356,19 +312,26 @@
 
 			SOAPEnvelope resenvelope = null;
 			try {
-				resenvelope = TransportUtils.createSOAPMessage(
+				resenvelope = SandeshaUtil.createSOAPEnvelopeFromTransportStream (
 						responseMessageContext, msgCtx.getEnvelope().getNamespace()
 								.getName());
 			} catch (AxisFault e) {
 				// TODO Auto-generated catch block
 				log.debug("Valid SOAP envelope not found");
+				log.debug(e.getStackTrace().toString());
 			}
 
 			if (resenvelope != null) {
 				responseMessageContext.setEnvelope(resenvelope);
 				AxisEngine engine = new AxisEngine(msgCtx
 						.getConfigurationContext());
-				engine.receive(responseMessageContext);
+				
+				if (isFaultEnvelope(resenvelope)) {
+					engine.receiveFault(responseMessageContext);
+					System.out.println("Sender Got a fault");
+				}else {
+					engine.receive(responseMessageContext);
+				}
 			} 
 			
 		} catch (Exception e) {
@@ -378,5 +341,40 @@
 
 		}
 	}
-
+	
+	private boolean isAckPiggybackableMsgType(int messageType) {
+		boolean piggybackable = true;
+		
+		if (messageType==Sandesha2Constants.MessageTypes.ACK) 
+			piggybackable = false;
+		
+		return piggybackable;	
+	}
+	
+	private boolean isAckAlreadyPiggybacked (RMMsgContext rmMessageContext) {
+		if (rmMessageContext.getMessagePart(Sandesha2Constants.MessageParts.SEQ_ACKNOWLEDGEMENT)!=null)
+			return true;
+		
+		return false;
+	}
+	
+	private boolean isFaultEnvelope (SOAPEnvelope envelope) throws SandeshaException {
+		SOAPHeader header = envelope.getHeader();
+		
+		OMElement actionElement = header.getFirstChildWithName(new QName (AddressingConstants.Final.WSA_NAMESPACE,AddressingConstants.WSA_ACTION));
+		if (actionElement==null)
+			actionElement = header.getFirstChildWithName(new QName (AddressingConstants.Submission.WSA_NAMESPACE,AddressingConstants.WSA_ACTION));
+		
+		String action = actionElement.getText().trim();
+		
+		if (action==null)
+			throw new SandeshaException ("Given envelope does not contain a wsa:action");
+		
+		if (action.equals(AddressingConstants.Final.WSA_FAULT_ACTION)
+				|| action.equals("http://schemas.xmlsoap.org/ws/2004/08/addressing/fault"))
+			return true;
+		
+		return false;
+	}
+	
 }

Modified: webservices/sandesha/trunk/src/org/apache/sandesha2/wsrm/Accept.java
URL: http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/wsrm/Accept.java?rev=390319&r1=390318&r2=390319&view=diff
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/wsrm/Accept.java (original)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/wsrm/Accept.java Thu Mar 30 20:15:07 2006
@@ -40,18 +40,19 @@
 
 	OMNamespace rmNamespace = null; 
 	
-	String namespaceValue = null;
+	OMNamespace addressingNamespace = null;
 
-	public Accept(SOAPFactory factory, String namespaceValue) throws SandeshaException {
-		if (!isNamespaceSupported(namespaceValue))
+	public Accept(SOAPFactory factory, String rmNamespaceValue, String addressingNamespaceValue) throws SandeshaException {
+		if (!isNamespaceSupported(rmNamespaceValue))
 			throw new SandeshaException ("Unsupported namespace");
 		
 		this.factory = factory;
 		rmNamespace = factory.createOMNamespace(
-				namespaceValue, Sandesha2Constants.WSRM_COMMON.NS_PREFIX_RM);
+				rmNamespaceValue , Sandesha2Constants.WSRM_COMMON.NS_PREFIX_RM);
+		addressingNamespace = factory.createOMNamespace(
+				addressingNamespaceValue , Sandesha2Constants.WSA.NS_PREFIX_ADDRESSING);
 		acceptElement = factory.createOMElement(
 				Sandesha2Constants.WSRM_COMMON.ACCEPT, rmNamespace);
-		this.namespaceValue = namespaceValue;
 	}
 
 	public OMElement getOMElement() throws OMException {
@@ -61,12 +62,12 @@
 	public Object fromOMElement(OMElement element) throws OMException,SandeshaException {
 
 		OMElement acceptPart = element.getFirstChildWithName(new QName(
-				namespaceValue, Sandesha2Constants.WSRM_COMMON.ACCEPT));
+				rmNamespace.getName(), Sandesha2Constants.WSRM_COMMON.ACCEPT));
 		if (acceptPart == null)
 			throw new OMException(
 					"Passed element does not contain an Accept part");
 
-		acksTo = new AcksTo(factory,namespaceValue);
+		acksTo = new AcksTo(factory,rmNamespace.getName(),addressingNamespace.getName());
 		acksTo.fromOMElement(acceptPart);
 
 		acceptElement = factory.createOMElement(

Modified: webservices/sandesha/trunk/src/org/apache/sandesha2/wsrm/AckRequested.java
URL: http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/wsrm/AckRequested.java?rev=390319&r1=390318&r2=390319&view=diff
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/wsrm/AckRequested.java (original)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/wsrm/AckRequested.java Thu Mar 30 20:15:07 2006
@@ -44,7 +44,7 @@
 	private SOAPFactory factory;
 	OMNamespace rmNamespace = null;
 	String namespaceValue = null;
-	private boolean mustUnderstand = true;
+	private boolean mustUnderstand = false;
 
 	public AckRequested(SOAPFactory factory,String namespaceValue) throws SandeshaException {
 		if (!isNamespaceSupported(namespaceValue))

Modified: webservices/sandesha/trunk/src/org/apache/sandesha2/wsrm/AcksTo.java
URL: http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/wsrm/AcksTo.java?rev=390319&r1=390318&r2=390319&view=diff
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/wsrm/AcksTo.java (original)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/wsrm/AcksTo.java Thu Mar 30 20:15:07 2006
@@ -37,22 +37,24 @@
 	private OMElement acksToElement;
 	private SOAPFactory factory;
 	OMNamespace rmNamespace = null;
-	String namespaceValue = null;
+	OMNamespace addressingNamespace = null;
+//	String namespaceValue = null;
 
-	public AcksTo(SOAPFactory factory,String namespaceValue) throws SandeshaException {
-		if (!isNamespaceSupported(namespaceValue))
+	public AcksTo(SOAPFactory factory,String rmNamespaceValue,String addressingNamespaceValue) throws SandeshaException {
+		if (!isNamespaceSupported(rmNamespaceValue))
 			throw new SandeshaException ("Unsupported namespace");
 		
 		this.factory = factory;
-		this.namespaceValue = namespaceValue;
 		rmNamespace = factory.createOMNamespace(
-				namespaceValue, Sandesha2Constants.WSRM_COMMON.NS_PREFIX_RM);
+				rmNamespaceValue, Sandesha2Constants.WSRM_COMMON.NS_PREFIX_RM);
+		addressingNamespace = factory.createOMNamespace(
+				addressingNamespaceValue, Sandesha2Constants.WSA.NS_PREFIX_ADDRESSING);
 		acksToElement = factory.createOMElement(
 				Sandesha2Constants.WSRM_COMMON.ACKS_TO, rmNamespace);
 	}
 	
-	public AcksTo (Address address,SOAPFactory factory,String namespaceValue) throws SandeshaException {
-		this (factory,namespaceValue);
+	public AcksTo (Address address,SOAPFactory factory,String rmNamespaceValue, String addressingNamespaceValue) throws SandeshaException {
+		this (factory,rmNamespaceValue,addressingNamespaceValue);
 		this.address = address;
 	}
 
@@ -62,13 +64,13 @@
 
 	public Object fromOMElement(OMElement element) throws OMException,SandeshaException {
 		OMElement acksToPart = element.getFirstChildWithName(new QName(
-				namespaceValue, Sandesha2Constants.WSRM_COMMON.ACKS_TO));
+				rmNamespace.getName(), Sandesha2Constants.WSRM_COMMON.ACKS_TO));
 
 		if (acksToPart == null)
 			throw new OMException(
 					"Passed element does not contain an acksTo part");
 
-		address = new Address(factory);
+		address = new Address(factory,addressingNamespace.getName());
 		address.fromOMElement(acksToPart);
 
 		acksToElement = factory.createOMElement(
@@ -85,7 +87,7 @@
 			throw new OMException("Cant set AcksTo. Address is null");
 
 		OMElement acksToPart = element.getFirstChildWithName(new QName(
-				Sandesha2Constants.WSA.NS_URI_ADDRESSING, Sandesha2Constants.WSRM_COMMON.ACKS_TO));
+				rmNamespace.getName(), Sandesha2Constants.WSRM_COMMON.ACKS_TO));
 
 		address.toOMElement(acksToElement);
 		element.addChild(acksToElement);

Modified: webservices/sandesha/trunk/src/org/apache/sandesha2/wsrm/Address.java
URL: http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/wsrm/Address.java?rev=390319&r1=390318&r2=390319&view=diff
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/wsrm/Address.java (original)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/wsrm/Address.java Thu Mar 30 20:15:07 2006
@@ -27,26 +27,26 @@
 	EndpointReference epr = null;
 	OMElement addressElement;
 	SOAPFactory factory;
-	OMNamespace rmNamespace = null;
+	OMNamespace addressingNamespace = null;
 
-	public Address(SOAPFactory factory) {
+	public Address(SOAPFactory factory, String addressingNamespaceValue) {
 		
 		this.factory = factory;
-		rmNamespace = factory.createOMNamespace(Sandesha2Constants.WSA.NS_URI_ADDRESSING,
+		addressingNamespace = factory.createOMNamespace(addressingNamespaceValue,
 				Sandesha2Constants.WSA.NS_PREFIX_ADDRESSING);
 		addressElement = factory.createOMElement(
-				Sandesha2Constants.WSA.ADDRESS, rmNamespace);
+				Sandesha2Constants.WSA.ADDRESS, addressingNamespace);
 	}
 	
-	public Address (EndpointReference epr,SOAPFactory factory) {
-		this(factory);
+	public Address (EndpointReference epr,SOAPFactory factory,String addressingNamespaceValue) {
+		this(factory,addressingNamespaceValue);
 		this.epr = epr;
 	}
 
 	public Object fromOMElement(OMElement element) throws OMException {
 
 		OMElement addressPart = element.getFirstChildWithName(new QName(
-				Sandesha2Constants.WSA.NS_URI_ADDRESSING, Sandesha2Constants.WSA.ADDRESS));
+				addressingNamespace.getName(), Sandesha2Constants.WSA.ADDRESS));
 		if (addressPart == null)
 			throw new OMException(
 					"Cant find an Address element in the given part");
@@ -58,7 +58,7 @@
 		addressElement = addressPart;
 		epr = new EndpointReference(addressText);
 		addressElement = factory.createOMElement(
-				Sandesha2Constants.WSA.ADDRESS, rmNamespace);
+				Sandesha2Constants.WSA.ADDRESS, addressingNamespace);
 		return this;
 
 	}
@@ -80,7 +80,7 @@
 		element.addChild(addressElement);
 
 		addressElement = factory.createOMElement(
-				Sandesha2Constants.WSA.ADDRESS, rmNamespace);
+				Sandesha2Constants.WSA.ADDRESS, addressingNamespace);
 
 		return element;
 	}

Modified: webservices/sandesha/trunk/src/org/apache/sandesha2/wsrm/CreateSequence.java
URL: http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/wsrm/CreateSequence.java?rev=390319&r1=390318&r2=390319&view=diff
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/wsrm/CreateSequence.java (original)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/wsrm/CreateSequence.java Thu Mar 30 20:15:07 2006
@@ -43,22 +43,23 @@
 	private SequenceOffer sequenceOffer = null;
 	private SOAPFactory factory;
 	OMNamespace rmNamespace = null;
-	String namespaceValue = null;
+	OMNamespace addressingNamespace = null;
 
-	public CreateSequence(SOAPFactory factory,String namespaceValue) throws SandeshaException {
-		if (!isNamespaceSupported(namespaceValue))
+	public CreateSequence(SOAPFactory factory,String rmNamespaceValue,String addressingNamespaceValue) throws SandeshaException {
+		if (!isNamespaceSupported(rmNamespaceValue))
 			throw new SandeshaException ("Unsupported namespace");
 		
 		this.factory = factory;
-		this.namespaceValue = namespaceValue;
 		rmNamespace = factory.createOMNamespace(
-				namespaceValue, Sandesha2Constants.WSRM_COMMON.NS_PREFIX_RM);
+				rmNamespaceValue, Sandesha2Constants.WSRM_COMMON.NS_PREFIX_RM);
+		addressingNamespace = factory.createOMNamespace(
+				addressingNamespaceValue, Sandesha2Constants.WSA.NS_PREFIX_ADDRESSING);
 		createSequenceElement = factory.createOMElement(
 				Sandesha2Constants.WSRM_COMMON.CREATE_SEQUENCE, rmNamespace);
 	}
 	
-	public CreateSequence (AcksTo acksTo,SOAPFactory factory,String namespaceValue) throws SandeshaException {
-		this (factory,namespaceValue);
+	public CreateSequence (AcksTo acksTo,SOAPFactory factory,String rmNamespaceValue,String addressingNamespaceValue) throws SandeshaException {
+		this (factory,rmNamespaceValue,addressingNamespaceValue);
 		this.acksTo = acksTo;
 	}
 
@@ -69,7 +70,7 @@
 	public Object fromOMElement(OMElement bodyElement) throws OMException,SandeshaException {
 
 		OMElement createSequencePart = bodyElement
-				.getFirstChildWithName(new QName(namespaceValue,
+				.getFirstChildWithName(new QName(rmNamespace.getName(),
 						Sandesha2Constants.WSRM_COMMON.CREATE_SEQUENCE));
 		if (createSequencePart == null)
 			throw new OMException(
@@ -78,22 +79,22 @@
 		createSequenceElement = factory.createOMElement(
 				Sandesha2Constants.WSRM_COMMON.CREATE_SEQUENCE, rmNamespace);
 
-		acksTo = new AcksTo(factory,namespaceValue);
+		acksTo = new AcksTo(factory,rmNamespace.getName(),addressingNamespace.getName());
 		acksTo.fromOMElement(createSequencePart);
 
 		OMElement offerPart = createSequencePart
-				.getFirstChildWithName(new QName(namespaceValue,
+				.getFirstChildWithName(new QName(rmNamespace.getName(),
 						Sandesha2Constants.WSRM_COMMON.SEQUENCE_OFFER));
 		if (offerPart != null) {
-			sequenceOffer = new SequenceOffer(factory,namespaceValue);
+			sequenceOffer = new SequenceOffer(factory,rmNamespace.getName());
 			sequenceOffer.fromOMElement(createSequencePart);
 		}
 
 		OMElement expiresPart = createSequenceElement
-				.getFirstChildWithName(new QName(namespaceValue,
+				.getFirstChildWithName(new QName(rmNamespace.getName(),
 						Sandesha2Constants.WSRM_COMMON.EXPIRES));
 		if (expiresPart != null) {
-			expires = new Expires(factory,namespaceValue);
+			expires = new Expires(factory,rmNamespace.getName());
 			expires.fromOMElement(createSequencePart);
 		}
 
@@ -148,7 +149,7 @@
 		SOAPBody body = envelope.getBody();
 		
 		//detach if already exist.
-		OMElement elem = body.getFirstChildWithName(new QName(namespaceValue,
+		OMElement elem = body.getFirstChildWithName(new QName(rmNamespace.getName(),
 				Sandesha2Constants.WSRM_COMMON.CREATE_SEQUENCE));
 		if (elem!=null)
 			elem.detach();

Modified: webservices/sandesha/trunk/src/org/apache/sandesha2/wsrm/CreateSequenceResponse.java
URL: http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/wsrm/CreateSequenceResponse.java?rev=390319&r1=390318&r2=390319&view=diff
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/wsrm/CreateSequenceResponse.java (original)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/wsrm/CreateSequenceResponse.java Thu Mar 30 20:15:07 2006
@@ -42,20 +42,22 @@
 	private Accept accept;
 	private Expires expires;
 	SOAPFactory factory;
-	OMNamespace createSeqResNoNamespace = null;
-	String namespaceValue = null;
+	OMNamespace rmNamespace = null;
+	OMNamespace addressingNamespace = null;
 
-	public CreateSequenceResponse(SOAPFactory factory, String namespaceValue) throws SandeshaException {
-		if (!isNamespaceSupported(namespaceValue))
+	public CreateSequenceResponse(SOAPFactory factory, String rmNamespaceValue, String addressingNamespaceValue) throws SandeshaException {
+		if (!isNamespaceSupported(rmNamespaceValue))
 			throw new SandeshaException ("Unsupported namespace");
 		
 		this.factory = factory;
-		this.namespaceValue = namespaceValue;
-		createSeqResNoNamespace = factory.createOMNamespace(
-				namespaceValue, Sandesha2Constants.WSRM_COMMON.NS_PREFIX_RM);
+		rmNamespace = factory.createOMNamespace(
+				rmNamespaceValue, Sandesha2Constants.WSRM_COMMON.NS_PREFIX_RM);
+		addressingNamespace = factory.createOMNamespace(
+				addressingNamespaceValue, Sandesha2Constants.WSA.NS_PREFIX_ADDRESSING);
+		
 		createSequenceResponseElement = factory.createOMElement(
 				Sandesha2Constants.WSRM_COMMON.CREATE_SEQUENCE_RESPONSE,
-				createSeqResNoNamespace);
+				rmNamespace);
 	}
 
 	public OMElement getOMElement() throws OMException {
@@ -71,7 +73,7 @@
 		SOAPBody SOAPBody = (SOAPBody) bodyElement;
 
 		OMElement createSeqResponsePart = SOAPBody
-				.getFirstChildWithName(new QName(namespaceValue,
+				.getFirstChildWithName(new QName(rmNamespace.getName(),
 						Sandesha2Constants.WSRM_COMMON.CREATE_SEQUENCE_RESPONSE));
 		if (createSeqResponsePart == null)
 			throw new OMException(
@@ -79,24 +81,24 @@
 
 		createSequenceResponseElement = factory.createOMElement(
 				Sandesha2Constants.WSRM_COMMON.CREATE_SEQUENCE_RESPONSE,
-				createSeqResNoNamespace);
+				rmNamespace);
 
-		identifier = new Identifier(factory,namespaceValue);
+		identifier = new Identifier(factory,rmNamespace.getName());
 		identifier.fromOMElement(createSeqResponsePart);
 
 		OMElement expiresPart = createSeqResponsePart
-				.getFirstChildWithName(new QName(namespaceValue,
+				.getFirstChildWithName(new QName(rmNamespace.getName(),
 						Sandesha2Constants.WSRM_COMMON.EXPIRES));
 		if (expiresPart != null) {
-			expires = new Expires(factory,namespaceValue);
+			expires = new Expires(factory,rmNamespace.getName());
 			expires.fromOMElement(createSeqResponsePart);
 		}
 
 		OMElement acceptPart = createSeqResponsePart
-				.getFirstChildWithName(new QName(namespaceValue,
+				.getFirstChildWithName(new QName(rmNamespace.getName(),
 						Sandesha2Constants.WSRM_COMMON.ACCEPT));
 		if (acceptPart != null) {
-			accept = new Accept(factory,namespaceValue);
+			accept = new Accept(factory,rmNamespace.getName(),addressingNamespace.getName());
 			accept.fromOMElement(createSeqResponsePart);
 		}
 
@@ -132,7 +134,7 @@
 
 		createSequenceResponseElement = factory.createOMElement(
 				Sandesha2Constants.WSRM_COMMON.CREATE_SEQUENCE_RESPONSE,
-				createSeqResNoNamespace);
+				rmNamespace);
 
 		return SOAPBody;
 	}
@@ -165,7 +167,7 @@
 		SOAPBody body = envelope.getBody();
 		
 		//detach if already exist.
-		OMElement elem = body.getFirstChildWithName(new QName(namespaceValue,
+		OMElement elem = body.getFirstChildWithName(new QName(rmNamespace.getName(),
 				Sandesha2Constants.WSRM_COMMON.CREATE_SEQUENCE_RESPONSE));
 		if (elem!=null)
 			elem.detach();



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