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/10/07 15:56:17 UTC

svn commit: r453907 - in /webservices/sandesha/trunk/java/src/org/apache/sandesha2: i18n/ msgprocessors/ util/ workers/ wsrm/

Author: chamikara
Date: Sat Oct  7 06:56:17 2006
New Revision: 453907

URL: http://svn.apache.org/viewvc?view=rev&rev=453907
Log:
Added code prevent two SequenceAcknowledgements going for the same sequence in the same message.
Moved Ack sending logic from AckManager to the Application message processor which seems to
be the better place for it.
A bug fix in the SequenceAcknowledgement.

Several other bug fixes.

Modified:
    webservices/sandesha/trunk/java/src/org/apache/sandesha2/i18n/SandeshaMessageKeys.java
    webservices/sandesha/trunk/java/src/org/apache/sandesha2/i18n/resource.properties
    webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java
    webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/AcknowledgementManager.java
    webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/FaultManager.java
    webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/RMMsgCreator.java
    webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SandeshaUtil.java
    webservices/sandesha/trunk/java/src/org/apache/sandesha2/workers/SenderWorker.java
    webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/SequenceAcknowledgement.java

Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/i18n/SandeshaMessageKeys.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/i18n/SandeshaMessageKeys.java?view=diff&rev=453907&r1=453906&r2=453907
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/i18n/SandeshaMessageKeys.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/i18n/SandeshaMessageKeys.java Sat Oct  7 06:56:17 2006
@@ -68,6 +68,7 @@
 	public static final String couldNotCopyParameters="couldNotCopyParameters";
 	public static final String senderBeanNotFound="senderBeanNotFound";
 	public static final String workAlreadyAssigned="workAlreadyAssigned";
