Configuración del tiempo de espera de solicitudes para JAX-RS 2.0 Client API

He escrito una clase de cliente de servicio web REST simple que utiliza la API de cliente JAX-RS 2.0 para realizar solicitudes REST. Estoy tratando de averiguar cómo establecer un tiempo de espera de solicitud para cada invocación. Aquí está el código para una solicitud:

Client client = ClientBuilder.newBuilder().build(); WebTarget resourceTarget = client.target(restServiceUrl) .path("{regsysID}/{appointmentID}/") .resolveTemplate("regsysID", regSysId) .resolveTemplate("appointmentID", apptId); Invocation invocation = resourceTarget.request(MediaType.APPLICATION_JSON).buildPut(null); String createSessionJson = invocation.invoke(String.class); 

Puede hacerlo creando primero ClientConfig y proporcionándolo como argumento al crear el nuevo cliente.

 import org.glassfish.jersey.client.ClientProperties; ClientConfig configuration = new ClientConfig(); configuration.property(ClientProperties.CONNECT_TIMEOUT, 1000); configuration.property(ClientProperties.READ_TIMEOUT, 1000); Client client = ClientBuilder.newClient(configuration); 

Con Resteasy esto puede lograrse al construir su Cliente como tal.

 Client client = new ResteasyClientBuilder() .establishConnectionTimeout(2, TimeUnit.SECONDS) .socketTimeout(2, TimeUnit.SECONDS) .build(); 

No he visto una lista de propiedades de configuración estándar que pueda establecer a través de ClientBuilder.newClient(Configuration configuration) que se necesitaría para hacer esto portátil.

Nota: este es un nuevo método disponible en JAX-RS 2.1

Esta es una publicación muy antigua, pero el siguiente código funcionará tanto para jersey como para resteasy

 ClientBuilder clientBuilder=null; clientBuilder=clientBuilder.newBuilder(); clientBuilder.connectTimeout(10,TimeUnit.SECONDS); clientBuilder.readTimeout(12, TimeUnit.SECONDS); 

En primer lugar, debe agregar dependencias relevantes (aquí está para WildFly 10.1):

  org.apache.httpcomponents httpclient 4.5 provided   org.jboss.resteasy resteasy-client 3.0.14.Final provided  

A continuación, cree un Apache HttpClient normal y empújelo en RestEasy Enginge anulando un método, lo que causa el problema:

 // create here a normal Apache HttpClient with all parameters, that you need HttpClient httpClient = createHttpClient(connectTimeout, socketTimeout, connectionRequestTimeout, maxTotalHTTPConnections); // Deprecated Apache classes cleanup https://issues.jboss.org/browse/RESTEASY-1357 // Client Framework not honoring connection timeouts Apache Client 4.3 https://issues.jboss.org/browse/RESTEASY-975 ApacheHttpClient4Engine engine = new ApacheHttpClient4Engine(httpClient) { @Override protected void loadHttpMethod(ClientInvocation request, HttpRequestBase httpMethod) throws Exception { super.loadHttpMethod(request, httpMethod); httpMethod.setParams(new BasicHttpParams()); } }; return new ResteasyClientBuilder().httpEngine(engine).build(); 

Echa un vistazo a https://issues.jboss.org/browse/RESTEASY-975 Parece que el problema se resolvió en la versión 3.1.0.Final.