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