+	public static final String workNotPresent="workNotPresent";
 	public static final String cannotSendToTheAddress="cannotSendToTheAddress";
 	
 

Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/i18n/resource.properties
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/i18n/resource.properties?view=diff&rev=453907&r1=453906&r2=453907
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/i18n/resource.properties (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/i18n/resource.properties Sat Oct  7 06:56:17 2006
@@ -62,6 +62,7 @@
 invalidQName=Invalid QName string: {0}
 senderBeanNotFound=SenderBean was not found
 workAlreadyAssigned=Work ''{0}'' is already assigned to a different Worker. Will try the next one
+workNotPresent="SenderWorker has been assigned an unexisting work with the Id ''{0}''
 cannotSendToTheAddress=Message cannot be sent to the address ''{0}'' 
 
 

Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java?view=diff&rev=453907&r1=453906&r2=453907
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java Sat Oct  7 06:56:17 2006
@@ -18,6 +18,8 @@
 package org.apache.sandesha2.msgprocessors;
 
 import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
 
 import javax.xml.namespace.QName;
 
@@ -33,10 +35,12 @@
 import org.apache.axis2.context.OperationContext;
 import org.apache.axis2.context.OperationContextFactory;
 import org.apache.axis2.context.ServiceContext;
+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.wsdl.WSDLConstants.WSDL20_2004Constants;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.sandesha2.RMMsgContext;
@@ -344,16 +348,113 @@
 		if (configCtx == null)
 			throw new SandeshaException(SandeshaMessageHelper.getMessage(SandeshaMessageKeys.configContextNotSet));
 
-		RMMsgContext ackRMMessage = AcknowledgementManager.generateAckMessage(rmMsgCtx, sequencePropertyKey ,sequenceId, storageManager);
-
-		//if the ack is anonymous send it right now.
+		RMMsgContext ackRMMsgCtx = AcknowledgementManager.generateAckMessage(rmMsgCtx, sequencePropertyKey ,sequenceId, storageManager);
+		MessageContext ackMsgCtx = ackRMMsgCtx.getMessageContext();
+		
+		EndpointReference acksTo = ackRMMsgCtx.getTo();
 		
-		EndpointReference to = ackRMMessage.getTo();
-		if (to!=null && SandeshaUtil.isAnonymousURI(to.getAddress())) {
+		if (SandeshaUtil.isAnonymousURI (acksTo.getAddress())) {
+
+			// AxisEngine engine = new
+			// AxisEngine(ackRMMsgCtx.getMessageContext()
+			// .getConfigurationContext());
+
+			// setting CONTEXT_WRITTEN since acksto is anonymous
+			if (rmMsgCtx.getMessageContext().getOperationContext() == null) {
+				// operation context will be null when doing in a GLOBAL
+				// handler.
+
+				AxisOperation op = AxisOperationFactory.getAxisOperation(WSDL20_2004Constants.MEP_CONSTANT_IN_OUT);
+				OperationContext opCtx = new OperationContext(op);
+				rmMsgCtx.getMessageContext().setAxisOperation(op);
+				rmMsgCtx.getMessageContext().setOperationContext(opCtx);
+			}
+
+			rmMsgCtx.getMessageContext().getOperationContext().setProperty(
+					org.apache.axis2.Constants.RESPONSE_WRITTEN, Constants.VALUE_TRUE);
+
+			rmMsgCtx.getMessageContext().setProperty(Sandesha2Constants.ACK_WRITTEN, "true");
+
+			ackRMMsgCtx.getMessageContext().setServerSide(true);
+			
 			AxisEngine engine = new AxisEngine(configCtx);
-			engine.send(ackRMMessage.getMessageContext());
-		}
+			engine.send(ackRMMsgCtx.getMessageContext());
+
+		} else {
+
+			// / Transaction asyncAckTransaction =
+			// storageManager.getTransaction();
+
+			SenderBeanMgr retransmitterBeanMgr = storageManager.getRetransmitterBeanMgr();
 
+			String key = SandeshaUtil.getUUID();
+
+			SenderBean ackBean = new SenderBean();
+			ackBean.setMessageContextRefKey(key);
+			ackBean.setMessageID(ackMsgCtx.getMessageID());
+			ackBean.setReSend(false);
+			ackBean.setSequenceID(sequencePropertyKey);
+			EndpointReference to = ackMsgCtx.getTo();
+			if (to!=null)
+				ackBean.setToAddress(to.getAddress());
+
+			// this will be set to true in the sender.
+			ackBean.setSend(true);
+
+			ackMsgCtx.setProperty(Sandesha2Constants.QUALIFIED_FOR_SENDING, Sandesha2Constants.VALUE_FALSE);
+
+			ackBean.setMessageType(Sandesha2Constants.MessageTypes.ACK);
+			long ackInterval = SandeshaUtil.getPropertyBean(rmMsgCtx.getMessageContext().getAxisOperation())
+					.getAcknowledgementInterval();
+
+			// Ack will be sent as stand alone, only after the retransmitter
+			// interval.
+			long timeToSend = System.currentTimeMillis() + ackInterval;
+
+			// removing old acks.
+			SenderBean findBean = new SenderBean();
+			findBean.setMessageType(Sandesha2Constants.MessageTypes.ACK);
+
+			// this will be set to true in the sandesha2TransportSender.
+			findBean.setSend(true);
+			findBean.setReSend(false);
+			Collection coll = retransmitterBeanMgr.find(findBean);
+			Iterator it = coll.iterator();
+
+			if (it.hasNext()) {
+				SenderBean oldAckBean = (SenderBean) it.next();
+				timeToSend = oldAckBean.getTimeToSend(); // If there is an
+															// old ack. This ack
+															// will be sent in
+															// the old
+															// timeToSend.
+
+				// removing the retransmitted entry for the oldAck
+				retransmitterBeanMgr.delete(oldAckBean.getMessageID());
+
+				// removing the message store entry for the old ack
+				storageManager.removeMessageContext(oldAckBean.getMessageContextRefKey());
+			}
+
+			ackBean.setTimeToSend(timeToSend);
+			storageManager.storeMessageContext(key, ackMsgCtx);
+
+			ackMsgCtx.setProperty(Sandesha2Constants.QUALIFIED_FOR_SENDING, Sandesha2Constants.VALUE_FALSE);
+			
+			// inserting the new ack.
+			retransmitterBeanMgr.insert(ackBean);
+			// / asyncAckTransaction.commit();
+
+			// passing the message through sandesha2sender
+			ackMsgCtx.setProperty(Sandesha2Constants.SET_SEND_TO_TRUE, Sandesha2Constants.VALUE_TRUE);
+			ackRMMsgCtx = MsgInitializer.initializeMessage(ackMsgCtx);
+			
+			SandeshaUtil.executeAndStore(ackRMMsgCtx, key);
+			
+			SandeshaUtil.startSenderForTheSequence(ackRMMsgCtx.getConfigurationContext(), sequenceId);
+		}
+		
+		
 		if (log.isDebugEnabled())
 			log.debug("Exit: ApplicationMsgProcessor::sendAckIfNeeded");
 	}

Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/AcknowledgementManager.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/AcknowledgementManager.java?view=diff&rev=453907&r1=453906&r2=453907
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/AcknowledgementManager.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/AcknowledgementManager.java Sat Oct  7 06:56:17 2006
@@ -275,107 +275,8 @@
 
 		String addressingNamespaceURI = SandeshaUtil.getSequenceProperty(sequencePropertyKey,
 				Sandesha2Constants.SequenceProperties.ADDRESSING_NAMESPACE_VALUE, storageManager);
