axis-java-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From veit...@apache.org
Subject svn commit: r1029372 - /axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SOAPConnectionImpl.java
Date Sun, 31 Oct 2010 14:40:22 GMT
Author: veithen
Date: Sun Oct 31 14:40:21 2010
New Revision: 1029372

URL: http://svn.apache.org/viewvc?rev=1029372&view=rev
Log:
Modified SOAPConnectionImpl so that it creates a single ConfigurationContext instance that
will not be shared with others.

Reasons:
* Starting with r921685, if no ConfigurationContext is supplied to the ServiceClient, it will
create a new one (unless it can locate one using MessageContext.getCurrentMessageContext(),
but this is not the most common use case for SOAPConnection). This means that SOAPConnection#call
would create a new ConfigurationContext every time, and this is too expensive.
* We need to disable mustUnderstand processing. However, we can't do that on an AxisConfiguration
that is shared with other components, because this would lead to unpredictable results.

Modified:
    axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SOAPConnectionImpl.java

Modified: axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SOAPConnectionImpl.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SOAPConnectionImpl.java?rev=1029372&r1=1029371&r2=1029372&view=diff
==============================================================================
--- axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SOAPConnectionImpl.java
(original)
+++ axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SOAPConnectionImpl.java
Sun Oct 31 14:40:21 2010
@@ -32,6 +32,8 @@ import org.apache.axis2.addressing.Endpo
 import org.apache.axis2.client.OperationClient;
 import org.apache.axis2.client.Options;
 import org.apache.axis2.client.ServiceClient;
+import org.apache.axis2.context.ConfigurationContext;
+import org.apache.axis2.context.ConfigurationContextFactory;
 import org.apache.axis2.context.MessageContext;
 import org.apache.axis2.engine.AxisConfiguration;
 import org.apache.axis2.engine.DispatchPhase;
@@ -76,8 +78,31 @@ public class SOAPConnectionImpl extends 
     /** Attribute which keeps track of whether this connection has been closed */
     private boolean closed = false;
 
+    private final ConfigurationContext configurationContext;
     private ServiceClient serviceClient;
 
+    SOAPConnectionImpl() throws SOAPException {
+        // Create a new ConfigurationContext that will be used by all ServiceClient instances.
+        // There are two reasons why this is necessary:
+        //  * Starting with r921685, if no ConfigurationContext is supplied to the ServiceClient,
+        //    it will create a new one (unless it can locate one using MessageContext.getCurrentMessageContext(),
+        //    but this is not the most common use case for SOAPConnection). This means that
+        //    SOAPConnection#call would create a new ConfigurationContext every time, and
this is
+        //    too expensive.
+        //  * We need to disable mustUnderstand processing. However, we can't do that on
an AxisConfiguration
+        //    that is shared with other components, because this would lead to unpredictable
results.
+        // Note that we could also use a single ServiceClient instance, but then the SOAPConnection
+        // implementation would no longer be thread safe. Although thread safety is not explicitly
required
+        // by the SAAJ specs, it appears that the SOAPConnection in Sun's reference implementation
is
+        // thread safe.
+        try {
+            configurationContext = ConfigurationContextFactory.createConfigurationContextFromFileSystem(null,
null);
+            disableMustUnderstandProcessing(configurationContext.getAxisConfiguration());
           
+        } catch (AxisFault ex) {
+            throw new SOAPException(ex);
+        }
+    }
+    
     /**
      * Sends the given message to the specified endpoint and blocks until it has returned
the
      * response.
@@ -111,8 +136,7 @@ public class SOAPConnectionImpl extends 
         // initialize the Sender
         OperationClient opClient;
         try {
-            serviceClient = new ServiceClient();   
-            disableMustUnderstandProcessing(serviceClient.getAxisConfiguration());      
     
+            serviceClient = new ServiceClient(configurationContext, null);
             opClient = serviceClient.createClient(ServiceClient.ANON_OUT_IN_OP);
         } catch (AxisFault e) {
             throw new SOAPException(e);
@@ -220,11 +244,11 @@ public class SOAPConnectionImpl extends 
      */
     private void disableMustUnderstandProcessing(AxisConfiguration config) {
         DispatchPhase phase;
-        phase = getDispatchPhase(serviceClient.getAxisConfiguration().getInFlowPhases());
+        phase = getDispatchPhase(config.getInFlowPhases());
         if (phase != null) {
             phase.addHandler(new UnderstandAllHeadersHandler());
         }
-        phase = getDispatchPhase(serviceClient.getAxisConfiguration().getInFaultFlowPhases());
+        phase = getDispatchPhase(config.getInFaultFlowPhases());
         if (phase != null) {
             phase.addHandler(new UnderstandAllHeadersHandler());
         }



Mime
View raw message