[4/7] cxf git commit: [CXF-6852] Some work on auto-cleanup of classloader for dynamic client

2017-03-22 Thread dkulp
[CXF-6852] Some work on auto-cleanup of classloader for dynamic client

# Conflicts:
#   
rt/frontend/simple/src/main/java/org/apache/cxf/endpoint/dynamic/DynamicClientFactory.java


Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/a4fad996
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/a4fad996
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/a4fad996

Branch: refs/heads/3.1.x-fixes
Commit: a4fad996752b933f0926a46dd0664c10bd1cfed2
Parents: b1227d6
Author: Daniel Kulp 
Authored: Wed Mar 22 14:32:31 2017 -0400
Committer: Daniel Kulp 
Committed: Wed Mar 22 15:21:56 2017 -0400

--
 .../endpoint/dynamic/DynamicClientFactory.java  | 27 +---
 1 file changed, 23 insertions(+), 4 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/cxf/blob/a4fad996/rt/frontend/simple/src/main/java/org/apache/cxf/endpoint/dynamic/DynamicClientFactory.java
--
diff --git 
a/rt/frontend/simple/src/main/java/org/apache/cxf/endpoint/dynamic/DynamicClientFactory.java
 
b/rt/frontend/simple/src/main/java/org/apache/cxf/endpoint/dynamic/DynamicClientFactory.java
index 2def391..d770095 100644
--- 
a/rt/frontend/simple/src/main/java/org/apache/cxf/endpoint/dynamic/DynamicClientFactory.java
+++ 
b/rt/frontend/simple/src/main/java/org/apache/cxf/endpoint/dynamic/DynamicClientFactory.java
@@ -283,6 +283,25 @@ public class DynamicClientFactory {
List bindingFiles) {
 return createClient(wsdlUrl.toString(), service, classLoader, port, 
bindingFiles);
 }