-		String anonymousURI = SpecSpecificConstants.getAddressingAnonymousURI(addressingNamespaceURI);
 
 		ackMsgCtx.setProperty(AddressingConstants.WS_ADDRESSING_VERSION, addressingNamespaceURI);
-
-		if (anonymousURI.equals(acksTo.getAddress())) {
-
-			// AxisEngine engine = new
-			// AxisEngine(ackRMMsgCtx.getMessageContext()
-			// .getConfigurationContext());
-
-			// setting CONTEXT_WRITTEN since acksto is anonymous
-			if (referenceRMMessage.getMessageContext().getOperationContext() == null) {
-				// operation context will be null when doing in a GLOBAL
-				// handler.
-
-				AxisOperation op = AxisOperationFactory.getAxisOperation(WSDL20_2004Constants.MEP_CONSTANT_IN_OUT);
-				OperationContext opCtx = new OperationContext(op);
-				referenceRMMessage.getMessageContext().setAxisOperation(op);
-				referenceRMMessage.getMessageContext().setOperationContext(opCtx);
-			}
-
-			referenceRMMessage.getMessageContext().getOperationContext().setProperty(
-					org.apache.axis2.Constants.RESPONSE_WRITTEN, Constants.VALUE_TRUE);
-
-			referenceRMMessage.getMessageContext().setProperty(Sandesha2Constants.ACK_WRITTEN, "true");
-
-			ackRMMsgCtx.getMessageContext().setServerSide(true);
-
-		} else {
-
-			// / Transaction asyncAckTransaction =
-			// storageManager.getTransaction();
-
-			SenderBeanMgr retransmitterBeanMgr = storageManager.getRetransmitterBeanMgr();
-
-			String key = SandeshaUtil.getUUID();
-
-			SenderBean ackBean = new SenderBean();
-			ackBean.setMessageContextRefKey(key);
-			ackBean.setMessageID(ackMsgCtx.getMessageID());
-			ackBean.setReSend(false);
-			ackBean.setSequenceID(sequencePropertyKey);
-			EndpointReference to = ackMsgCtx.getTo();
-			if (to!=null)
-				ackBean.setToAddress(to.getAddress());
-
-			// this will be set to true in the sender.
-			ackBean.setSend(true);
-
-			ackMsgCtx.setProperty(Sandesha2Constants.QUALIFIED_FOR_SENDING, Sandesha2Constants.VALUE_FALSE);
-
-			ackBean.setMessageType(Sandesha2Constants.MessageTypes.ACK);
-			long ackInterval = SandeshaUtil.getPropertyBean(referenceMsg.getAxisOperation())
-					.getAcknowledgementInterval();
-
-			// Ack will be sent as stand alone, only after the retransmitter
-			// interval.
-			long timeToSend = System.currentTimeMillis() + ackInterval;
-
-			// removing old acks.
-			SenderBean findBean = new SenderBean();
-			findBean.setMessageType(Sandesha2Constants.MessageTypes.ACK);
-
-			// this will be set to true in the sandesha2TransportSender.
-			findBean.setSend(true);
-			findBean.setReSend(false);
-			Collection coll = retransmitterBeanMgr.find(findBean);
-			Iterator it = coll.iterator();
-
-			if (it.hasNext()) {
-				SenderBean oldAckBean = (SenderBean) it.next();
-				timeToSend = oldAckBean.getTimeToSend(); // If there is an
-															// old ack. This ack
-															// will be sent in
-															// the old
-															// timeToSend.
-
-				// removing the retransmitted entry for the oldAck
-				retransmitterBeanMgr.delete(oldAckBean.getMessageID());
-
-				// removing the message store entry for the old ack
-				storageManager.removeMessageContext(oldAckBean.getMessageContextRefKey());
-			}
-
-			ackBean.setTimeToSend(timeToSend);
-			storageManager.storeMessageContext(key, ackMsgCtx);
-
-			ackMsgCtx.setProperty(Sandesha2Constants.QUALIFIED_FOR_SENDING, Sandesha2Constants.VALUE_FALSE);
-			
-			// inserting the new ack.
-			retransmitterBeanMgr.insert(ackBean);
-			// / asyncAckTransaction.commit();
-
-			// passing the message through sandesha2sender
-			ackMsgCtx.setProperty(Sandesha2Constants.SET_SEND_TO_TRUE, Sandesha2Constants.VALUE_TRUE);
-			ackRMMsgCtx = MsgInitializer.initializeMessage(ackMsgCtx);
-			
-			SandeshaUtil.executeAndStore(ackRMMsgCtx, key);
-			
-			SandeshaUtil.startSenderForTheSequence(configurationContext, sequenceId);
-		}
 
 		if (log.isDebugEnabled())
 			log.debug("Exit: AcknowledgementManager::generateAckMessage");

Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/FaultManager.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/FaultManager.java?view=diff&rev=453907&r1=453906&r2=453907
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/FaultManager.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/FaultManager.java Sat Oct  7 06:56:17 2006
@@ -411,7 +411,18 @@
 
 	}
 	
