2015-02-04 22 views
8

Sto lavorando su un Rest Client e sto usando CXF con JAX-RS.Come impostare il timeout sul client JAX-RS con CXF

Il problema che ho è che non riesco a trovare alcun modo per ignorare i valori di timeout predefiniti del client.

un semplice client:

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

Ho letto che ci sono due proprietà di timeout a CXF chiamati ReceiveTimeout e ConnectionTimeout, ma non sono riusciti a trovare un modo per metterli nel mio client.

Ho provato client.property("ReceiveTimeout", 5000); ma non funziona.

Ho visto esempi di utilizzo di un file di configurazione xml per configurare il client ma preferisco non intraprendere quel percorso se è possibile.

Qualche idea?

risposta

1

Si può provare qualcosa di simile:

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

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

+0

Non c'è getConduit() metodo 'a il 'javax.ws.rs.client.Client'. Puoi fornire maggiori dettagli sull'oggetto client? – NikosDim

+0

Spiacenti, prova a utilizzare WebClient di cxf https://cxf.apache.org/javadoc/latest/org/apache/cxf/jaxrs/client/WebClient.html Esempio qui http://alvinalexander.com/java/jwarehouse/apache- cxf/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerResourceCreatedSpringProviderTest.java.shtml – isalgueiro

+1

C'è un modo per impostare questi parametri senza usare le classi propietarie CXF (anche se CXF è JAX-RS Libreria 2.0 utilizzata)? Uso il profilo WAS Liberty e quindi ho accesso solo alle classi standard JAX-RS 2.0, non alle classi org.apache.cxf ... (e vorrei evitare di rendere il mio codice specifico per CXF diverso dalla proprietà String basata necessaria per client) – icordoba

6

Potete trovare le proprietà corrette in org.apache.cxf.jaxrs.client.spec.ClientImpl: "http.connection .timeout" e "http.receive.timeout"

Quindi, solo usarli come proprietà quando si costruisce il cliente:

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

Con JAX-RS 2.1 (sostenuto da CXF 3.2) è possibile utilizzare questi metodi standard in ClientBuilder:

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

Vedi anche: https://github.com/jax-rs/api/issues/467

+0

great, thx per il suggerimento – mtraut

+0

In TomEE plume 7.0.4 le impostazioni delle proprietà sembrano non avere effetto, il timeout rimane a circa 20 secondi. 'connectTimeout' e' readTimeout' non sono disponibili. –

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