This is an automated email from the ASF dual-hosted git repository.

dkulp pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cxf.git


The following commit(s) were added to refs/heads/master by this push:
     new 97cde56  [CXF-7591] Allow getResponseContext().clear() to clear out 
everything to reduce memory usage
97cde56 is described below

commit 97cde56cd73cb03ffb259f01446080fa7748ab8b
Author: Daniel Kulp <[email protected]>
AuthorDate: Fri Dec 15 12:47:02 2017 -0500

    [CXF-7591] Allow getResponseContext().clear() to clear out everything to 
reduce memory usage
---
 .../java/org/apache/cxf/endpoint/ClientImpl.java   | 29 +++++++++++++++++-----
 .../cxf/jaxws/context/WrappedMessageContext.java   | 11 +++++---
 2 files changed, 31 insertions(+), 9 deletions(-)

diff --git a/core/src/main/java/org/apache/cxf/endpoint/ClientImpl.java 
b/core/src/main/java/org/apache/cxf/endpoint/ClientImpl.java
index 2d57879..59cbe7d 100644
--- a/core/src/main/java/org/apache/cxf/endpoint/ClientImpl.java
+++ b/core/src/main/java/org/apache/cxf/endpoint/ClientImpl.java
@@ -240,19 +240,36 @@ public class ClientImpl
 
     public Map<String, Object> getRequestContext() {
         if (isThreadLocalRequestContext()) {
-            if (!requestContext.containsKey(Thread.currentThread())) {
-                Map<String, Object> freshRequestContext = new 
ConcurrentHashMap<String, Object>(8, 0.75f, 4);
+            final Thread t = Thread.currentThread();
+            if (!requestContext.containsKey(t)) {
+                Map<String, Object> freshRequestContext = new 
ConcurrentHashMap<String, Object>(8, 0.75f, 4) {
+                    private static final long serialVersionUID = 1L;
+
+                    @Override
+                    public void clear() {
+                        super.clear();
+                        requestContext.remove(t);
+                    }
+                };
                 freshRequestContext.putAll(currentRequestContext);
-                requestContext.put(Thread.currentThread(), new 
EchoContext(freshRequestContext));
+                requestContext.put(t, new EchoContext(freshRequestContext));
             }
-            latestContextThread = Thread.currentThread();
-            return requestContext.get(Thread.currentThread());
+            latestContextThread = t;
+            return requestContext.get(t);
         }
         return currentRequestContext;
     }
     public Map<String, Object> getResponseContext() {
         if (!responseContext.containsKey(Thread.currentThread())) {
-            responseContext.put(Thread.currentThread(), new HashMap<String, 
Object>());
+            final Thread t = Thread.currentThread();
+            responseContext.put(t, new HashMap<String, Object>() {
+                private static final long serialVersionUID = 1L;
+                @Override
+                public void clear() {
+                    super.clear();
+                    responseContext.remove(t);
+                }
+            });
         }
         return responseContext.get(Thread.currentThread());
 
diff --git 
a/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/context/WrappedMessageContext.java
 
b/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/context/WrappedMessageContext.java
index 990e02f..d35cb0b 100644
--- 
a/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/context/WrappedMessageContext.java
+++ 
b/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/context/WrappedMessageContext.java
@@ -181,9 +181,14 @@ public class WrappedMessageContext implements 
MessageContext {
     }
 
     public void clear() {
-        //just clear the JAXWS things....
-        for (String key : jaxws2cxfMap.keySet()) {
-            remove(key);
+        if (message instanceof Message) {
+            //server side, just clear the JAXWS things....
+            //Otherwise lots of CXF things will not be found
+            for (String key : jaxws2cxfMap.keySet()) {
+                remove(key);
+            }
+        } else {
+            message.clear();
         }
     }
 

-- 
To stop receiving notification emails like this one, please contact
['"[email protected]" <[email protected]>'].

Reply via email to