-	
+	/**
+	 * Adds the necessary Fault elements as properties to the message context.
+	 * Returns a dummy Fault which will be throw by this method caller.
+	 * 
+	 * @param referenceRMMsgContext - Message in reference to which the fault will be generated.
+	 * @param data - data for the fault
+	 * @param addressingNamespaceURI
+	 * @param storageManager
+	 * @return - The dummy fault to be thrown out.
+	 * 
+	 * @throws AxisFault
+	 */
 	public SandeshaException getFault (RMMsgContext referenceRMMsgContext, FaultData data, String addressingNamespaceURI,
 			StorageManager storageManager) throws AxisFault {
 		
@@ -435,7 +446,6 @@
 		
 		SOAPFaultDetail detail = factory.createSOAPFaultDetail();
 		detail.addDetailEntry(data.getDetail());
-		System.out.println("Detail:" + data.getDetail());
 		
 		String SOAPNamespaceValue = factory.getSoapVersionURI();
 		
@@ -453,106 +463,6 @@
 		
 		SandeshaException fault = new SandeshaException("");
 		return fault;
-	}
-
-	/**
-	 * Returns a RMMessageContext for the fault message. Data for generating the
-	 * fault is given in the data parameter.
-	 * 
-	 * @param referenceRMMsgContext
-	 * @param data
-	 * @return
-	 * @throws SandeshaException
-	 */
-	public RMMsgContext getFaultMessage (RMMsgContext referenceRMMsgContext, FaultData data, String addressingNamespaceURI,
-			StorageManager storageManager) throws SandeshaException {
-		if (log.isDebugEnabled())
-			log.debug("Enter: FaultManager::getFault");
-
-		try {
-			MessageContext referenceMessage = referenceRMMsgContext.getMessageContext();
-			ConfigurationContext configCtx = referenceRMMsgContext.getConfigurationContext();
-
-			// This is to hack to remove NPE. TODO remove this.
-			if (referenceMessage.getServiceGroupContext() == null) {
-				ServiceGroupContext serviceGroupContext = new ServiceGroupContext(referenceMessage
-						.getConfigurationContext(), referenceMessage.getAxisServiceGroup());
-				referenceMessage.setServiceGroupContext(serviceGroupContext);
-			}
-			if (referenceMessage.getServiceContext() == null) {
-				ServiceContext serviceContext = new ServiceContext(referenceMessage.getAxisService(), referenceMessage
-						.getServiceGroupContext());
-				referenceMessage.setServiceContext(serviceContext);
-			}
-
-			// end hack
-
-			AxisOperation operation = AxisOperationFactory.getAxisOperation(WSDL20_2004Constants.MEP_CONSTANT_OUT_ONLY);
-
-			
-			//TODO this fails when the in message is in only. Fault is thrown at the InOnlyAxisOperation
-			MessageContext faultMsgContext = SandeshaUtil.createNewRelatedMessageContext(referenceRMMsgContext, operation); //Utils.createOutMessageContext(referenceMessage);
-
-			// setting contexts.
-			faultMsgContext.setAxisServiceGroup(referenceMessage.getAxisServiceGroup());
-			faultMsgContext.setAxisService(referenceMessage.getAxisService());
-			faultMsgContext.setAxisServiceGroup(referenceMessage.getAxisServiceGroup());
-			faultMsgContext.setServiceGroupContext(referenceMessage.getServiceGroupContext());
-			faultMsgContext.setServiceGroupContextId(referenceMessage.getServiceGroupContextId());
-			faultMsgContext.setServiceContext(referenceMessage.getServiceContext());
-			faultMsgContext.setServiceContextID(referenceMessage.getServiceContextID());
-
-
-			OperationContext operationContext = new OperationContext(operation);
-
-			faultMsgContext.setAxisOperation(operation);
-			faultMsgContext.setOperationContext(operationContext);
-
-			String acksToStr = null;
-			if (referenceRMMsgContext.getMessageType() == Sandesha2Constants.MessageTypes.CREATE_SEQ) {
-				CreateSequence createSequence = (CreateSequence) referenceRMMsgContext
-						.getMessagePart(Sandesha2Constants.MessageParts.CREATE_SEQ);
-				acksToStr = createSequence.getAcksTo().getAddress().getEpr().getAddress();
-			} else {
-				SequencePropertyBeanMgr seqPropMgr = storageManager.getSequencePropertyBeanMgr();
-
-				// TODO get the acksTo value using the property key.
-
-				String sequenceId = data.getSequenceId();
-				SequencePropertyBean acksToBean = seqPropMgr.retrieve(sequenceId,
-						Sandesha2Constants.SequenceProperties.ACKS_TO_EPR);
-				if (acksToBean != null) {
-					EndpointReference epr = new EndpointReference(acksToBean.getValue());
-					if (epr != null)
-						acksToStr = epr.getAddress();
-				}
-			}
-
-			String anonymousURI = SpecSpecificConstants.getAddressingAnonymousURI(addressingNamespaceURI);
-
-			if (acksToStr != null && !acksToStr.equals(anonymousURI)) {
-				faultMsgContext.setTo(new EndpointReference(acksToStr));
-			}
-
-			int SOAPVersion = SandeshaUtil.getSOAPVersion(referenceMessage.getEnvelope());
-			SOAPFaultEnvelopeCreator.addSOAPFaultEnvelope(faultMsgContext, SOAPVersion, data, referenceRMMsgContext
-					.getRMNamespaceValue());
-
-			RMMsgContext faultRMMsgCtx = MsgInitializer.initializeMessage(faultMsgContext);
-			
-			faultRMMsgCtx.setAction(SpecSpecificConstants.getFaultAction (addressingNamespaceURI));
-
-			if (log.isDebugEnabled())
-				log.debug("Exit: FaultManager::getFault");
-			
-			//setting the serverSide property
-			faultMsgContext.setServerSide(true);
-			
-			return faultRMMsgCtx;
-
-		} catch (AxisFault e) {
-			throw new SandeshaException(e.getMessage(), e);
-		}
 	}
 
 }

Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/RMMsgCreator.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/RMMsgCreator.java?view=diff&rev=453907&r1=453906&r2=453907
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/RMMsgCreator.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/RMMsgCreator.java Sat Oct  7 06:56:17 2006
@@ -23,10 +23,8 @@
 
 import javax.xml.namespace.QName;
 
