如何使用 CXF 设置 JAX-RS 客户机的超时

2022-09-03 05:13:31

我正在处理 Rest 客户端,并且我正在将 CXFJAX-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配置文件来配置客户端的示例,但如果可能的话,我宁愿不采用该路径。

有什么想法吗?


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

答案 2

您可以在 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