Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Timeout webservice call from client side

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.

like image 664
n002213f Avatar asked May 11 '11 14:05

n002213f


1 Answers

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.

like image 69
Carter Page Avatar answered Oct 08 '22 22:10

Carter Page