-import org.apache.axiom.om.OMAbstractFactory;
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.OMNamespace;
-import org.apache.axiom.soap.SOAP12Constants;
 import org.apache.axiom.soap.SOAPEnvelope;
 import org.apache.axiom.soap.SOAPFactory;
 import org.apache.axis2.AxisFault;
@@ -38,7 +36,6 @@
 import org.apache.axis2.context.OperationContext;
 import org.apache.axis2.description.AxisOperation;
 import org.apache.axis2.description.AxisOperationFactory;
-import org.apache.axis2.description.OutInAxisOperation;
 import org.apache.axis2.description.Parameter;
 import org.apache.axis2.description.TransportInDescription;
 import org.apache.axis2.wsdl.WSDLConstants.WSDL20_2004Constants;
@@ -54,7 +51,6 @@
 import org.apache.sandesha2.security.SecurityToken;
 import org.apache.sandesha2.storage.StorageManager;
 import org.apache.sandesha2.storage.beanmanagers.SequencePropertyBeanMgr;
-import org.apache.sandesha2.storage.beans.CreateSeqBean;
 import org.apache.sandesha2.storage.beans.SequencePropertyBean;
 import org.apache.sandesha2.wsrm.Accept;
 import org.apache.sandesha2.wsrm.AckFinal;
