Andy McCright created CXF-7644:

             Summary: TCK/CTS: JAX-RS async client requests should invoke 
interceptor chain on separate thread
                 Key: CXF-7644
             Project: CXF
          Issue Type: Bug
          Components: JAX-RS
    Affects Versions: 3.2.2
            Reporter: Andy McCright

The JAX-RS 2.1 TCK is using ClientRequestFilters to verify that it is on a 
separate thread than the main client thread.  Although it is not specific in 
the spec that providers like filters must be invoked on a new thread, I believe 
this line from the spec (section 8.4) is what they base this test on:
_Note that in this example, the call to get after calling async returns 
immediately without blocking the caller’s thread._


Currently, we call WebClient.doInvokeAsync(...) which calls 
prepareAsyncClient(...) which calls doRunInterceptorChain(...) - all on the 
main client thread. As a result the filters on the outbound chain get executed 
on the same thread which breaks the test.

I wrote a simpler test case that similarly breaks, but could use some help with 
how to implement the fix:


    public static class ThreadCheckFilter implements ClientRequestFilter {


        public void filter(ClientRequestContext context) throws IOException {

            final Thread currentThread = Thread.currentThread();








    public void 
testClientRequestFilterRunsOnSepaarateThreadWhenInvokedAsynchronously() throws 
Exception {

        final Thread currentThread = Thread.currentThread();

        Client client = ClientBuilder.newClient();


        WebTarget target ="http://localhost:8080/notReal";);

        AsyncInvoker invoker = target.request().async();

        Future<Response> future = invoker.get();

        Response response = future.get();




This message was sent by Atlassian JIRA

Reply via email to