Timeout webservice call from client side
Solution 1
A RESTEasy client typically uses Apache HttpClient to handle the network conversation.
You can override the HttpClient properties with your own custom timeout parameters:
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpParams params = httpClient.getParams();
HttpConnectionParams.setConnectionTimeout(params, connectionTimeoutMillis);
HttpConnectionParams.setSoTimeout(params, socketTimeoutMillis);
The first param allows you to specify timeout establishing the initial connection and the second allows you to specify the maximum period of time in which a socket will wait while no data is sent.
You can use the modified HttpClient to build your ClientExecutor:
ClientExecutor executor = new ApacheHttpClient4Executor(httpClient);
Which can be used in turn to build a ClientRequest object. Or you can inject it into a RestClientProxyFactoryBean if you are using a Spring configuration for RESTEasy.
It's not exactly the same as an absolute 5 second timeout, but depending on what you are trying to accomplish, tweaking these two properties will usually fill the bill.
Solution 2
If you prefer the builder pattern here is how you do it:
Client client = new ResteasyClientBuilder()
.establishConnectionTimeout(5, TimeUnit.SECONDS)
.socketTimeout(5, TimeUnit.SECONDS)
.build();
taken from here: http://blog.eisele.net/2014/12/setting-timeout-for-jax-rs-20-resteasy-client.html
Solution 3
The answer by Carter Page is correct for Apache HttpClient version >= 4.0.
For earlier versions of HttpClient (e.g. 3.1) the code is slightly different:
HttpClient httpClient = new HttpClient();
HttpConnectionParams params = httpClient.getHttpConnectionManager().getParams();
params.setConnectionTimeout(connectionTimeoutMillis);
params.setSoTimeout(socketTimeoutMillis);
ClientExecutor executor = new ApacheHttpClientExecutor(httpClient);
MyService service = ProxyFactory.create(MyService.class, URL, executor);
Related videos on Youtube
n002213f
(all-round polyglot) developer, (frequent) doer, (constant) dreamer, (wanna-be) writer, (proud-to-be) dad, (born) free vambita.com
Updated on May 31, 2022Comments
-
n002213f almost 2 years
I'm calling a webservice using RestEasy Client. One requirement is to abort/timeout the call if it runs for more that 5 seconds. How would I achieve this with RestEasy Client? I have only seen server side timeout, i.e. the Rest Easy websevice will timeout the request if it's not fulfilled within a certain time.
-
Bidisha over 7 yearsHow do we handle it? I mean I want to log if timeout occurs.
-
g.momo about 3 yearsCurrently both methods are deprecated