Author: chamikara
Date: Sat Dec 2 06:40:53 2006
New Revision: 481565
URL: http://svn.apache.org/viewvc?view=rev&rev=481565
Log:
Changed the InMemory storge manager to keep the SOAPEnvelope in a different map
and to pass a cloned version every
time the Message is retrieved. This gives the correct behaviour in scenarios
where retransmitting the message through
the same handler could cause problems. For e.g. when composing with security.
Modified:
webservices/sandesha/branches/sandesha2/java/1_1/src/org/apache/sandesha2/i18n/SandeshaMessageKeys.java
webservices/sandesha/branches/sandesha2/java/1_1/src/org/apache/sandesha2/i18n/resource.properties
webservices/sandesha/branches/sandesha2/java/1_1/src/org/apache/sandesha2/storage/inmemory/InMemoryStorageManager.java
Modified:
webservices/sandesha/branches/sandesha2/java/1_1/src/org/apache/sandesha2/i18n/SandeshaMessageKeys.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/branches/sandesha2/java/1_1/src/org/apache/sandesha2/i18n/SandeshaMessageKeys.java?view=diff&rev=481565&r1=481564&r2=481565
==============================================================================
---
webservices/sandesha/branches/sandesha2/java/1_1/src/org/apache/sandesha2/i18n/SandeshaMessageKeys.java
(original)
+++
webservices/sandesha/branches/sandesha2/java/1_1/src/org/apache/sandesha2/i18n/SandeshaMessageKeys.java
Sat Dec 2 06:40:53 2006
@@ -244,6 +244,7 @@
public static final String
maximumRetransmissionCountProcessor="maximumRetransmissionCountProcessor";
public static final String nullMsgId="nullMsgId";
public static final String storageMapNotPresent="storageMapNotPresent";
+ public static final String
envelopeMapNotPresent="envelopeMapNotPresent";
public static final String
entryNotPresentForUpdating="entryNotPresentForUpdating";
public static final String appMsgIsNull="appMsgIsNull";
public static final String
terminateOpperationIsNull="terminateOpperationIsNull";
Modified:
webservices/sandesha/branches/sandesha2/java/1_1/src/org/apache/sandesha2/i18n/resource.properties
URL:
http://svn.apache.org/viewvc/webservices/sandesha/branches/sandesha2/java/1_1/src/org/apache/sandesha2/i18n/resource.properties?view=diff&rev=481565&r1=481564&r2=481565
==============================================================================
---
webservices/sandesha/branches/sandesha2/java/1_1/src/org/apache/sandesha2/i18n/resource.properties
(original)
+++
webservices/sandesha/branches/sandesha2/java/1_1/src/org/apache/sandesha2/i18n/resource.properties
Sat Dec 2 06:40:53 2006
@@ -255,6 +255,7 @@
maximumRetransmissionCountProcessor=MaximumRetransmissionCountProcessor:doAcknowledgementInterval
nullMsgId=Key (MessageId) is null. Cannot insert.
storageMapNotPresent=Error: storage Map not present
+envelopeMapNotPresent=Error: envelope Map not present
entryNotPresentForUpdating=Entry is not present for updating
appMsgIsNull=Application message is null
terminateOpperationIsNull=Terminate Operation was null
Modified:
webservices/sandesha/branches/sandesha2/java/1_1/src/org/apache/sandesha2/storage/inmemory/InMemoryStorageManager.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/branches/sandesha2/java/1_1/src/org/apache/sandesha2/storage/inmemory/InMemoryStorageManager.java?view=diff&rev=481565&r1=481564&r2=481565
==============================================================================
---
webservices/sandesha/branches/sandesha2/java/1_1/src/org/apache/sandesha2/storage/inmemory/InMemoryStorageManager.java
(original)
+++
webservices/sandesha/branches/sandesha2/java/1_1/src/org/apache/sandesha2/storage/inmemory/InMemoryStorageManager.java
Sat Dec 2 06:40:53 2006
@@ -19,10 +19,14 @@
import java.util.HashMap;
+import javax.xml.stream.XMLStreamReader;
+
+import org.apache.axis2.AxisFault;
import org.apache.axis2.context.ConfigurationContext;
import org.apache.axis2.context.MessageContext;
import org.apache.axis2.description.AxisModule;
import org.apache.axiom.soap.SOAPEnvelope;
+import org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder;
import org.apache.sandesha2.i18n.SandeshaMessageHelper;
import org.apache.sandesha2.i18n.SandeshaMessageKeys;
import org.apache.sandesha2.storage.SandeshaStorageException;
@@ -39,6 +43,7 @@
private static InMemoryStorageManager instance = null;
private final String MESSAGE_MAP_KEY = "Sandesha2MessageMap";
+ private final String ENVELOPE_MAP_KEY = "Sandesha2EnvelopeMap";
private RMSBeanMgr rmsBeanMgr = null;
private RMDBeanMgr nextMsgBeanMgr = null;
private SequencePropertyBeanMgr sequencePropertyBeanMgr = null;
@@ -91,12 +96,34 @@
return instance;
}
- public MessageContext retrieveMessageContext(String
key,ConfigurationContext context) {
+ public MessageContext retrieveMessageContext(String
key,ConfigurationContext context) throws SandeshaStorageException {
HashMap storageMap = (HashMap)
getContext().getProperty(MESSAGE_MAP_KEY);
if (storageMap==null)
return null;
- return (MessageContext) storageMap.get(key);
+ MessageContext messageContext = (MessageContext)
storageMap.get(key);
+
+ HashMap envMap = (HashMap)
getContext().getProperty(ENVELOPE_MAP_KEY);
+ if(envMap==null) {
+ return null;
+ }
+
+ //Get hold of the original SOAP envelope
+ SOAPEnvelope envelope = (SOAPEnvelope)envMap.get(key);
+
+ //Now clone the env and set it in the message context
+ if (envelope!=null) {
+ envelope.build();
+ XMLStreamReader streamReader =
envelope.cloneOMElement().getXMLStreamReader();
+ SOAPEnvelope clonedEnvelope = new
StAXSOAPModelBuilder(streamReader, null).getSOAPEnvelope();
+ try {
+ messageContext.setEnvelope(clonedEnvelope);
+ } catch (AxisFault e) {
+ throw new SandeshaStorageException (e);
+ }
+ }
+
+ return messageContext;
}
public void storeMessageContext(String key,MessageContext msgContext) {
@@ -111,6 +138,17 @@
key = SandeshaUtil.getUUID();
storageMap.put(key,msgContext);
+
+ //Now get hold of the SOAP envelope and store it in the env map
+ HashMap envMap = (HashMap)
getContext().getProperty(ENVELOPE_MAP_KEY);
+
+ if(envMap==null) {
+ envMap = new HashMap ();
+ getContext().setProperty(ENVELOPE_MAP_KEY, envMap);
+ }
+
+ envMap.put(key, msgContext.getEnvelope());
+
}
public void updateMessageContext(String key,MessageContext msgContext)
throws SandeshaStorageException {
@@ -125,6 +163,21 @@
if (oldEntry==null)
throw new SandeshaStorageException
(SandeshaMessageHelper.getMessage(
SandeshaMessageKeys.entryNotPresentForUpdating));
+
+ HashMap envMap = (HashMap)
getContext().getProperty(ENVELOPE_MAP_KEY);
+
+ if(envMap==null) {
+ throw new SandeshaStorageException
(SandeshaMessageHelper.getMessage(
+
SandeshaMessageKeys.envelopeMapNotPresent));
+ }
+
+ oldEntry = envMap.get(key);
+ if (oldEntry==null)
+ throw new SandeshaStorageException
(SandeshaMessageHelper.getMessage(
+
SandeshaMessageKeys.entryNotPresentForUpdating));
+
+ envMap.remove(key);
+ envMap.put(key, msgContext.getEnvelope());
storeMessageContext(key,msgContext);
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]