@@ -270,17 +266,11 @@
 		EndpointReference referenceTo = applicationMsgContext.getTo();
 		EndpointReference referenceReplyTo = applicationMsgContext.getReplyTo();
 		
-		EndpointReference replyTo = null;
 		
-		if (referenceReplyTo!=null && SandeshaUtil.isAnonymousURI (referenceReplyTo.getAddress()))
-			replyTo = new EndpointReference (referenceReplyTo.getAddress());
-		else
-			replyTo = context.getListenerManager().getEPRforService (
-					createSeqmsgContext.getAxisService().getName(), null, null 
-					/*axisOperationName!=null?axisOperationName.getLocalPart():null, 
-        				transportInName!=null?transportInName.getLocalPart():null*/);
-        
-        createSeqmsgContext.setReplyTo(replyTo);
+		if (referenceReplyTo!=null) {
+			EndpointReference createSeqReplyTo = new EndpointReference (referenceReplyTo.getAddress());
+        	createSeqmsgContext.setReplyTo(createSeqReplyTo);
+		}
         
 		RMMsgContext createSeqRMMsg = new RMMsgContext(createSeqmsgContext);
 
@@ -659,14 +649,10 @@
 	public static void addAckMessage(RMMsgContext applicationMsg, String sequencePropertyKey ,String sequenceId, StorageManager storageManager)
 			throws SandeshaException {
 		
-		SOAPFactory factory = SOAPAbstractFactory.getSOAPFactory(SandeshaUtil.getSOAPVersion(applicationMsg
-				.getSOAPEnvelope()));
-
+		SOAPFactory factory = null;
 		SOAPEnvelope envelope = applicationMsg.getSOAPEnvelope();
-		if (envelope == null) {
-			SOAPEnvelope newEnvelope = factory.getDefaultEnvelope();
-			applicationMsg.setSOAPEnvelop(newEnvelope);
-		}
+		factory = (SOAPFactory) envelope.getOMFactory();
+		
 		envelope = applicationMsg.getSOAPEnvelope();
 
 		ConfigurationContext ctx = applicationMsg.getMessageContext().getConfigurationContext();
@@ -718,6 +704,9 @@
 		}
 		
 		applicationMsg.setMessageId(SandeshaUtil.getUUID());
