如何使用CXF为JAX-RS客户端设置超时

时间:2015-02-04 10:49:27

标签: java web-services rest cxf httpclient

我正在使用Rest Client,我正在使用 CXF JAX-RS

我遇到的问题是我找不到任何方法来覆盖客户端的默认超时值。

一个简单的客户:

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

我已经读过 CXF 中有两个名为ReceiveTimeoutConnectionTimeout的超时属性,但我还没有找到在客户端设置它们的方法。

我尝试了client.property("ReceiveTimeout", 5000);,但它不起作用。

我见过使用 xml 配置文件配置客户端的示例,但如果可能的话,我不想采用该路径。

有什么想法吗?

3 个答案:

答案 0 :(得分:11)

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

答案 1 :(得分:8)

您可以在org.apache.cxf.jaxrs.client.spec.ClientImpl中找到正确的属性: " http.connection.timeout"和" http.receive.timeout"

所以在构建客户端时只需将它们用作属性:

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

使用JAX-RS 2.1(从CXF 3.2支持),您可以在ClientBuilder中使用这些标准方法:

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

另请参阅:https://github.com/eclipse-ee4j/jaxrs-api/issues/467

答案 2 :(得分:2)

您可以尝试这样的事情:

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

请参阅http://cxf.apache.org/javadoc/latest/org/apache/cxf/transports/http/configuration/HTTPClientPolicy.html