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