Author: ruwan
Date: Mon Apr 6 06:52:04 2009
New Revision: 762222
URL: http://svn.apache.org/viewvc?rev=762222&view=rev
Log:
Fixing issue SYNAPSE-525, copying the full options object not just the
properties of options
Modified:
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/Axis2FlexibleMEPClient.java
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/MessageHelper.java
Modified:
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/Axis2FlexibleMEPClient.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/Axis2FlexibleMEPClient.java?rev=762222&r1=762221&r2=762222&view=diff
==============================================================================
---
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/Axis2FlexibleMEPClient.java
(original)
+++
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/Axis2FlexibleMEPClient.java
Mon Apr 6 06:52:04 2009
@@ -242,7 +242,7 @@
new QName(AnonymousServiceFactory.OUT_ONLY_OPERATION) :
new QName(AnonymousServiceFactory.OUT_IN_OPERATION));
- Options clientOptions = new Options();
+ Options clientOptions =
MessageHelper.cloneOptions(originalInMsgCtx.getOptions());
clientOptions.setUseSeparateListener(separateListener);
// if RM is requested,
if (wsRMEnabled) {
@@ -252,6 +252,8 @@
SynapseConstants.SANDESHA_POLICY,
MessageHelper.getPolicy(synapseOutMessageContext,
wsRMPolicyKey));
}
+ // todo: this wont be required now because we copy the full
options cloned copy with
+ // todo: the parent of the options object as well
MessageHelper.copyRMOptions(originalInMsgCtx, clientOptions);
}
Modified:
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/MessageHelper.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/MessageHelper.java?rev=762222&r1=762221&r2=762222&view=diff
==============================================================================
---
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/MessageHelper.java
(original)
+++
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/MessageHelper.java
Mon Apr 6 06:52:04 2009
@@ -121,6 +121,7 @@
org.apache.axis2.context.MessageContext newMC = clonePartially(mc);
newMC.setEnvelope(cloneSOAPEnvelope(mc.getEnvelope()));
+ newMC.setOptions(cloneOptions(mc.getOptions()));
newMC.setServiceContext(mc.getServiceContext());
newMC.setOperationContext(mc.getOperationContext());
@@ -199,11 +200,6 @@
}
}
- for (Object o : ori.getOptions().getProperties().keySet()) {
- String key = (String) o;
- newMC.getOptions().setProperty(key,
ori.getOptions().getProperty(key));
- }
-
Iterator itr = ori.getPropertyNames();
while (itr.hasNext()) {
String key = (String) itr.next();
@@ -254,6 +250,55 @@
}
/**
+ * Clones the given {...@link org.apache.axis2.client.Options} object.
This is not a deep copy
+ * because this will be called for each and every message going out from
synapse. The parent
+ * of the cloning options object is kept as a reference.
+ *
+ * @param options clonning object
+ * @return clonned Options object
+ */
+ public static Options cloneOptions(Options options) {
+
+ // create new options object and set the parent
+ Options clonedOptions = new Options(options.getParent());
+
+ // copy general options
+
clonedOptions.setCallTransportCleanup(options.isCallTransportCleanup());
+
clonedOptions.setExceptionToBeThrownOnSOAPFault(options.isExceptionToBeThrownOnSOAPFault());
+ clonedOptions.setManageSession(options.isManageSession());
+ clonedOptions.setSoapVersionURI(options.getSoapVersionURI());
+
clonedOptions.setTimeOutInMilliSeconds(options.getTimeOutInMilliSeconds());
+ clonedOptions.setUseSeparateListener(options.isUseSeparateListener());
+
+ // copy addressing related options
+ clonedOptions.setMessageId(options.getMessageId());
+ clonedOptions.setTo(options.getTo());
+ clonedOptions.setFrom(options.getFrom());
+ clonedOptions.setAction(options.getAction());
+ clonedOptions.setReplyTo(options.getReplyTo());
+ clonedOptions.setFaultTo(options.getFaultTo());
+ clonedOptions.setRelationships(options.getRelationships());
+
+ // copy transport related options
+ clonedOptions.setListener(options.getListener());
+ clonedOptions.setTransportIn(options.getTransportIn());
+ clonedOptions.setTransportInProtocol(options.getTransportInProtocol());
+ clonedOptions.setTransportOut(clonedOptions.getTransportOut());
+
+ // copy username and password options
+ clonedOptions.setUserName(options.getUserName());
+ clonedOptions.setPassword(options.getPassword());
+
+ // cloen the property set of the current options object
+ for (Object o : options.getProperties().keySet()) {
+ String key = (String) o;
+ clonedOptions.setProperty(key, options.getProperty(key));
+ }
+
+ return clonedOptions;
+ }
+
+ /**
* Removes Submission and Final WS-Addressing headers and return the
SOAPEnvelope from the given
* message context
*