Implementación de clientes que utilizan el cliente Apache Wink REST

Puede utilizar el cliente Apache Wink REST para enviar solicitudes y respuestas de proceso desde los servicios RESTful. Puede utilizar la API del cliente en programas Java™ para comunicarse con los servicios web.

Acerca de esta tarea

De forma predeterminada, el cliente Apache Wink utiliza la clase java.net.HttpURLConnection desde el entorno de ejecución Java para emitir informes y respuestas de proceso. El cliente Apache Wink también utiliza Apache HttpClient 4.0 como transporte de cliente subyacente.

También puede utilizar proveedores de entidades JAX-RS como ayuda a la hora de serializar entidades de solicitud o deserializar entidades de respuesta. Los proveedores de JAX-RS estándar que se utilizan en los servicios del lado del servidor JAX-RS se proporcionan con el cliente.

Puede configurar el cliente Apache Wink REST mediante programación o estableciendo propiedades de la máquina virtual Java (JVM).

Para implementar un cliente Apache Wink REST, debe crear en primer lugar un objeto org.apache.wink.client.ClientConfig que se utilice, a continuación, para crear org.apache.wink.client.RestClient. Puede cambiar los valores de configuración del objeto RestClient mediante programación o puede utilizar propiedades de JVM para modificar los valores de objeto ClientConfig predeterminado.

Para configurar los valores de configuración del objeto RestClient mediante programación, inicie los métodos públicos del objeto ClientConfig.
Nota: Después de utilizar un objeto ClientConfig para crear un objeto RestClient, el objeto ClientConfig ya no se puede modificar. Si intenta hacerlo, como resultado se genera un mensaje de error enorg.apache.wink.client.ClientConfigException.
Como alternativa, puede configurar los valores de configuración para el objeto RestClient utilizando las propiedades de JVM para modificar los valores predeterminados de objeto ClientConfig. Utilice las propiedades de JVM siguientes para modificar los valores de objeto ClientConfig predeterminados:
wink.client.readTimeout

Esta propiedad especifica cuánto tiempo (en milisegundos) espera el objeto RestClient una respuesta a las solicitudes antes de que termine el tiempo de espera. Un valor de 0 significa que el cliente espera una cantidad de tiempo ilimitada y no se excede el tiempo de espera.

El valor predeterminado es de 60.000 milisegundos.

wink.client.connectTimeout

Utilice esta propiedad para especificar cuánto tiempo espera el objeto RestClient (en milisegundos) antes de que exceda el tiempo de espera al intentar conectar con el recurso de destino. Un valor de 0 significa que el cliente espera una cantidad de tiempo ilimitada y no se excede el tiempo de espera.

El valor predeterminado es de 60.000 milisegundos.

Mediante programación puede modificar los valores para el objeto RestClient que especifique mediante las propiedades de JVM. Los valores programáticos prevalecen sobre cualquier otro valor de propiedad JVM.

