Hi Sergey, 

With  CXF-7122, we found that with ahc 4.1.0 afterwards, the ReceivedTimeout we 
set on ahc RequestConfig won't affect the connection return to the pool, so 
that the connection could be actually reused. So that CXF can rely on ahc to 
manage the ReceivedTimeout and don’t need that TimeoutThread(Timer) in CXF, so 
we remove that Timer in CXF-7122.

And we actually have AsyncHTTPConduitTest#testTimeout and 
AsyncHTTPConduitTest#testTimeoutAsync to cover both the sync and async calls 

@Test
    public void testTimeout() throws Exception {
        updateAddressPort(g, PORT);
        HTTPConduit c = (HTTPConduit)ClientProxy.getClient(g).getConduit();
        c.getClient().setReceiveTimeout(3000);
        try {
            assertEquals("Hello " + request, g.greetMeLater(-5000));
            fail();
        } catch (Exception ex) {
            //expected!!!
        }
    }

    @Test
    public void testTimeoutAsync() throws Exception {
        updateAddressPort(g, PORT);
        HTTPConduit c = (HTTPConduit)ClientProxy.getClient(g).getConduit();
        c.getClient().setReceiveTimeout(3000);
        try {
            Response<GreetMeLaterResponse> future = g.greetMeLaterAsync(-5000L);
            future.get();
            fail();
        } catch (Exception ex) {
            //expected!!!
        }
    }

Not sure what’s the real problem Veit run into, I will try to reproduce the 
error. 
-------------
Freeman(Yue) Fang

Red Hat, Inc. 
FuseSource is now part of Red Hat



> On Jan 12, 2017, at 8:42 PM, Sergey Beryozkin <sberyoz...@gmail.com> wrote:
> 
> Hi Veit,
> 
> I recall there was another update related to introducing a TimeoutThread, the 
> async conduit was ignoring the receiveTimeout for the async calls.
> 
> Hi Freeman, looks like that change affected the use of the async conduit for 
> the sync calls (this would affect both JAXWS & JAXRS), can you double check 
> please
> 
> Thanks, Sergey
> 
> 
> On 03/01/17 17:09, Veit Guna wrote:
>> Hi.
>> 
>> I just upgraded from 3.1.8 to 3.1.9 with the effect, that one of my
>> tests is failing now regarding the receiveTimeout set on HTTPClientPolicy.
>> I'm currently using CXF for JAX-RS client side proxy generation based on
>> my REST server interfaces. I'm also using the "use.async.http.conduit"
>> switch
>> to use the async http conduit.
>> 
>> The test is setting the receiveTimeout on the HTTPClientPolicy to 1 (ms)
>> like this:
>> 
>> JAXRSClientFactoryBean bean = new JAXRSClientFactoryBean();
>> ...
>> MyService myService = bean.create(MyService.class);
>> ClientConfiguration clientConfig = WebClient.getConfig(myService);
>> clientConfig.getResponseContext().put("buffer.proxy.response",
>> cacheResponses);
>> clientConfig.getRequestContext().put("use.async.http.conduit", true);
>> 
>> HTTPClientPolicy clientPolicy = clientConfig.getHttpConduit().getClient();
>> cllientPolicy.setReceiveTimeout(receiveTimeoutMillis);
>> clientPolicy.setConnectionTimeout(connectionTimeoutMillis);
>> 
>> Then it calls a status REST endpoint and expects a ProcessingException
>> to be thrown. But this is never thrown and the call succeeds.
>> In the past it failed as expected. I also switched to another endpoint
>> that takes a bit longer to respond but with the same effect.
>> Going back to 3.1.8 fixes the issue.
>> 
>> I took a look at the recent changes and found this:
>> 
>> https://issues.apache.org/jira/browse/CXF-7122
>> 
>> Maybe it is related to it?
>> 
>> Thanks!
>> 
>> 
>> 
>> 
>> 
>> 
>> 
>> 
> 
> 
> -- 
> Sergey Beryozkin
> 
> Talend Community Coders
> http://coders.talend.com/

Reply via email to