[
https://issues.apache.org/jira/browse/CXF-8992?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17926556#comment-17926556
]
Paul Bors commented on CXF-8992:
--------------------------------
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)