简体   繁体   中英

How to set timeout to JAX-RS client with CXF

I am working on a Rest Client and I am using CXF with JAX-RS .

The problem that I have is that I cannot find any way to override the default timeout values of the client.

A simple client:

Client client = ClientBuilder.newClient();
WebTarget target = client.target("http://localhost:8080/MyApp");
target = target.path("jsp/Test.jsp");
Response response = target.request().get();

I have read that there are two timeout properties in CXF called ReceiveTimeout and ConnectionTimeout but I have not managed to find a way to set them in my client.

I have tried client.property("ReceiveTimeout", 5000); but it doesn't work.

I have seen examples of using an xml configuration file to configure the client but I prefer not to take that path if it is possible.

Any ideas?

HTTPConduit conduit = WebClient.getConfig(webClient).getHttpConduit();
conduit.getClient().setConnectionTimeout(1000 * 3);
conduit.getClient().setReceiveTimeout(1000 * 3);

You can find the correct properties in org.apache.cxf.jaxrs.client.spec.ClientImpl: "http.connection.timeout" and "http.receive.timeout"

So just use them as property when building the client:

ClientBuilder.newClient().property("http.receive.timeout", 1000);

With JAX-RS 2.1 (supported from CXF 3.2) you can use these standard methods in ClientBuilder:

connectTimeout(long timeout, TimeUnit unit);
readTimeout(long timeout, TimeUnit unit);

See also: https://github.com/eclipse-ee4j/jaxrs-api/issues/467

You can try something like this:

HTTPConduit http = (HTTPConduit) client.getConduit();
HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();
httpClientPolicy.setConnectionTimeout(30000);
http.setClient(httpClientPolicy);

see http://cxf.apache.org/javadoc/latest/org/apache/cxf/transports/http/configuration/HTTPClientPolicy.html

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM