ws-axis-cvs mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From sc...@apache.org
Subject svn commit: r682006 - /webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/dispatchers/MustUnderstandUtils.java
Date Sat, 02 Aug 2008 16:20:01 GMT
Author: scheu
Date: Sat Aug  2 09:20:01 2008
New Revision: 682006

URL: http://svn.apache.org/viewvc?rev=682006&view=rev
Log:
AXIS2-3959
Contributor:Rich Scheuerle and David Strite
Performance fix to cache the list of headers from sei method parameters.

Modified:
    webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/dispatchers/MustUnderstandUtils.java

Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/dispatchers/MustUnderstandUtils.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/dispatchers/MustUnderstandUtils.java?rev=682006&r1=682005&r2=682006&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/dispatchers/MustUnderstandUtils.java
(original)
+++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/dispatchers/MustUnderstandUtils.java
Sat Aug  2 09:20:01 2008
@@ -21,6 +21,7 @@
 
 import org.apache.axiom.soap.SOAPEnvelope;
 import org.apache.axiom.soap.SOAPHeaderBlock;
+import org.apache.axis2.AxisFault;
 import org.apache.axis2.context.MessageContext;
 import org.apache.axis2.description.AxisDescription;
 import org.apache.axis2.description.AxisOperation;
@@ -61,7 +62,7 @@
         }
         
         ArrayList understoodHeaderQNames = MustUnderstandUtils.getHeaderParamaterList(msgContext);
-        if (understoodHeaderQNames == null) {
+        if (understoodHeaderQNames == null || understoodHeaderQNames.isEmpty()) {
             return;
         }
         
@@ -88,42 +89,71 @@
      * @return ArrayList of QNames for all header parameters for an SEI and SOAP handlers.
 
      *         The list may be empty but will not be null.
      */
+    static ArrayList EMPTY_LIST = new ArrayList();
     public static ArrayList getHeaderParamaterList(MessageContext msgContext) {
-        ArrayList returnList = new ArrayList();
+        ArrayList headers = null;
         // Build a list of understood headers for all the operations under the service
         AxisService axisService = msgContext.getAxisService();
         if (log.isDebugEnabled()) {
             log.debug("Building list of understood headers for all operations under " + axisService);
         }
-        if (axisService != null) {
-            ArrayList understoodHeaders;
+        if (axisService == null) {
+            headers = EMPTY_LIST;
+        } else  {
             
-            // examine SEI methods
-            Iterator operationIterator = axisService.getOperations();
-            if (operationIterator != null) {
-                while (operationIterator.hasNext()) {
-                    AxisOperation operation = (AxisOperation) operationIterator.next();
-                    understoodHeaders = getSEIMethodHeaderParameterList(operation);
-                    if (log.isDebugEnabled()) {
-                        log.debug("Adding headers from operation " + operation + "; headers
= "
-                                  + understoodHeaders);
+            // Get the understood headers from the sei methods
+            ArrayList seiMethodHeaders = (ArrayList) 
+                axisService.getParameterValue("seiMethodHeaderParameter");
+
+            if (seiMethodHeaders == null) {
+                // examine SEI methods
+                seiMethodHeaders = new ArrayList();
+                Iterator operationIterator = axisService.getOperations();
+                if (operationIterator != null) {
+                    while (operationIterator.hasNext()) {
+                        AxisOperation operation = (AxisOperation) operationIterator.next();
+                        ArrayList list = getSEIMethodHeaderParameterList(operation);
+                        if (log.isDebugEnabled()) {
+                            log.debug("Adding headers from operation " + operation + "; headers
= "
+                                      + list);
+                        }
+                        if (list != null && !list.isEmpty()) {
+                            seiMethodHeaders.addAll(list);
+                        }
                     }
-                    if (understoodHeaders != null && !understoodHeaders.isEmpty())
{
-                        returnList.addAll(understoodHeaders);
+                }
+
+                try {
+                    // Save calculated value since this won't change
+                    axisService.addParameter("seiMethodHeaderParameter", seiMethodHeaders);
+                } catch (AxisFault e) {
+                    if (log.isDebugEnabled()) {
+                        log.debug("Problem caching seiMethodHeaderParameter.  " +
+                                        "Processing continues without cached value");
                     }
                 }
+                
             }
             
-            // examine handlers
-            understoodHeaders = getHandlersHeaderParameterList(axisService);
+            // Get the understood headers from the handlers
+            ArrayList handlerHeaders = getHandlersHeaderParameterList(axisService);
             if (log.isDebugEnabled()) {
-                log.debug("Adding headers from SOAP handlers; headers = " + understoodHeaders);
+                log.debug("Adding headers from SOAP handlers; headers = " + handlerHeaders);
             }
-            if (understoodHeaders != null && !understoodHeaders.isEmpty()) {
-                returnList.addAll(understoodHeaders);
+            
+            // Make the combined headers list.
+            // The following code avoids making temporary array lists for performance/gc
reasons
+            if (seiMethodHeaders == null || seiMethodHeaders.isEmpty()) {
+                headers = (handlerHeaders == null) ? EMPTY_LIST : handlerHeaders;  // Return
handler headers
+            } else if (handlerHeaders == null || handlerHeaders.isEmpty()) {
+                headers = (seiMethodHeaders == null) ? EMPTY_LIST : seiMethodHeaders;  //
Return sei method headers
+            } else {
+                headers = new ArrayList();
+                headers.addAll(seiMethodHeaders);
+                headers.addAll(handlerHeaders);
             }
         }
-        return returnList;
+        return headers;
     }
     
     /**



Mime
View raw message