Author: chamikara
Date: Tue Jan 23 03:11:12 2007
New Revision: 498990
URL: http://svn.apache.org/viewvc?view=rev&rev=498990
Log:
Moved the clone method to SandeshaUtil.
Added logic to preserve the 'processed' state of header blocks.
Modified:
webservices/sandesha/trunk/java/src/org/apache/sandesha2/storage/inmemory/InMemoryStorageManager.java
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SandeshaUtil.java
Modified:
webservices/sandesha/trunk/java/src/org/apache/sandesha2/storage/inmemory/InMemoryStorageManager.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/storage/inmemory/InMemoryStorageManager.java?view=diff&rev=498990&r1=498989&r2=498990
==============================================================================
---
webservices/sandesha/trunk/java/src/org/apache/sandesha2/storage/inmemory/InMemoryStorageManager.java
(original)
+++
webservices/sandesha/trunk/java/src/org/apache/sandesha2/storage/inmemory/InMemoryStorageManager.java
Tue Jan 23 03:11:12 2007
@@ -186,10 +186,8 @@
//Now clone the env and set it in the message context
if (envelope!=null) {
-
- XMLStreamReader streamReader =
envelope.cloneOMElement().getXMLStreamReader();
- SOAPEnvelope clonedEnvelope = new
StAXSOAPModelBuilder(streamReader, null).getSOAPEnvelope();
try {
+ SOAPEnvelope clonedEnvelope =
SandeshaUtil.cloneEnvelope(envelope);
messageContext.setEnvelope(clonedEnvelope);
} catch (AxisFault e) {
throw new SandeshaStorageException (e);
@@ -223,12 +221,10 @@
}
SOAPEnvelope envelope = msgContext.getEnvelope();
- //storing a cloned version of the envelope in the Map.
- if (envelope!=null) {
- XMLStreamReader streamReader =
envelope.cloneOMElement().getXMLStreamReader();
- SOAPEnvelope clonedEnvelope = new
StAXSOAPModelBuilder(streamReader, null).getSOAPEnvelope();
- envMap.put(key, clonedEnvelope);
- }
+
+ //We are storing the original envelope here.
+ //Storing a cloned version will caus HeaderBlocks to loose
their setProcessed information.
+ envMap.put(key, envelope);
if(log.isDebugEnabled()) log.debug("Exit:
InMemoryStorageManager::storeMessageContext, key: " + key);
}
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=498990&r1=498989&r2=498990
==============================================================================
---
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SandeshaUtil.java
(original)
+++
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SandeshaUtil.java
Tue Jan 23 03:11:12 2007
@@ -29,6 +29,7 @@
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLOutputFactory;
import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
import javax.xml.stream.XMLStreamWriter;
import org.apache.axiom.om.OMElement;
@@ -37,6 +38,7 @@
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.axiom.soap.impl.builder.StAXSOAPModelBuilder;
import org.apache.axis2.AxisFault;
import org.apache.axis2.Constants;
@@ -1125,5 +1127,40 @@
if(log.isDebugEnabled()) log.debug("Exit:
SandeshaUtil::isMessageUnreliable, " + result);
return result;
+ }
+
+
+ public static SOAPEnvelope cloneEnvelope(SOAPEnvelope envelope) throws
SandeshaException {
+
+ // Now clone the env and set it in the message context
+ XMLStreamReader streamReader =
envelope.cloneOMElement().getXMLStreamReader();
+ SOAPEnvelope clonedEnvelope = new
StAXSOAPModelBuilder(streamReader, null).getSOAPEnvelope();
+
+ // you have to explicitely set the 'processed' attribute for
header
+ // blocks, since it get lost in the above read from the stream.
+
+ SOAPHeader header = envelope.getHeader();
+ if (header != null) {
+ Iterator childrenOfOldEnv = header.getChildElements();
+ Iterator childrenOfNewEnv =
clonedEnvelope.getHeader().getChildElements();
+ while (childrenOfOldEnv.hasNext()) {
+
+ SOAPHeaderBlock oldEnvHeaderBlock =
(SOAPHeaderBlock) childrenOfOldEnv.next();
+ SOAPHeaderBlock newEnvHeaderBlock =
(SOAPHeaderBlock) childrenOfNewEnv.next();
+
+ QName oldEnvHeaderBlockQName =
oldEnvHeaderBlock.getQName();
+ if (oldEnvHeaderBlockQName != null) {
+ if
(oldEnvHeaderBlockQName.equals(newEnvHeaderBlock.getQName())) {
+ if
(oldEnvHeaderBlock.isProcessed())
+
newEnvHeaderBlock.setProcessed();
+ } else {
+ String message = "The elements
of the original and cloned SOAP Envelopes do not match";
+ throw new
SandeshaException(message);
+ }
+ }
+ }
+ }
+
+ return clonedEnvelope;
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]