如何使用CXF为JAX-RS客户端设置超时
我正在使用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);
请参阅http://cxf.apache.org/javadoc/latest/org/apache/cxf/transports/http/configuration/HTTPClientPolicy.html
HTTPConduit conduit = WebClient.getConfig(webClient).getHttpConduit(); conduit.getClient().setConnectionTimeout(1000 * 3); conduit.getClient().setReceiveTimeout(1000 * 3);
您可以在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/jax-rs/api/issues/467
- prologexception中不允许的内容
- 调用webservice的问题 – javax.xml.ws.WebServiceException和类没有名称的属性
- 使用NTLM到SharePoint的CXF SOAP客户端
- 如何为Apache-CXF JAX-WS启用Spring Security
- SSL通信中的Apache CXFexception:SocketTimeOut
- CXF客户端SOAP消息格式化
- CXF如何在没有Spring的情况下在CXF端口上设置SoapVersion
- 为什么我会出现握手失败(Java SSL)
- 在CXF +简单前端+ Aegis数据绑定中,SOAP响应错误地反序列化为null