Procedimiento

  1. Cree un objeto org.apache.wink.client.ClientConfig.
    El fragmento de código siguiente ilustra cómo crear un objeto org.apache.wink.client.ClientConfig:
    org.apache.wink.client.ClientConfig clientConfig = new org.apache.wink.client.ClientConfig();
    .
    Si utiliza un cliente Apache HTTP como transporte subyacente, cree y utilice en su lugar un objeto org.apache.wink.client.ApacheHttpClientConfig. El fragmento de código siguiente ilustra cómo crear un objeto org.apache.wink.client.ApacheHttpClientConfig:
    org.apache.wink.client.ClientConfig clientConfig = new org.apache.wink.client.ApacheHttpClientConfig();
  2. (opcional) Modifique los valores de objeto ClientConfig predeterminados que desea utilizar para el objeto RestClient.
    • Opcionalmente, puede modificar los valores de configuración predeterminados para el objeto RestClient mediante programación. Para especificar los valores de configuración para el objeto RestClient mediante programación, inicie los métodos públicos del objeto ClientConfig; por ejemplo:
      clientConfig.connectTimeout(30000);
      clientConfig.readTimeout(30000);
    • Si va a utilizar el cliente ligero para JAX-RS como un entorno de ejecución de cliente no gestionado autónomo, opcionalmente puede modificar los valores de configuración para el objeto RestClient utilizando propiedades JVM. Establezca las propiedades JVM personalizadas en la JVM en la que el cliente ligero se está ejecutando.
    • Si no está utilizando el cliente ligero para JAX-RS como un entorno de tiempo de ejecución de cliente autónomo, pero está utilizando el objeto RestClient en una aplicación que se ha diseñado para la instalación en el servidor de aplicaciones, opcionalmente puede modificar los valores de configuración para el objeto RestClient utilizando las propiedades JVM. Establezca las propiedades JVM personalizadas mediante la consola administrativa para el código de cliente REST que se ejecuta en una aplicación que está instalada en el servidor de aplicaciones. Consulte la información sobre las propiedades personalizadas de la máquina virtual Java para obtener más información sobre el uso de la consola administrativa para establecer estas propiedades personalizadas de la JVM.
  3. (opcional) Si utiliza un proveedor de entidades personalizado, añada el proveedor de la entidad utilizando la configuración del cliente.
    org.apache.wink.client.ClientConfig clientConfig = new org.apache.wink.client.ClientConfig();
    
    javax.ws.rs.core.Application app = new javax.ws.rs.core.Application() {
           public Set<Class<?>> getClasses() {
               Set<Class<?>> classes = new HashSet<Class<?>>();
               classes.add(MyCustomEntityProvider.class);
               return classes;
           }
    };
    clientConfig.applications(app);
  4. Cree un objeto org.apache.wink.client.RestClient object con la configuración del cliente.
    org.apache.wink.client.ClientConfig clientConfig = new org.apache.wink.client.ClientConfig();
    
    javax.ws.rs.core.Application app = new javax.ws.rs.core.Application() {
           public Set<Class<?>> getClasses() {
               Set<Class<?>> classes = new HashSet<Class<?>>();
               classes.add(MyCustomEntityProvider.class);
               return classes;
           }
    };
    clientConfig.applications(app);
    
    org.apache.wink.client.RestClient client = new org.apache.wink.client.RestClient(clientConfig);
  5. Cree un objeto org.apache.wink.client.Resource con un URI desde el cliente REST.
    org.apache.wink.client.ClientConfig clientConfig = new org.apache.wink.client.ClientConfig();
    
    javax.ws.rs.core.Application app = new javax.ws.rs.core.Application() {
           public Set<Class<?>> getClasses() {
               Set<Class<?>> classes = new HashSet<Class<?>>();
               classes.add(MyCustomEntityProvider.class);
               return classes;
           }
    };
    clientConfig.applications(app);
    
    org.apache.wink.client.RestClient client = new org.apache.wink.client.RestClient(clientConfig);
    
    org.apache.wink.client.Resource resource = client.resource(“http://www.example.com/rest/api/book/123”);
  6. Puede añadir cabeceras de solicitud a la solicitud pendiente mediante métodos de invocación en el objeto Recurso.
    Puede invocar a un método Java como, por ejemplo, post() con el contenido de solicitud como parámetro para enviar la solicitud. En el ejemplo siguiente, se realiza una solicitud HTTP POST con el valor de cabecera de tipo contenido text/plain y un valor de cabecera Accept */*.
    org.apache.wink.client.ClientConfig clientConfig = new org.apache.wink.client.ClientConfig();
    
    javax.ws.rs.core.Application app = new javax.ws.rs.core.Application() {
           public Set<Class<?>> getClasses() {
               Set<Class<?>> classes = new HashSet<Class<?>>();
               classes.add(MyCustomEntityProvider.class);
               return classes;
           }
    };
    clientConfig.applications(app);
    
    org.apache.wink.client.RestClient client = new org.apache.wink.client.RestClient(clientConfig);
    
    org.apache.wink.client.Resource resource = client.resource(“http://www.example.com/rest/api/book/123”);
    
    ClientResponse response = resource.contentType(“text/plain”).accept(“*/*”).post(“The request body as a string”);
    En lugar de invocar a resource.post("The request body as a string") con un objeto String, puede utilizar cualquier otro objeto que tenga una clase con un objeto javax.ws.rs.ext.MessageBodyWriter válido como, por ejemplo, una clase anotada JAXB, un byte[] o una clase personalizada que tenga un proveedor de entidades personalizado.
  7. Procese la respuesta utilizando el código de estado, las cabeceras de respuesta o el cuerpo de mensaje de la respuesta.
    org.apache.wink.client.ClientConfig clientConfig = new org.apache.wink.client.ClientConfig();
    
    javax.ws.rs.core.Application app = new javax.ws.rs.core.Application() {
           public Set<Class<?>> getClasses() {
               Set<Class<?>> classes = new HashSet<Class<?>>();
               classes.add(MyCustomEntityProvider.class);
               return classes;
           }
    };
    clientConfig.applications(app);
    
    org.apache.wink.client.RestClient client = new org.apache.wink.client.RestClient(clientConfig);
    
    org.apache.wink.client.Resource resource = client.resource(“http://www.example.com/rest/api/book/123”);
    
    ClientResponse response = resource.contentType(“text/plain”).accept(“*/*”).post(“The request body as a string”);
        
    System.out.println(“The response code is: “ + response.getStatusCode());
    System.out.println(“The response message body is: “ + response.getEntity(String.class));
    En lugar de invocar al objeto response.getEntity(String.class) con el archivo String.class, puede utilizar cualquier otra clase que tenga un objeto javax.ws.rs.ext.MessageBodyReader válido como, por ejemplo, una clase anotada JAXB, un byte[] o una clase personalizada que tenga un proveedor de entidades personalizado.
  8. (opcional) Configure el cliente para transmitir señales de seguridad de autenticación básica. Para configurar la autenticación básica para el cliente, puede elegir gestionar usted mismo las cabeceras HTTP correspondientes o también puede utilizar la clase del manejador BasicAuthSecurityHandler que se proporciona. La clase BasicAuthSecurityHandler simplifica la habilitación de la autenticación básica en la aplicación cliente Wink. Para obtener más información sobre la utilización del manejador del cliente de seguridad para que lleve a cabo la autenticación básica de HTTP, consulte las aplicaciones de seguridad JAX-RS en la información del contenedor web.

Resultados

Ha implementado un cliente JAX-RS utilizando el cliente Apache Wink REST que puede emitir solicitudes para una aplicación de JAX-RS.


Icon that indicates the type of topic Task topic



Timestamp icon Last updated: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_jaxrs_impl_client_winkrestclient
File name: twbs_jaxrs_impl_client_winkrestclient.html