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]>.