+		
+		//generating the SOAP envelope.
+		applicationMsg.addSOAPEnvelope();
 	}
 	
 	public static RMMsgContext createMakeConnectionMessage (RMMsgContext referenceRMMessage,  String makeConnectionSeqId,

Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SandeshaUtil.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SandeshaUtil.java?view=diff&rev=453907&r1=453906&r2=453907
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SandeshaUtil.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SandeshaUtil.java Sat Oct  7 06:56:17 2006
@@ -1044,9 +1044,12 @@
 	}
 
 	public static boolean isAnonymousURI (String address) {
-		if (AddressingConstants.Final.WSA_ANONYMOUS_URL.equals(address))
+		if (address==null)
+			return false;
+		
+		if (AddressingConstants.Final.WSA_ANONYMOUS_URL.equals(address.trim()))
 			return true;
-		else if (AddressingConstants.Submission.WSA_ANONYMOUS_URL.equals(address))
+		else if (AddressingConstants.Submission.WSA_ANONYMOUS_URL.equals(address.trim()))
 			return true;
 		else if (isWSRMAnonymousReplyTo(address))
 			return true;

Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/workers/SenderWorker.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/workers/SenderWorker.java?view=diff&rev=453907&r1=453906&r2=453907
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/workers/SenderWorker.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/workers/SenderWorker.java Sat Oct  7 06:56:17 2006
@@ -62,8 +62,10 @@
 
 			SenderBean senderBean = senderBeanMgr.retrieve(messageId);
 			if (senderBean==null) {
-				String message = "SenderWorker has been assigned an unexisting work";
-				throw new SandeshaException (message);
+				//the work is not present. May be invalid now. So should return.
+				if (log.isDebugEnabled())
+					log.debug(SandeshaMessageHelper.getMessage(SandeshaMessageKeys.workNotPresent,workId));
+				return;
 			}
 			String key = senderBean.getMessageContextRefKey();
 			MessageContext msgCtx = storageManager.retrieveMessageContext(key, configurationContext);
@@ -90,7 +92,8 @@
 			}
 
 			if (msgCtx == null) {
-				log.debug(SandeshaMessageHelper.getMessage(SandeshaMessageKeys.sendHasUnavailableMsgEntry));
+				if (log.isDebugEnabled())
+					log.debug(SandeshaMessageHelper.getMessage(SandeshaMessageKeys.sendHasUnavailableMsgEntry));
 				return;			
 			}
 

Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/SequenceAcknowledgement.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/SequenceAcknowledgement.java?view=diff&rev=453907&r1=453906&r2=453907
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/SequenceAcknowledgement.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/SequenceAcknowledgement.java Sat Oct  7 06:56:17 2006
@@ -121,6 +121,22 @@
 		
 		OMNamespace rmNamespace = factory.createOMNamespace(namespaceValue,Sandesha2Constants.WSRM_COMMON.NS_PREFIX_RM);
 		
+		//If there already is an ack for this sequence it will be removed. 
+		//We do not allow to send two sequenceAcknowledgements for the same sequence in the same message.
+		Iterator oldAckIter = header.getChildrenWithName(new QName (namespaceValue,Sandesha2Constants.WSRM_COMMON.SEQUENCE_ACK));
+		while (oldAckIter.hasNext()) {
+			
+			OMElement oldAckElement = (OMElement) oldAckIter.next();
+			
+			SequenceAcknowledgement oldSequenceAcknowledgement = new SequenceAcknowledgement (namespaceValue);
+			oldSequenceAcknowledgement.fromOMElement(oldAckElement);
+			
+			String oldAckIdentifier = oldSequenceAcknowledgement.getIdentifier().getIdentifier();
+			if (oldAckIdentifier!=null && oldAckIdentifier.equals(this.identifier.getIdentifier())) {
+				oldAckElement.detach();
+			}
+		}
+		
 		SOAPHeader SOAPHeader = (SOAPHeader) header;
 		SOAPHeaderBlock sequenceAcknowledgementHeaderBlock = SOAPHeader.addHeaderBlock(
 				Sandesha2Constants.WSRM_COMMON.SEQUENCE_ACK,rmNamespace);
@@ -191,8 +207,6 @@
 			ackFinal.toOMElement(sequenceAcknowledgementHeaderBlock);
 		}
 		
-		SOAPHeader.addChild(sequenceAcknowledgementHeaderBlock);
-
 		return header;
 	}
 



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