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
      *


Reply via email to