2015-02-04 11 views
8

Pracuję nad klientem odpoczynku i używam CXF z JAX-RS.Jak ustawić limit czasu dla klienta JAX-RS z CXF

Problem polega na tym, że nie mogę znaleźć żadnego sposobu na zastąpienie domyślnych wartości limitu czasu klienta.

Prosty klient:

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

Czytałem, że istnieją dwie właściwości limitu czasu w CXF zwane ReceiveTimeout i ConnectionTimeout ale nie udało się znaleźć sposób, aby ustawić je w moim klientem.

Próbowałem client.property("ReceiveTimeout", 5000);, ale to nie działa.

Widziałem przykłady użycia pliku konfiguracyjnego xml do skonfigurowania klienta, ale wolę nie brać tej ścieżki, jeśli jest to możliwe.

Wszelkie pomysły?

Odpowiedz

1

Można spróbować czegoś takiego:

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

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

+0

Nie ma 'getConduit()' metoda "javax.ws.rs.client.Client". Czy możesz podać więcej szczegółów na temat obiektu klienta? – NikosDim

+0

Przepraszam, spróbuj użyć WebClient cxf https://cxf.apache.org/javadoc/latest/org/apache/cxf/jaxrs/client/WebClient.html Przykład tutaj http://alvinalexander.com/java/jwarehouse/apache- cxf/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerResourceCreatedSpringProviderTest.java.shtml – isalgueiro

+1

Czy istnieje sposób na ustawienie tych parametrów bez użycia własnych klas CXF (nawet jeśli CXF to JAX-RS Używana biblioteka 2.0)? Używam WAS Liberty Profile i dlatego mam dostęp tylko do standardowych klas JAX-RS 2.0, bez klas org.apache.cxf ... (i chciałbym uniknąć tworzenia mojego kodu specyficznego dla CXF innego niż wymagana własność String dla klient) – icordoba

6

można znaleźć odpowiednie właściwości w org.apache.cxf.jaxrs.client.spec.ClientImpl: „http.connection .timeout”i "http.receive.timeout"

Więc po prostu wykorzystać je jako własność przy budowie klienta:

ClientBuilder.newClient().property("http.receive.timeout", 1000); 

z JAX-RS 2.1 (obsługiwane z CXF 3.2) można użyć tych standardowych metod w ClientBuilder:

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

Zobacz także: https://github.com/jax-rs/api/issues/467

+0

super, thx za podpowiedź – mtraut

+0

W piórze TomEE 7.0.4 ustawienia właściwości wydają się nie mieć wpływu, limit czasu pozostaje na około 20 sekund. 'connectTimeout' i' readTimeout' nie są dostępne. –

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