如何使用 CXF 为 JAX-RS 客户端设置超时
How to set timeout to JAX-RS client with CXF
我在 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 中有两个超时属性,分别称为 ReceiveTimeout
和 ConnectionTimeout
,但我还没有找到设置它们的方法在我的客户中。
我试过client.property("ReceiveTimeout", 5000);
,但没用。
我看过使用 xml 配置文件来配置客户端的示例,但如果可能的话我不想采用该路径。
有什么想法吗?
您可以尝试这样的操作:
HTTPConduit http = (HTTPConduit) client.getConduit();
HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();
httpClientPolicy.setConnectionTimeout(30000);
http.setClient(httpClientPolicy);
您可以在 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);
HTTPConduit conduit = WebClient.getConfig(webClient).getHttpConduit();
conduit.getClient().setConnectionTimeout(1000 * 3);
conduit.getClient().setReceiveTimeout(1000 * 3);
我在 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 中有两个超时属性,分别称为 ReceiveTimeout
和 ConnectionTimeout
,但我还没有找到设置它们的方法在我的客户中。
我试过client.property("ReceiveTimeout", 5000);
,但没用。
我看过使用 xml 配置文件来配置客户端的示例,但如果可能的话我不想采用该路径。
有什么想法吗?
您可以尝试这样的操作:
HTTPConduit http = (HTTPConduit) client.getConduit();
HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();
httpClientPolicy.setConnectionTimeout(30000);
http.setClient(httpClientPolicy);
您可以在 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);
HTTPConduit conduit = WebClient.getConfig(webClient).getHttpConduit();
conduit.getClient().setConnectionTimeout(1000 * 3);
conduit.getClient().setReceiveTimeout(1000 * 3);