You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fx-dev@ws.apache.org by ch...@apache.org on 2007/01/23 12:11:14 UTC
svn commit: r498990 - in
/webservices/sandesha/trunk/java/src/org/apache/sandesha2:
storage/inmemory/InMemoryStorageManager.java util/SandeshaUtil.java
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: sandesha-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: sandesha-dev-help@ws.apache.org