[ 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)