Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
enseignement:tp:sw:handlers-rest:2014 [2014/10/28 20:32]
ecoquery
enseignement:tp:sw:handlers-rest:2014 [2014/11/04 13:18] (Version actuelle)
ecoquery [Rendu]
Ligne 1: Ligne 1:
-====== Handlers JAX-WS ======+====== JAX-RS, Handlers & Filters ======
  
 L'objectif de ce TP est de mettre en place: L'objectif de ce TP est de mettre en place:
Ligne 12: Ligne 12:
  
  
-Ce TP est à rendre pour le mercredi 05/11/2014. Le rendu se fera par l'intermédiaire d'un projet forge (on fera attention a bien donner au moins le rôle "reporter" à Emmanuel Coquery et à Lionel Medini) contenant:+Ce TP est à rendre pour le mercredi 17/11/2014 <del>05/11/2014</del>. Le rendu se fera par l'intermédiaire d'un projet forge (on fera attention a bien donner au moins le rôle "reporter" à Emmanuel Coquery et à Lionel Medini) contenant:
     * le projet maven mis à jour par vos soins (//**sans**// le répertoire ''target'')     * le projet maven mis à jour par vos soins (//**sans**// le répertoire ''target'')
     * un fichier README.txt contenant au moins les noms, prénoms et numéros d'étudiants du binôme. Toute autre information à transmettre aux enseignants (e.g. justifications de choix techniques) se fera dans ce fichier.     * un fichier README.txt contenant au moins les noms, prénoms et numéros d'étudiants du binôme. Toute autre information à transmettre aux enseignants (e.g. justifications de choix techniques) se fera dans ce fichier.
Ligne 93: Ligne 93:
 ==== Récupération de l'objet client ==== ==== Récupération de l'objet client ====
  
-Créer un handler logique d'authentification qui ajoute une propriété ''client'' contenant un objet ''Client'' correspondant à la propriété ''client-id''. Si le client n'existe pas, le handler interdit l'accès au service. Ajouter l'intercepteur dans la chaîne des services et tester. On pourra créer un ensemble de clients pour le test via un test JUnit dans le projet ''services'' en utilisant JPA, ou via toute autre méthode, e.g. utilisation de script d'init SQL, etc.+Créer un handler logique d'authentification qui ajoute une propriété ''client'' contenant un objet ''Client'' correspondant à la propriété ''client-id''. Si le client n'existe pas, le handler interdit l'accès au service.  
 + 
 +Ajouter l'intercepteur dans la chaîne des services et tester. On pourra créer un ensemble de clients pour le test via un test JUnit dans le projet ''services'' en utilisant JPA, ou via toute autre méthode, e.g. utilisation de script d'init SQL, etc.
  
 ==== Débit du compte client ==== ==== Débit du compte client ====
  
 Ajouter un champ ''double valeurCompte'' dans la classe Client. Ajouter un champ ''double valeurCompte'' dans la classe Client.
 +
 +Modifier l'API du service (interface ''IVODService'') de façon à supprimer le paramètre clientId de la méthode ''access''.
  
 Ajouter un champ de type ''javax.xml.ws.WebServiceContext'' dans la classe d'implémentation du service de vod. Ajouter un champ de type ''javax.xml.ws.WebServiceContext'' dans la classe d'implémentation du service de vod.
 Annoter ce champ avec ''@Resource'' afin que le contexte soit injecté via IoC.  Annoter ce champ avec ''@Resource'' afin que le contexte soit injecté via IoC. 
 La méthode ''getMessageContext()'' permet alors de récupérer le contexte du message et les propriétés qui ont été ajoutées par les handlers.  La méthode ''getMessageContext()'' permet alors de récupérer le contexte du message et les propriétés qui ont été ajoutées par les handlers. 
-Modifier le code métier du service pour, en plus, débiter le compte du client+Modifier le code métier du service pour
 +  - récupérer l'objet Client depuis le contexte 
 +  - débiter le compte du client 
 + 
 <note tip>Seules les propriétés dont le scope est MessageContext.Scope.APPLICATION peuvent être accédées dans le bean qui code le service. Il faut donc penser à changer le scope de la propriété ''client'' dans le handler d'authentification via <code java>ctx.setScope("client", Scope.APPLICATION);</code></note> <note tip>Seules les propriétés dont le scope est MessageContext.Scope.APPLICATION peuvent être accédées dans le bean qui code le service. Il faut donc penser à changer le scope de la propriété ''client'' dans le handler d'authentification via <code java>ctx.setScope("client", Scope.APPLICATION);</code></note>