CXF

2015-02-04 10 views
8

ile JAX-RS istemcisine zaman aşımı nasıl ayarlanır Bir Rest Client üzerinde çalışıyorum ve CXF kullanarak JAX-RS.CXF

Sahip olduğum sorun, istemcinin varsayılan zaman aşımı değerlerini geçersiz kılacak bir yol bulamadığım.

Basit istemci:

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

Ben ReceiveTimeout ve ConnectionTimeout denilen CXF iki zaman aşımı özellikleri olduğunu okudum ama benim istemci bunları ayarlamak için bir yol bulmak için yönetilen değil.

client.property("ReceiveTimeout", 5000);'u denedim ancak çalışmıyor.

İstemciyi yapılandırmak için xml yapılandırma dosyasını kullanma örnekleri gördüm, ancak bu yolu almamayı tercih ediyorum.

Herhangi bir fikrin var mı?

cevap

1

Böyle bir şey deneyebilirsiniz:

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

bkz http://cxf.apache.org/javadoc/latest/org/apache/cxf/transports/http/configuration/HTTPClientPolicy.html

Sen org.apache.cxf.jaxrs.client.spec.ClientImpl doğru özellikleri bulabilirsiniz
+0

bir 'getConduit() 'yöntem vardır javax.ws.rs.client.Client'. İstemci nesnesi hakkında daha fazla bilgi verebilir misiniz? – NikosDim

+0

Üzgünüz, cxf WebClient https://cxf.apache.org/javadoc/latest/org/apache/cxf/jaxrs/client/WebClient.html kullanmayı deneyin. Http://alvinalexander.com/java/jwarehouse/apache- cxf/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerResourceCreatedSpringProviderTest.java.shtml – isalgueiro

+1

CXF JAX-RS olsa bile, bu parametreleri özel CXF sınıfları kullanmadan ayarlamak için herhangi bir yolu var mı 2.0 kütüphanesi kullanıldı)? WAS Liberty Profile kullanıyorum ve sadece standart JAX-RS 2.0 sınıflarına, org.apache.cxf ... sınıflarına erişemiyorum (ve kodumun CXF'ye özel olarak gerekli String temelli özelliğinden başka client) – icordoba

6

: "http.connection

ClientBuilder.newClient().property("http.receive.timeout", 1000); 
: istemci oluştururken .timeout" ve "http.receive.timeout"

Dolayısıyla, sadece mülk olarak kullanabilirsinizEğer ClientBuilder bu, standart yöntemler kullanarak (CXF 3,2 desteklenir) 2.1 JAX-RS ile

de:

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

bakınız: https://github.com/jax-rs/api/issues/467

+0

Mükemmel, ipucu için ipucu – mtraut

+0

TomEE plume 7.0.4'de özellik ayarlarının hiçbir etkisi yoktur, zaman aşımı yaklaşık 20 saniyede kalır. 'connectTimeout' ve' readTimeout' kullanılamıyor. –

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