+
+static class DynamicClientImpl extends ClientImpl implements AutoCloseable 
{
+final ClassLoader cl;
+final ClassLoader orig;
+DynamicClientImpl(Bus bus, Service svc, QName port, 
+  EndpointImplFactory endpointImplFactory,
+  ClassLoader l) {
+super(bus, svc, port, endpointImplFactory);
+cl = l;
+orig = Thread.currentThread().getContextClassLoader();
+}
+@Override
+public void close() throws Exception {
+destroy();
+if (Thread.currentThread().getContextClassLoader() == cl) {
+Thread.currentThread().setContextClassLoader(orig);
+}
+}
+}
 
 public Client createClient(String wsdlUrl, QName service,
ClassLoader classLoader, QName port,
@@ -298,9 +317,6 @@ public class DynamicClientFactory {
 sf.setAllowElementRefs(allowRefs);
 Service svc = sf.create();
 
-ClientImpl client = new ClientImpl(bus, svc, port,
-   getEndpointImplFactory());
-
 //all SI's should have the same schemas
 SchemaCollection schemas = 
svc.getServiceInfos().get(0).getXmlSchemaCollection();
 
@@ -378,7 +394,7 @@ public class DynamicClientFactory {
 throw new IllegalStateException("Internal error; a directory 
returns a malformed URL: "
 + mue.getMessage(), mue);
 }
-ClassLoader cl = ClassLoaderUtils.getURLClassLoader(urls, classLoader);
+final ClassLoader cl = ClassLoaderUtils.getURLClassLoader(urls, 
classLoader);
 
 JAXBContext context;
 Map contextProperties = jaxbContextProperties;
@@ -402,6 +418,9 @@ public class DynamicClientFactory {
 databinding.setContext(context);
 svc.setDataBinding(databinding);
 
+ClientImpl client = new DynamicClientImpl(bus, svc, port,
+  getEndpointImplFactory(), 
cl);
+
 ServiceInfo svcfo = 
client.getEndpoint().getEndpointInfo().getService();
 
 // Setup the new classloader!



cxf git commit: [CXF-6852] Some work on auto-cleanup of classloader for dynamic client

2017-03-22 Thread dkulp
Repository: cxf
Updated Branches:
  refs/heads/master 013e6c800 -> e4cb2ea43


[CXF-6852] Some work on auto-cleanup of classloader for dynamic client


Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/e4cb2ea4
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/e4cb2ea4
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/e4cb2ea4

Branch: refs/heads/master
Commit: e4cb2ea437185caa28b95a2344ffa8aa0ba516b7
Parents: 013e6c8
Author: Daniel Kulp 
Authored: Wed Mar 22 14:32:31 2017 -0400
Committer: Daniel Kulp 
Committed: Wed Mar 22 15:19:07 2017 -0400

--
 .../endpoint/dynamic/DynamicClientFactory.java  | 27 +---
 1 file changed, 23 insertions(+), 4 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/cxf/blob/e4cb2ea4/rt/frontend/simple/src/main/java/org/apache/cxf/endpoint/dynamic/DynamicClientFactory.java
--
diff --git 
a/rt/frontend/simple/src/main/java/org/apache/cxf/endpoint/dynamic/DynamicClientFactory.java
 
b/rt/frontend/simple/src/main/java/org/apache/cxf/endpoint/dynamic/DynamicClientFactory.java
index 600a2f8..1640cfc 100644
--- 
a/rt/frontend/simple/src/main/java/org/apache/cxf/endpoint/dynamic/DynamicClientFactory.java
+++ 
b/rt/frontend/simple/src/main/java/org/apache/cxf/endpoint/dynamic/DynamicClientFactory.java
@@ -284,6 +284,25 @@ public class DynamicClientFactory {
 return createClient(wsdlUrl.toString(), service, classLoader, port, 
bindingFiles);
 }
 
+static class DynamicClientImpl extends ClientImpl implements AutoCloseable 
{
+final ClassLoader cl;
+final ClassLoader orig;
+DynamicClientImpl(Bus bus, Service svc, QName port, 
+  EndpointImplFactory endpointImplFactory,
+  ClassLoader l) {
+super(bus, svc, port, endpointImplFactory);
+cl = l;
+orig = Thread.currentThread().getContextClassLoader();
+}
+@Override
+public void close() throws Exception {
+destroy();
+if (Thread.currentThread().getContextClassLoader() == cl) {
+Thread.currentThread().setContextClassLoader(orig);
+}
+}
+}
+
 public Client createClient(String wsdlUrl, QName service,
ClassLoader classLoader, QName port,
List bindingFiles) {
@@ -298,9 +317,6 @@ public class DynamicClientFactory {
 sf.setAllowElementRefs(allowRefs);
 Service svc = sf.create();
 
-ClientImpl client = new ClientImpl(bus, svc, port,
-   getEndpointImplFactory());
-
 //all SI's should have the same schemas
 SchemaCollection schemas = 
svc.getServiceInfos().get(0).getXmlSchemaCollection();
 
@@ -378,7 +394,7 @@ public class DynamicClientFactory {
 throw new IllegalStateException("Internal error; a directory 
returns a malformed URL: "
 + mue.getMessage(), mue);
 }
-ClassLoader cl = ClassLoaderUtils.getURLClassLoader(urls, classLoader);
+final ClassLoader cl = ClassLoaderUtils.getURLClassLoader(urls, 
classLoader);
 
 JAXBContext context;
 Map contextProperties = jaxbContextProperties;
@@ -402,6 +418,9 @@ public class DynamicClientFactory {
 databinding.setContext(context);
 svc.setDataBinding(databinding);
 
+ClientImpl client = new DynamicClientImpl(bus, svc, port,
+  getEndpointImplFactory(), 
cl);
+
 ServiceInfo svcfo = 
client.getEndpoint().getEndpointInfo().getService();
 
 // Setup the new classloader!