You are viewing a plain text version of this content. The canonical link for it is here.
Posted to sandesha-dev@ws.apache.org by ch...@apache.org on 2006/09/16 04:02:27 UTC

svn commit: r446809 - in /webservices/sandesha/trunk/java: src/org/apache/sandesha2/ src/org/apache/sandesha2/handlers/ src/org/apache/sandesha2/msgprocessors/ src/org/apache/sandesha2/util/ src/org/apache/sandesha2/wsrm/ test-resources/ test/src/org/a...

Author: chamikara
Date: Fri Sep 15 19:02:26 2006
New Revision: 446809

URL: http://svn.apache.org/viewvc?view=rev&rev=446809
Log:
Patch from Matt on AckRequest processing.

Added:
    webservices/sandesha/trunk/java/test-resources/AckRequested.xml
Modified:
    webservices/sandesha/trunk/java/src/org/apache/sandesha2/RMMsgContext.java
    webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaInHandler.java
    webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/AckRequestedProcessor.java
    webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java
    webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/CreateSeqResponseMsgProcessor.java
    webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/MsgProcessorFactory.java
    webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/MsgInitializer.java
    webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SandeshaUtil.java
    webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/AckRequested.java
    webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/RMElements.java
    webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/SequenceAcknowledgement.java
    webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/wsrm/AckRequestedTest.java

Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/RMMsgContext.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/RMMsgContext.java?view=diff&rev=446809&r1=446808&r2=446809
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/RMMsgContext.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/RMMsgContext.java Fri Sep 15 19:02:26 2006
@@ -133,14 +133,13 @@
 	 */
 	public void setMessagePart(int partId, IOMRMPart part) {
 		if (partId >= 0 && partId <= Sandesha2Constants.MessageParts.MAX_MSG_PART_ID) {
-			
-			if (partId==Sandesha2Constants.MessageParts.SEQ_ACKNOWLEDGEMENT) {
-				ArrayList sequenceAckList = (ArrayList) rmMessageParts.get(new Integer (partId));
-				if (sequenceAckList==null) {
-					sequenceAckList = new ArrayList ();
-					sequenceAckList.add(part);
-					rmMessageParts.put(new Integer (partId),sequenceAckList);
+			if (isMultiPart(partId)) {
+				ArrayList partList = (ArrayList) rmMessageParts.get(new Integer (partId));
+				if (partList==null) {
+					partList = new ArrayList ();
+					rmMessageParts.put(new Integer (partId),partList);
 				}
+				partList.add(part);
 			} else {
 				rmMessageParts.put(new Integer(partId), part); 
 			}
@@ -174,7 +173,8 @@
 	//checks weather there can be multiple elements of these parts,
 	//if so getMessageParts method has to be called to get a ArrayList of parts..
 	public boolean isMultiPart (int messagePartId) {
-		if (messagePartId==Sandesha2Constants.MessageParts.SEQ_ACKNOWLEDGEMENT)
+		if (messagePartId==Sandesha2Constants.MessageParts.SEQ_ACKNOWLEDGEMENT||
+			messagePartId==Sandesha2Constants.MessageParts.ACK_REQUEST)
 			return true;
 		
 		return false;

Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaInHandler.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaInHandler.java?view=diff&rev=446809&r1=446808&r2=446809
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaInHandler.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaInHandler.java Fri Sep 15 19:02:26 2006
@@ -30,6 +30,7 @@
 import org.apache.sandesha2.SandeshaException;
 import org.apache.sandesha2.i18n.SandeshaMessageHelper;
 import org.apache.sandesha2.i18n.SandeshaMessageKeys;
+import org.apache.sandesha2.msgprocessors.AckRequestedProcessor;
 import org.apache.sandesha2.msgprocessors.AcknowledgementProcessor;
 import org.apache.sandesha2.msgprocessors.MsgProcessor;
 import org.apache.sandesha2.msgprocessors.MsgProcessorFactory;
@@ -98,6 +99,10 @@
 			// Process Ack headers in the message
 			AcknowledgementProcessor ackProcessor = new AcknowledgementProcessor();
 			ackProcessor.processAckHeaders(msgCtx);
+
+			// Process Ack Request headers in the message
+			AckRequestedProcessor reqProcessor = new AckRequestedProcessor();
+			reqProcessor.processAckRequestedHeaders(msgCtx);
 
 			AxisService axisService = msgCtx.getAxisService();
 			if (axisService == null) {

Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/AckRequestedProcessor.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/AckRequestedProcessor.java?view=diff&rev=446809&r1=446808&r2=446809
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/AckRequestedProcessor.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/AckRequestedProcessor.java Fri Sep 15 19:02:26 2006
@@ -21,8 +21,12 @@
 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.SOAPFactory;
+import org.apache.axiom.soap.SOAPHeader;
 import org.apache.axis2.AxisFault;
 import org.apache.axis2.Constants;
 import org.apache.axis2.addressing.AddressingConstants;
@@ -58,31 +62,49 @@
 import org.apache.sandesha2.wsrm.AckRequested;
 
 /**
- * Responsible for processing an incoming Application message.
+ * Responsible for processing ack requested headers on incoming messages.
  */
 
-public class AckRequestedProcessor implements MsgProcessor {
+public class AckRequestedProcessor {
 
 	private static final Log log = LogFactory.getLog(AckRequestedProcessor.class);
 
-	public void processInMessage(RMMsgContext rmMsgCtx) throws SandeshaException {
+	public void processAckRequestedHeaders(MessageContext message) throws SandeshaException {
 		if (log.isDebugEnabled())
-			log.debug("Enter: AckRequestedProcessor::processInMessage");
+			log.debug("Enter: AckRequestedProcessor::processAckRequestHeaders");
 
-		AckRequested ackRequested = (AckRequested) rmMsgCtx.getMessagePart(Sandesha2Constants.MessageParts.ACK_REQUEST);
-		if (ackRequested == null) {
-			throw new SandeshaException(SandeshaMessageHelper.getMessage(SandeshaMessageKeys.noAckRequestedElement));
+		SOAPEnvelope envelope = message.getEnvelope();
+		SOAPHeader header = envelope.getHeader();
+		
+		for(int i = 0; i < Sandesha2Constants.SPEC_NS_URIS.length; i++) {
+			QName headerName = new QName(Sandesha2Constants.SPEC_NS_URIS[i], Sandesha2Constants.WSRM_COMMON.ACK_REQUESTED);
+			
+			Iterator acks = header.getChildrenWithName(headerName);
+			while(acks.hasNext()) {
+				OMElement ack = (OMElement) acks.next();
+				AckRequested ackReq = new AckRequested(headerName.getNamespaceURI());
+			  ackReq.fromOMElement(ack);
+			  processAckRequestedHeader(message, ackReq);
+			}
 		}
 
-		// settting must understand to false.
-		ackRequested.setMustUnderstand(false);
-		rmMsgCtx.addSOAPEnvelope();
+		if (log.isDebugEnabled())
+			log.debug("Exit: AckRequestedProcessor::processAckRequestHeaders");
+	}
+
+	public void processAckRequestedHeader(MessageContext msgContext, AckRequested ackRequested) throws SandeshaException {
+		if (log.isDebugEnabled())
+			log.debug("Enter: AckRequestedProcessor::processAckRequestedHeader");
 
-		MessageContext msgContext = rmMsgCtx.getMessageContext();
+		// TODO: Note that this RMMessageContext is not really any use - but we need to create it
+		// so that it can be passed to the fault handling chain. It's really no more than a
+		// container for the correct addressing and RM spec levels, so we'd be better off passing
+		// them in directly. Unfortunately that change ripples through the codebase...
+		RMMsgContext rmMsgCtx = MsgInitializer.initializeMessage(msgContext);
 
 		String sequenceId = ackRequested.getIdentifier().getIdentifier();
 
-		ConfigurationContext configurationContext = rmMsgCtx.getMessageContext().getConfigurationContext();
+		ConfigurationContext configurationContext = msgContext.getConfigurationContext();
 
 		StorageManager storageManager = SandeshaUtil.getSandeshaStorageManager(configurationContext,
 				configurationContext.getAxisConfiguration());
@@ -90,7 +112,7 @@
 		SequencePropertyBeanMgr seqPropMgr = storageManager.getSequencePropertyBeanMgr();
 
 		//not getting the sequencePropertyKey from the usual method since the ackRequest may be embedded in a message
-		//of a different sequence. (usua method SandeshaUtil.getSequencePropertyKey)
+		//of a different sequence. (usual method SandeshaUtil.getSequencePropertyKey)
 		String sequencePropertyKey = sequenceId;
 		
 		// Check that the sender of this AckRequest holds the correct token
@@ -278,16 +300,8 @@
 			msgContext.pause();
 
 			if (log.isDebugEnabled())
-				log.debug("Exit: AckRequestedProcessor::processInMessage");
-		}
-	}
-
-	public void processOutMessage(RMMsgContext rmMsgCtx) throws SandeshaException {
-		if (log.isDebugEnabled()) {
-			log.debug("Enter: AckRequestedProcessor::processOutMessage");
-			log.debug("Exit: AckRequestedProcessor::processOutMessage");
+				log.debug("Exit: AckRequestedProcessor::processAckRequestedHeader");
 		}
-
 	}
 
 }

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=446809&r1=446808&r2=446809
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java Fri Sep 15 19:02:26 2006
@@ -87,13 +87,6 @@
 		if (log.isDebugEnabled())
 			log.debug("Enter: ApplicationMsgProcessor::processInMessage");
 
-		// TODO process embedded ack requests
-		AckRequested ackRequested = (AckRequested) rmMsgCtx.getMessagePart(Sandesha2Constants.MessageParts.ACK_REQUEST);
-		if (ackRequested != null) {
-			ackRequested.setMustUnderstand(false);
-			rmMsgCtx.addSOAPEnvelope();
-		}
-
 		// Processing the application message.
 		MessageContext msgCtx = rmMsgCtx.getMessageContext();
 		if (msgCtx == null) {
@@ -376,14 +369,6 @@
 		ConfigurationContext configCtx = rmMsgCtx.getMessageContext().getConfigurationContext();
 		if (configCtx == null)
 			throw new SandeshaException(SandeshaMessageHelper.getMessage(SandeshaMessageKeys.configContextNotSet));
-
-		AckRequested ackRequested = (AckRequested) rmMsgCtx.getMessagePart(Sandesha2Constants.MessageParts.ACK_REQUEST);
-
-		if (ackRequested != null) {
-			// setting mustundestand=false for the ackRequested header block.
-			ackRequested.setMustUnderstand(false);
-			rmMsgCtx.addSOAPEnvelope();
-		}
 
 		RMMsgContext ackRMMessage = AcknowledgementManager.generateAckMessage(rmMsgCtx, sequencePropertyKey ,sequenceId, storageManager);
 

Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/CreateSeqResponseMsgProcessor.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/CreateSeqResponseMsgProcessor.java?view=diff&rev=446809&r1=446808&r2=446809
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/CreateSeqResponseMsgProcessor.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/CreateSeqResponseMsgProcessor.java Fri Sep 15 19:02:26 2006
@@ -262,14 +262,6 @@
 
 			sequencePart.setIdentifier(identifier);
 
-			AckRequested ackRequestedPart = (AckRequested) applicaionRMMsg
-					.getMessagePart(Sandesha2Constants.MessageParts.ACK_REQUEST);
-			if (ackRequestedPart != null) {
-				Identifier id1 = new Identifier(assumedRMNamespace);
-				id1.setIndentifer(newOutSequenceId);
-				ackRequestedPart.setIdentifier(id1);
-			}
-
 			try {
 				applicaionRMMsg.addSOAPEnvelope();
 			} catch (AxisFault e) {

Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/MsgProcessorFactory.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/MsgProcessorFactory.java?view=diff&rev=446809&r1=446808&r2=446809
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/MsgProcessorFactory.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/MsgProcessorFactory.java Fri Sep 15 19:02:26 2006
@@ -43,8 +43,6 @@
 			return new CreateSeqResponseMsgProcessor();
 		case (Sandesha2Constants.MessageTypes.CLOSE_SEQUENCE):
 			return new CloseSequenceProcessor();
-		case (Sandesha2Constants.MessageTypes.ACK_REQUEST):
-			return new AckRequestedProcessor();
 		default:
 			return null;
 		}

Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/MsgInitializer.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/MsgInitializer.java?view=diff&rev=446809&r1=446808&r2=446809
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/MsgInitializer.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/MsgInitializer.java Fri Sep 15 19:02:26 2006
@@ -106,7 +106,7 @@
 			rmNamespace = elements.getSequence().getNamespaceValue();
 		}
 
-		//In case of ack messages RM Namespace is decided based on the sequenceId of the first 
+		//In case of ack messages RM Namespace is decided based on the sequenceId of the last 
 		//sequence Ack. In other words Sandesha2 does not expect to receive two SequenceAcknowledgements
 		//of different RM specifications in the same incoming message
 		for (Iterator iter = elements.getSequenceAcknowledgements();iter.hasNext();) {
@@ -126,9 +126,12 @@
 			rmNamespace = elements.getTerminateSequenceResponse().getNamespaceValue();
 		}
 
-		if (elements.getAckRequested() != null) {
-			rmMsgContext.setMessagePart(Sandesha2Constants.MessageParts.ACK_REQUEST, elements.getAckRequested());
-			rmNamespace = elements.getAckRequested().getNamespaceValue();
+		//In case of ack request messages RM Namespace is decided based on the sequenceId of the last 
+		//ack request.
+		for (Iterator iter = elements.getAckRequests();iter.hasNext();) {
+			AckRequested ackRequest = (AckRequested) iter.next();
+			rmMsgContext.setMessagePart(Sandesha2Constants.MessageParts.ACK_REQUEST, ackRequest);
+			rmNamespace = ackRequest.getNamespaceValue();
 		}
 
 		if (elements.getCloseSequence() != null) {
@@ -193,7 +196,7 @@
 				Sandesha2Constants.MessageParts.SEQ_ACKNOWLEDGEMENT);
 		Sequence sequence = (Sequence) rmMsgCtx.getMessagePart(
 				Sandesha2Constants.MessageParts.SEQUENCE);
-		AckRequested ackRequest = (AckRequested) rmMsgCtx.getMessagePart(
+		Iterator ackRequestedIter = rmMsgCtx.getMessageParts(
 				Sandesha2Constants.MessageParts.ACK_REQUEST);
 		CloseSequence closeSequence = (CloseSequence) rmMsgCtx.getMessagePart(
 				Sandesha2Constants.MessageParts.CLOSE_SEQUENCE);
@@ -224,9 +227,13 @@
 			//if there is only on sequenceAck, sequenceId will be set. Otherwise it will not be.
 			if (!sequenceAcknowledgementsIter.hasNext())
 				sequenceID = sequenceAcknowledgement.getIdentifier().getIdentifier();
-		} else if (ackRequest != null) {
+		} else if (ackRequestedIter.hasNext()) {
 			rmMsgCtx.setMessageType(Sandesha2Constants.MessageTypes.ACK_REQUEST);
-			sequenceID = ackRequest.getIdentifier().getIdentifier();
+			AckRequested ackRequest = (AckRequested) ackRequestedIter.next();
+
+			//if there is only on sequenceAck, sequenceId will be set. Otherwise it will not be.
+			if (!ackRequestedIter.hasNext())
+				sequenceID = ackRequest.getIdentifier().getIdentifier();
 		} else if (closeSequence != null) {
 			rmMsgCtx.setMessageType(Sandesha2Constants.MessageTypes.CLOSE_SEQUENCE);
 			sequenceID = closeSequence.getIdentifier().getIdentifier();

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=446809&r1=446808&r2=446809
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SandeshaUtil.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SandeshaUtil.java Fri Sep 15 19:02:26 2006
@@ -899,9 +899,14 @@
 			SequenceAcknowledgement sequenceAcknowledgement = (SequenceAcknowledgement) sequenceAckIter.next();
 			sequenceID = sequenceAcknowledgement.getIdentifier().getIdentifier();
 		} else if (messageType == Sandesha2Constants.MessageTypes.ACK_REQUEST) {
-			AckRequested ackRequested = (AckRequested) rmMessageContext
-					.getMessagePart(Sandesha2Constants.MessageParts.ACK_REQUEST);
-			sequenceID = ackRequested.getIdentifier().getIdentifier();
+			Iterator ackRequestIter = rmMessageContext
+					.getMessageParts(Sandesha2Constants.MessageParts.ACK_REQUEST);
+	
+			//In case of ack request messages sequenceId is decided based on the sequenceId of the first 
+			//AckRequested.
+			
+			AckRequested ackReq = (AckRequested) ackRequestIter.next();
+			sequenceID = ackReq.getIdentifier().getIdentifier();
 		} else if (messageType == Sandesha2Constants.MessageTypes.CLOSE_SEQUENCE) {
 			CloseSequence closeSequence = (CloseSequence) rmMessageContext
 					.getMessagePart(Sandesha2Constants.MessageParts.CLOSE_SEQUENCE);

Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/AckRequested.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/AckRequested.java?view=diff&rev=446809&r1=446808&r2=446809
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/AckRequested.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/AckRequested.java Fri Sep 15 19:02:26 2006
@@ -33,16 +33,15 @@
 
 /**
  * Represent the AckRequested header block.
+ * The 2005/02 spec includes a 'MessageNumber' part in the ack request, but
+ * the 2006/08 spec does not. As the message number was never used in our
+ * implementation we simply ignore it.
  */
 
 public class AckRequested implements IOMRMPart {
 	
 	private Identifier identifier;
-	
-	private MessageNumber messageNumber;
-	
 	private String namespaceValue = null;
-	
 	private boolean mustUnderstand = false;
 	
 	public AckRequested(String namespaceValue) throws SandeshaException {
@@ -58,31 +57,11 @@
 		return namespaceValue;
 	}
 
-	public Object fromOMElement(OMElement header) throws OMException,SandeshaException {
-
-		if (header == null || !(header instanceof SOAPHeader))
-			throw new OMException(SandeshaMessageHelper.getMessage(
-					SandeshaMessageKeys.ackRequestedCannotBeAddedToNonHeader));
-
-		OMElement ackReqPart = header.getFirstChildWithName(new QName(namespaceValue, Sandesha2Constants.WSRM_COMMON.ACK_REQUESTED));
+	public Object fromOMElement(OMElement ackReqElement) throws OMException,SandeshaException {
 
-		if (ackReqPart == null)
-			throw new OMException(SandeshaMessageHelper.getMessage(
-					SandeshaMessageKeys.noAckRequestedElement,
-					header.toString()));
-
-//		ackElement = ackReqPart;
 		identifier = new Identifier(namespaceValue);
-		identifier.fromOMElement(ackReqPart);
-
-		OMElement msgNoPart = ackReqPart.getFirstChildWithName(new QName(
-				namespaceValue, Sandesha2Constants.WSRM_COMMON.MSG_NUMBER));
-
-		if (msgNoPart != null) {
-			messageNumber = new MessageNumber(namespaceValue);
-			messageNumber.fromOMElement(ackReqPart);
-		}
-
+		identifier.fromOMElement(ackReqElement);
+		
 		return this;
 	}
 
@@ -106,10 +85,6 @@
 
 		identifier.toOMElement(ackReqHdrBlock);
 
-		if (messageNumber != null) {
-			messageNumber.toOMElement(ackReqHdrBlock);
-		}
-
 		return header;
 	}
 
@@ -117,27 +92,12 @@
 		this.identifier = identifier;
 	}
 
-	public void setMessageNumber(MessageNumber messageNumber) {
-		this.messageNumber = messageNumber;
-	}
-
 	public Identifier getIdentifier() {
 		return identifier;
 	}
 
-	public MessageNumber getMessageNumber() {
-		return messageNumber;
-	}
-
 	public void toSOAPEnvelope(SOAPEnvelope envelope) {
 		SOAPHeader header = envelope.getHeader();
-		
-		//detach if already exist.
-		OMElement elem = header.getFirstChildWithName(new QName(namespaceValue,
-				Sandesha2Constants.WSRM_COMMON.ACK_REQUESTED));
-		if (elem!=null)
-			elem.detach();
-		
 		toOMElement(header);
 	}
 	

Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/RMElements.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/RMElements.java?view=diff&rev=446809&r1=446808&r2=446809
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/RMElements.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/RMElements.java Fri Sep 15 19:02:26 2006
@@ -45,8 +45,9 @@
 
 	private Sequence sequence = null;
 	
-	//there can be more than one sequence acks in a single message.
+	//there can be more than one sequence ack or ack request in a single message.
 	private ArrayList sequenceAcknowledgements = null;
+	private ArrayList ackRequests = null;
 	
 	private CreateSequence createSequence = null;
 	private CreateSequenceResponse createSequenceResponse = null;
@@ -54,7 +55,6 @@
 	private TerminateSequenceResponse terminateSequenceResponse = null;
 	private CloseSequence closeSequence = null;
 	private CloseSequenceResponse closeSequenceResponse = null;
-	private AckRequested ackRequested = null;
 	private UsesSequenceSTR usesSequenceSTR = null;
 	private MessagePending messagePending = null;
 	private MakeConnection makeConnection = null;
@@ -63,6 +63,7 @@
 	
 	public RMElements () {
 		sequenceAcknowledgements = new ArrayList ();
+		ackRequests = new ArrayList();
 	}
 	
 	public RMElements (String addressingNamespace) {
@@ -100,12 +101,8 @@
 			String message = SandeshaMessageHelper.getMessage(
 					SandeshaMessageKeys.unknownWSAVersion, envelope.toString());
 			throw new SandeshaException (message);
-//			return;
 		}
 		
-//		if (addressingNamespaceValue==null)
-//			addressingNamespaceValue = AddressingConstants.Final.WSA_NAMESPACE;   //Final is the default version for addressing
-	
 		OMElement sequenceElement = envelope.getHeader().getFirstChildWithName(
 				new QName(rmNamespaceValue, Sandesha2Constants.WSRM_COMMON.SEQUENCE));
 		if (sequenceElement != null) {
@@ -149,15 +146,6 @@
 				terminateSequenceResponse.fromOMElement(envelope.getBody());
 		}
 
-		OMElement ackRequestedElement = envelope.getHeader()
-				.getFirstChildWithName(
-						new QName(rmNamespaceValue,
-								Sandesha2Constants.WSRM_COMMON.ACK_REQUESTED));
-		if (ackRequestedElement != null) {
-			ackRequested = new AckRequested(rmNamespaceValue);
-			ackRequested.fromOMElement(envelope.getHeader());
-		}
-		
 		OMElement closeSequenceElement = envelope.getBody()
 			.getFirstChildWithName(
 				new QName(rmNamespaceValue,
@@ -187,6 +175,17 @@
 			sequenceAcknowledgements.add(sequenceAcknowledgement);
 		}
 
+		Iterator ackRequestIter = envelope.getHeader()
+				.getChildrenWithName (new QName(rmNamespaceValue,
+						Sandesha2Constants.WSRM_COMMON.ACK_REQUESTED));
+		while (ackRequestIter.hasNext()) {
+			OMElement ackRequestElement = (OMElement) ackRequestIter.next();
+			AckRequested ackRequest = new AckRequested(rmNamespaceValue);
+			ackRequest.fromOMElement(ackRequestElement);
+			
+			ackRequests.add(ackRequest);
+		}
+
 		OMElement usesSequenceSTRElement = envelope.getHeader()
 		.getFirstChildWithName(
 				new QName(rmNamespaceValue,
@@ -221,6 +220,10 @@
 			SequenceAcknowledgement sequenceAck = (SequenceAcknowledgement) iter.next();
 			sequenceAck.toOMElement(envelope.getHeader());
 		}
+		for (Iterator iter=ackRequests.iterator();iter.hasNext();) {
+			AckRequested ackReq = (AckRequested) iter.next();
+			ackReq.toOMElement(envelope.getHeader());
+		}
 		if (createSequence != null) {
 			createSequence.toOMElement(envelope.getBody());
 		}
@@ -230,10 +233,6 @@
 		if (terminateSequence != null) {
 			terminateSequence.toOMElement(envelope.getBody());
 		}
-		if (ackRequested != null) {
-			ackRequested.toOMElement(envelope.getBody());
-		}
-		
 		if (terminateSequenceResponse != null) {
 			terminateSequenceResponse.toOMElement(envelope.getBody());
 		}
@@ -311,12 +310,16 @@
 		this.terminateSequenceResponse = terminateSequenceResponse;
 	}
 
-	public AckRequested getAckRequested() {
-		return ackRequested;
+	public Iterator getAckRequests() {
+		return ackRequests.iterator();
 	}
 
-	public void setAckRequested(AckRequested ackRequested) {
-		this.ackRequested = ackRequested;
+	public void setAckRequested(ArrayList ackRequests) {
+		this.ackRequests = ackRequests;
+	}
+	
+	public void addAckRequested(AckRequested ackRequested) {
+		ackRequests.add(ackRequested);
 	}
 	
 	public void setMakeConnection(MakeConnection makeConnection) {

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=446809&r1=446808&r2=446809
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/SequenceAcknowledgement.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/SequenceAcknowledgement.java Fri Sep 15 19:02:26 2006
@@ -28,7 +28,6 @@
 import org.apache.axiom.om.OMFactory;
 import org.apache.axiom.om.OMNamespace;
 import org.apache.axiom.soap.SOAPEnvelope;
-import org.apache.axiom.soap.SOAPFactory;
 import org.apache.axiom.soap.SOAPHeader;
 import org.apache.axiom.soap.SOAPHeaderBlock;
 import org.apache.sandesha2.Sandesha2Constants;
@@ -68,8 +67,6 @@
 
 	public Object fromOMElement(OMElement sequenceAckElement) throws OMException,SandeshaException {
 
-		OMFactory factory = sequenceAckElement.getOMFactory();
-		
 		identifier = new Identifier(namespaceValue);
 		identifier.fromOMElement(sequenceAckElement);
 
@@ -207,7 +204,7 @@
 		acknowledgementRangeList = acknowledgementRagngesList;
 	}
 
-	public Nack addNackRangges(Nack nack) {
+	public Nack addNackRanges(Nack nack) {
 		nackList.add(nack);
 		return nack;
 	}
@@ -230,19 +227,8 @@
 		return nackList;
 	}
 
-	public void addChildElement(OMElement element) {
-		acknowledgementRangeList.add(element);
-	}
-
 	public void toSOAPEnvelope(SOAPEnvelope envelope) throws SandeshaException {
 		SOAPHeader header = envelope.getHeader();
-
-		//detach if already exist.
-		OMElement elem = header.getFirstChildWithName(new QName(
-				namespaceValue, Sandesha2Constants.WSRM_COMMON.SEQUENCE_ACK));
-		if (elem != null)
-			elem.detach();
-
 		toOMElement(header);
 	}
 

Added: webservices/sandesha/trunk/java/test-resources/AckRequested.xml
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/test-resources/AckRequested.xml?view=auto&rev=446809
==============================================================================
--- webservices/sandesha/trunk/java/test-resources/AckRequested.xml (added)
+++ webservices/sandesha/trunk/java/test-resources/AckRequested.xml Fri Sep 15 19:02:26 2006
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+   <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:wsrm="http://schemas.xmlsoap.org/ws/2005/02/rm" xmlns:wsa="http://www.w3.org/2005/08/addressing">
+      <soapenv:Header>
+         <wsa:MessageID soapenv:mustUnderstand="1">uuid:8d8f8d80-1624-11da-a28e-b3b9c4e71445</wsa:MessageID>
+         <wsa:To soapenv:mustUnderstand="1">http://127.0.0.1:9070/axis/services/RMService</wsa:To>
+         <wsa:Action soapenv:mustUnderstand="1">http://schemas.xmlsoap.org/ws/2005/02/rm/AckRequested</wsa:Action>
+         <wsa:From soapenv:mustUnderstand="1">
+            <wsa:Address>http://localhost:8070/axis/services/TestService</wsa:Address>
+         </wsa:From>
+         <wsrm:AckRequested soapenv:mustUnderstand="1">
+            <wsrm:Identifier>uuid:897ee740-1624-11da-a28e-b3b9c4e71445</wsrm:Identifier>
+         </wsrm:AckRequested>
+      </soapenv:Header>
+      <soapenv:Body/>
+   </soapenv:Envelope>

Modified: webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/wsrm/AckRequestedTest.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/wsrm/AckRequestedTest.java?view=diff&rev=446809&r1=446808&r2=446809
==============================================================================
--- webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/wsrm/AckRequestedTest.java (original)
+++ webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/wsrm/AckRequestedTest.java Fri Sep 15 19:02:26 2006
@@ -16,28 +16,48 @@
 
 package org.apache.sandesha2.wsrm;
 
-import junit.framework.TestCase;
+import javax.xml.namespace.QName;
 
 import org.apache.axiom.om.OMAbstractFactory;
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.soap.SOAPEnvelope;
 import org.apache.axiom.soap.SOAPFactory;
-import org.apache.axis2.addressing.AddressingConstants;
 import org.apache.sandesha2.Sandesha2Constants;
 import org.apache.sandesha2.SandeshaException;
+import org.apache.sandesha2.SandeshaTestCase;
 
-public class AckRequestedTest extends TestCase {
+public class AckRequestedTest extends SandeshaTestCase {
 
 	SOAPFactory factory = OMAbstractFactory.getSOAP11Factory();
-	String rmNamespaceValue = Sandesha2Constants.SPEC_2005_02.NS_URI;
-	String addressingNamespaceValue = AddressingConstants.Final.WSA_NAMESPACE;
+	String rmNamespace = Sandesha2Constants.SPEC_2005_02.NS_URI;
 	
-    public AckRequestedTest() {
-//        super("CreateSequenceResponseTest");
-
-    }
-
-    public void testFromOMElement() throws SandeshaException {
-    	
-    }
-
-    public void testToSOAPEnvelope()  throws SandeshaException {}
+	public AckRequestedTest() {
+		super("AckRequestedTest");
+	}
+
+	public void testFromOMElement() throws SandeshaException {
+		QName name = new QName(rmNamespace, "AckRequested");
+		AckRequested ackReq = new AckRequested(rmNamespace);
+		SOAPEnvelope env = getSOAPEnvelope("", "AckRequested.xml");
+		ackReq.fromOMElement(env.getHeader().getFirstChildWithName(name));
+		
+		Identifier identifier = ackReq.getIdentifier();
+		assertEquals("uuid:897ee740-1624-11da-a28e-b3b9c4e71445", identifier.getIdentifier());
+	}
+
+	public void testToSOAPEnvelope()  throws SandeshaException {
+		AckRequested ackReq = new AckRequested(rmNamespace);
+		Identifier identifier = new Identifier(rmNamespace);
+		identifier.setIndentifer("uuid:897ee740-1624-11da-a28e-b3b9c4e71445");
+		ackReq.setIdentifier(identifier);
+		
+		SOAPEnvelope env = getEmptySOAPEnvelope();
+		ackReq.toSOAPEnvelope(env);
+		
+		OMElement ackReqPart = env.getHeader().getFirstChildWithName(
+				new QName(rmNamespace, Sandesha2Constants.WSRM_COMMON.ACK_REQUESTED));
+		OMElement identifierPart = ackReqPart.getFirstChildWithName(
+				new QName(rmNamespace, Sandesha2Constants.WSRM_COMMON.IDENTIFIER));
+		assertEquals("uuid:897ee740-1624-11da-a28e-b3b9c4e71445", identifierPart.getText());
+	}
 }



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