You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@synapse.apache.org by ru...@apache.org on 2007/10/30 03:31:43 UTC
svn commit: r589941 -
/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/MessageHelper.java
Author: ruwan
Date: Mon Oct 29 19:31:42 2007
New Revision: 589941
URL: http://svn.apache.org/viewvc?rev=589941&view=rev
Log:
When we are doing cloning MC, we are not taking a deep copy which resulted in ConcurrentModificationException in getting TP headers. Added the method to clone TP headers in the MC clone
Modified:
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/MessageHelper.java
Modified: webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/MessageHelper.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/MessageHelper.java?rev=589941&r1=589940&r2=589941&view=diff
==============================================================================
--- webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/MessageHelper.java (original)
+++ webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/MessageHelper.java Mon Oct 29 19:31:42 2007
@@ -17,6 +17,8 @@
import java.util.Iterator;
import java.util.ArrayList;
+import java.util.Map;
+import java.util.HashMap;
/**
*
@@ -57,9 +59,7 @@
newCtx.setWSAAction(synCtx.getWSAAction());
// copy all the synapse level properties to the newCtx
- Iterator propItr = synCtx.getPropertyKeySet().iterator();
- while (propItr.hasNext()) {
- Object o = propItr.next();
+ for (Object o : synCtx.getPropertyKeySet()) {
// If there are non String keyed properties neglect them rathern than trow exception
if (o instanceof String) {
newCtx.setProperty((String) o, synCtx.getProperty((String) o));
@@ -104,9 +104,28 @@
newMC.setProperty(org.apache.axis2.Constants.OUT_TRANSPORT_INFO,
mc.getProperty(org.apache.axis2.Constants.OUT_TRANSPORT_INFO));
+ newMC.setProperty(org.apache.axis2.context.MessageContext.TRANSPORT_HEADERS,
+ getClonedTransportHeaders(mc));
+
return newMC;
}
+ public static Map getClonedTransportHeaders(org.apache.axis2.context.MessageContext msgCtx) {
+
+ Map headers = (Map) msgCtx.
+ getProperty(org.apache.axis2.context.MessageContext.TRANSPORT_HEADERS);
+ Map clonedHeaders = new HashMap();
+
+ if (headers != null && headers.isEmpty()) {
+ for (Object o : headers.keySet()) {
+ String headerName = (String) o;
+ clonedHeaders.put(headerName, headers.get(headerName));
+ }
+ }
+
+ return clonedHeaders;
+ }
+
public static org.apache.axis2.context.MessageContext clonePartially(
org.apache.axis2.context.MessageContext ori) throws AxisFault {
@@ -130,31 +149,26 @@
newMC.setDoingMTOM(ori.isDoingMTOM());
newMC.setDoingSwA(ori.isDoingSwA());
- newMC.setProperty(org.apache.axis2.context.MessageContext.TRANSPORT_HEADERS,
- ori.getProperty(org.apache.axis2.context.MessageContext.TRANSPORT_HEADERS));
-
// if the original request carries any attachments, copy them to the clone
// as well, except for the soap part if any
Attachments attachments = ori.getAttachmentMap();
if (attachments != null && attachments.getAllContentIDs().length > 0) {
String[] cIDs = attachments.getAllContentIDs();
String soapPart = attachments.getSOAPPartContentID();
- for (int i=0; i<cIDs.length; i++) {
- if (!cIDs[i].equals(soapPart)) {
- newMC.addAttachment(cIDs[i], attachments.getDataHandler(cIDs[i]));
+ for (String cID : cIDs) {
+ if (!cID.equals(soapPart)) {
+ newMC.addAttachment(cID, attachments.getDataHandler(cID));
}
}
}
- Iterator iter = ori.getOptions().getProperties().keySet().iterator();
- while (iter.hasNext()) {
- String key = (String) iter.next();
+ for (Object o : ori.getOptions().getProperties().keySet()) {
+ String key = (String) o;
newMC.getOptions().setProperty(key, ori.getOptions().getProperty(key));
}
- Iterator iter2 = ori.getProperties().keySet().iterator();
- while (iter2.hasNext()) {
- String key = (String) iter2.next();
+ for (Object o1 : ori.getProperties().keySet()) {
+ String key = (String) o1;
newMC.setProperty(key, ori.getProperty(key));
}
@@ -234,9 +248,7 @@
* @param headerInformation headers to be removed
*/
private static void detachAddressingInformation(ArrayList headerInformation) {
- Iterator iterator = headerInformation.iterator();
- while (iterator.hasNext()) {
- Object o = iterator.next();
+ for (Object o : headerInformation) {
if (o instanceof SOAPHeaderBlock) {
SOAPHeaderBlock headerBlock = (SOAPHeaderBlock) o;
headerBlock.detach();
---------------------------------------------------------------------
To unsubscribe, e-mail: synapse-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: synapse-dev-help@ws.apache.org