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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]