You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by dk...@apache.org on 2012/09/11 18:05:14 UTC

svn commit: r1383462 - /cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/WrapperClassOutInterceptor.java

Author: dkulp
Date: Tue Sep 11 16:05:14 2012
New Revision: 1383462

URL: http://svn.apache.org/viewvc?rev=1383462&view=rev
Log:
If a bunch of threads try and create a helper at the same time, wastes memory and processing time.  Prevent that.

Modified:
    cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/WrapperClassOutInterceptor.java

Modified: cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/WrapperClassOutInterceptor.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/WrapperClassOutInterceptor.java?rev=1383462&r1=1383461&r2=1383462&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/WrapperClassOutInterceptor.java (original)
+++ cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/WrapperClassOutInterceptor.java Tue Sep 11 16:05:14 2012
@@ -73,19 +73,11 @@ public class WrapperClassOutInterceptor 
 
         if (wrapped != null) {
             MessageContentsList objs = MessageContentsList.getContentsList(message);
-
             WrapperHelper helper = parts.get(0).getProperty("WRAPPER_CLASS", WrapperHelper.class);
             if (helper == null) {
-                Service service = ServiceModelUtil.getService(message.getExchange());
-                DataBinding dataBinding = service.getDataBinding();
-                if (dataBinding instanceof WrapperCapableDatabinding) {
-                    helper = createWrapperHelper((WrapperCapableDatabinding)dataBinding,
-                                                 messageInfo, wrappedMsgInfo, wrapped);
-                    parts.get(0).setProperty("WRAPPER_CLASS", helper);
-                } else {
-                    return;
-                }
+                helper = getWrapperHelper(message, messageInfo, wrappedMsgInfo, wrapped, parts.get(0));
             }
+            
             try {
                 MessageContentsList newObjs = new MessageContentsList();
                 Object en = message.getContextualProperty(Message.SCHEMA_VALIDATION_ENABLED);
@@ -136,6 +128,24 @@ public class WrapperClassOutInterceptor 
     }
 
 
+    private synchronized WrapperHelper getWrapperHelper(Message message,
+                                           MessageInfo messageInfo,
+                                           MessageInfo wrappedMessageInfo,
+                                           Class<?> wrapClass,
+                                           MessagePartInfo messagePartInfo) {
+        WrapperHelper helper = messagePartInfo.getProperty("WRAPPER_CLASS", WrapperHelper.class);
+        if (helper == null) {
+            Service service = ServiceModelUtil.getService(message.getExchange());
+            DataBinding dataBinding = service.getDataBinding();
+            if (dataBinding instanceof WrapperCapableDatabinding) {
+                helper = createWrapperHelper((WrapperCapableDatabinding)dataBinding,
+                                             messageInfo, wrappedMessageInfo, wrapClass);
+                messagePartInfo.setProperty("WRAPPER_CLASS", helper);
+            }
+        }
+        return helper;
+    }
+
     private void ensureSize(List<?> lst, int idx) {
         while (idx >= lst.size()) {
             lst.add(null);