Implémentation de clients utilisant le client Apache Wink REST

Vous pouvez utiliser le client Apache Wink REST pour envoyer des demandes et traiter les réponses des services RESTful. Vous pouvez utiliser l'API client dans des programmes Java™ pour communiquer avec les services Web.

Pourquoi et quand exécuter cette tâche

Par défaut, le client Apache Wink utilise la classe java.net.HttpURLConnection de l'environnement d'exécution Java pour générer les demandes et traiter les réponses. Le client Apache Wink peut aussi utiliser Apache HttpClient 4.0 comme transport de client sous-jacent.

Vous pouvez également utiliser des fournisseurs d'entité JAX-RS pour sérialiser les entités de demande ou désérialiser les entités de réponse. Les fournisseurs JAX-RS standard utilisés dans les services par le serveur JAX-RS sont fournis avec le client.

Vous pouvez configurer le client Apache Wink REST de façon programmée ou en définissant les propriétés JVM (Java Virtual Machine).

L'implémentation d'un client Apache Wink REST nécessite la création préalable d'un objet org.apache.wink.client.ClientConfig, utilisé ensuite pour construire un objet org.apache.wink.client.RestClient. Vous pouvez modifier de façon programmée les paramètres de configuration de l'objet RestClient, ou utilisez les propriétés JVM pour modifier les valeurs par défaut de l'objet ClientConfig.

Pour définir de façon programmée les paramètres de configuration de l'objet RestClient, démarrez les méthodes publiques de l'objet ClientConfig.
Remarque : Un objet ClientConfig qui a été utilisé pour construire un objet RestClient n'est plus modifiable. Toute tentative dans ce sens aboutirait à l'émission d'un message d'erreur org.apache.wink.client.ClientConfigException.
Vous pouvez également définir les paramètres de configuration de l'objet RestClient en utilisant les propriétés JVM pour modifier les valeurs de l'objet ClientConfig. Utilisez les propriétés JVM suivantes pour modifier les valeurs par défaut de l'objet ClientConfig :
wink.client.readTimeout

Cette propriété définit la durée (en millisecondes) pendant laquelle l'objet RestClient attend une réponse aux demandes avant d'expirer. La valeur 0 signifie que le client attend pendant une durée illimitée et qu'il n'expire jamais.

La valeur par défaut est 60,000 millisecondes.

wink.client.connectTimeout

Cette propriété définit la durée d'attente avant expiration (en millisecondes) de l'objet RestClient lorsqu'il tente de se connecter à la ressource cible. La valeur 0 signifie que le client attend pendant une durée illimitée et qu'il n'expire jamais.

La valeur par défaut est 60,000 millisecondes.

Toutes les valeurs de l'objet RestClient définies à l'aide des propriétés JVM peuvent être modifiées à l'aide d'un programme. Les valeurs par programmation ont la priorité sur les valeurs des propriétés JVM.

Procédure

  1. Créez un objet org.apache.wink.client.ClientConfig.
    Le fragment de code suivant illustre la façon de créer un objet org.apache.wink.client.ClientConfig :
    org.apache.wink.client.ClientConfig clientConfig = new org.apache.wink.client.ClientConfig();
    .
    Si vous utilisez un client HTTP Apache comme transport sous-jacent, créez et utilisez un objet org.apache.wink.client.ApacheHttpClientConfig à la place. Le fragment de code suivant illustre la façon de créer un objet org.apache.wink.client.ApacheHttpClientConfig :
    org.apache.wink.client.ClientConfig clientConfig = new org.apache.wink.client.ApacheHttpClientConfig();
  2. (Facultatif) Modifiez les valeurs par défaut de l'objet ClientConfig à utiliser pour l'objet RestClient.
    • Vous pouvez, si vous le souhaitez, modifier de façon programmée les paramètres de configuration par défaut de l'objet RestClient. Pour définir à l'aide d'un programme les paramètres de configuration de l'objet RestClient, démarrez les méthodes publiques de l'objet ClientConfig, par exemple :
      clientConfig.connectTimeout(30000);
      clientConfig.readTimeout(30000);
    • Si vous utilisez le client léger Thin Client for JAX-RS dans un environnement d'exécution de client non géré autonome, vous pouvez, si vous le souhaitez, modifier les paramètres de configuration de l'objet RestClient en utilisant les propriétés JVM. Définissez les propriétés JVM personnalisées sur la machine virtuelle Java sur laquelle s'exécute le client léger.
    • Si vous n'utilisez pas Thin Client for JAX-RS en tant qu'environnement d'exécution de client autonome, mais que vous utilisez l'objet RestClient dans une application prévue pour une installation sur le serveur d'applications, vous pouvez, si vous le souhaitez, modifier les paramètres de configuration de l'objet RestClient en utilisant les propriétés JVM. Définissez les propriétés JVM à l'aide de la console d'administration pour le code du client REST qui s'exécute dans une application installée sur le serveur d'applications. Pour plus de détails sur l'utilisation de la console d'administration pour définir les propriétés JVM personnalisées, consultez les informations sur les propriétés personnalisées de la machine virtuelle Java.
  3. (Facultatif) Si vous utilisez un fournisseur d'entité personnalisé, ajoutez le fournisseur en utilisant la configuration client.
    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. Créez un objet org.apache.wink.client.RestClient avec la configuration client.
    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. Créez un objet org.apache.wink.client.Resource avec un identificateur URI à partir du client 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. Vous pouvez ajouter des en-têtes à la demande en attente en appelant des méthodes sur l'objet Resource.
    Vous pouvez appeler une méthode Java, telle que post(), avec le contenu de la demande sous la forme d'un paramètre à envoyer à la demande. Dans l'exemple suivant, une requête HTTP POST est effectuée avec la valeur d'en-tête Content-Type, text/plain et la valeur d'en-tête 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”);
    Au lieu d'appeler resource.post("The request body as a string") avec un objet String, vous pouvez utiliser n'importe quel autre objet ayant une classe avec un objet valide javax.ws.rs.ext.MessageBodyWriter, telle qu'une classe annotée JAXB, un byte[] ou une classe personnalisée ayant un fournisseur d'entité personnalisé.
  7. Traitez la réponse en utilisant le code d'état, les en-têtes de réponse ou le corps de message de réponse.
    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));
    Au lieu d'appeler l'objet response.getEntity(String.class) avec le fichier String.class, vous pouvez utiliser n'importe quelle autre classe ayant un objet valide javax.ws.rs.ext.MessageBodyReader, telle qu'une classe annotée JAXB, un byte[] ou une classe personnalisée ayant un fournisseur d'entité personnalisé.
  8. (Facultatif) Configurez le client pour envoyer des jetons de sécurité d'authentification de base. Pour configurer l'authentification de base pour le client, vous pouvez gérer vous-même les en-têtes HTTP appropriés ou utiliser la classe de gestionnaire BasicAuthSecurityHandler fournie. La classe BasicAuthSecurityHandler simplifie l'activation de l'authentification de base dans l'application client Wink. Pour plus d'informations sur l'utilisation du gestionnaire client de sécurité pour exécuter l'authentification HTTP de base, voir les informations relatives à la protection des applications JAX-RS dans le conteneur Web.

Résultats

Vous avez implémenté un client JAX-RS en utilisant le client Apache Wink REST qui peut envoyer des demandes à une application JAX-RS.


Icône indiquant le type de rubrique Rubrique de tâche



Icône d'horodatage Dernière mise à jour: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_jaxrs_impl_client_winkrestclient
Nom du fichier : twbs_jaxrs_impl_client_winkrestclient.html