web-dev-qa-db-ja.com

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と呼ばれる2つのタイムアウトプロパティがあることを読みましたが、私のクライアントでそれらを設定する方法。

私はclient.property("ReceiveTimeout", 5000);を試しましたが、うまくいきません。

xml構成ファイルを使用してクライアントを構成する例を確認しましたが、可能であればそのパスを使用しない方がよいでしょう。

何か案は?

12
NikosDim

あなたはこのようなことを試すことができます:

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

2
isalgueiro
HTTPConduit conduit = WebClient.getConfig(webClient).getHttpConduit();
conduit.getClient().setConnectionTimeout(1000 * 3);
conduit.getClient().setReceiveTimeout(1000 * 3);
12
laughing buddha

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

8