[ 
https://issues.apache.org/jira/browse/CXF-8992?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17926556#comment-17926556
 ] 

Paul Bors edited comment on CXF-8992 at 2/12/25 11:46 PM:
----------------------------------------------------------

This is caused by a shallow copy of the ClientConfiguration inside the 
WebClient.fromClient() method that in turn calls 
WebClient.copyProperties() via:

newClient.setConfiguration(oldClient.getConfiguration());
 
If we change that to a deep copy, this issue goes away. Why? Because WebClient 
IS-A AbstractClient and when the original WebClient you copied is destroyed by 
the GC and the AbstractClient.finalize() is invoked... it calls 
AbstractClient.close() which in turn does a nice 
cfg = null;
 


was (Author: paulbors):
This is caused by a shallow copy of the ClientConfiguration inside the 
WebClient.fromClient() method that in turn calls 
WebClient.copyProperties() which via:
newClient.setConfiguration(oldClient.getConfiguration());
 
If we change that to a deep copy, this issue goes away. Why? Because WebClient 
IS-A AbstractClient and when the original WebClient you copied is destroyed by 
the GC and the AbstractClient.finalize() is invoked... it calls 
AbstractClient.close() which in turn does a nice 
cfg = null;
 

> WebClient.fromClient() broken due to garbage collection
> -------------------------------------------------------
>
>                 Key: CXF-8992
>                 URL: https://issues.apache.org/jira/browse/CXF-8992
>             Project: CXF
>          Issue Type: Bug
>          Components: JAX-RS
>    Affects Versions: 4.0.4
>            Reporter: Dennis
>            Priority: Major
>
> The following code throws an exception, probably because when one WebClient 
> instance is finalized, it also closes its transport, which is reused by other 
> instances.
> For URLs that don’t use HTTP2, a timeout exception is thrown instead, 
> probably due to the same reason.
> Is this a bug or am I using it incorrectly?
> {code:java}
> WebClient c = WebClient.create("https://www.google.com";);
>  
> System.out.println(WebClient.fromClient(c).get().getStatus());
> System.gc();
>  
> // java.io.EOFException: EOFException invoking https://www.google.com: HTTP/2 
> client stopped
> System.out.println(WebClient.fromClient(c).get().getStatus());
> {code}
> The same can also be reproduced using JAX RS WebTarget API:
> {code:java}
> WebTarget webTarget = 
> ClientBuilder.newClient().target("https://www.google.com";);
> System.out.println(webTarget.request().get().getStatus());
> System.gc();
> // java.io.EOFException: EOFException invoking https://www.google.com: HTTP/2 
> client stopped
> System.out.println(webTarget.request().get().getStatus());
> {code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to