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

dkulp pushed a commit to branch 3.1.x-fixes
in repository https://gitbox.apache.org/repos/asf/cxf.git

commit 413309ad741bceb123c59682b9cbb16c9cac2106
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
    
    (cherry picked from commit 97cde56cd73cb03ffb259f01446080fa7748ab8b)
---
 .../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 238b801..ccfc94c 100644
--- a/core/src/main/java/org/apache/cxf/endpoint/ClientImpl.java
+++ b/core/src/main/java/org/apache/cxf/endpoint/ClientImpl.java
@@ -242,19 +242,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 a5db0e5..85a28e0 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