TP3: handlers, JAX-RS

Préambule

On travaillera sur le service AlbumDataService du TP précédent. Le TP dure deux séances et est à rendre pour le dimanche 27/11/2011, comme précédement via la forge pour par envoi mail du zip du dépôt (sans les binaires).

Handlers

Liens

Handler de log

Dans le sous-projet services-impl, créer une classe tiw5.services.handlers.LogHandler pour implémenter un handler qui va afficher l'élément principal des messages reçus et envoyés, ainsi que la date. Pour cela, la classe doit implémenter l'interface LogicalHandler<LogicalMessageContext>, le log se faisant dans la méthode handleMessage.

Configurer le service dans web-interface pour utiliser le handler et tester avec soapUI.

Ajout d'information

Créer une classe tiw5.services.handlers.UserHandler étendant SOAPHandler<SOAPMessageContext>. Si un élément {http://master-info.univ-lyon1.fr/M2TI/TIW5/services}user 1) est dans le header SOAP, prendre sa valeur et ajouter au contexte un propriété user avec cette valeur. Procéder de même pour l'élément {http://master-info.univ-lyon1.fr/M2TI/TIW5/services}password2).

Question optionnelle: Modifier le WSDL pour y intégrer les déclarations de header (voir ici).

Intégrer ce handler de tel façon qu'il soit exécuté avant le handler de log sur un message entrant. Modifier le handler de log de façon à afficher la propriété user. Tester avec SOAPUI.

Authentification

Créer un handler supplémentaire tiw5.services.handlers.AuthHandler qui vérifie que le couple user/password fait bien partie des logins autorisés. Ce handler utilisera une liste de couples user/password pris dans un fichier XML. En cas d'échec sur l'authentification, on pourra lancer une exception SOAPFaultException ou ProtocolException (selon le type de handler).

Remarques:

  • On pourra au besoin créer des classes dans le modèle les annoter en JAXB pour simplifier l'écriture du handler.
  • Pour la suite des TPs, il est conseillé d'implanter la vérification dans une classe distincte du handler.

Ajouter au bon endroit le handler dans la chaîne du service AlbumDataService. Tester avec SOAPUI.

Contrôle d'accès

Créer un handler tiw5.services.handlers.AccessControlHandler qui vérifie que l'utilisateur a bien le droit de modifier un album. On considère que ce droit porte sur tous les albums et qu'il est spécifié dans le fichier XML du handler précédent.

Ajouter au bon endroit le handler dans la chaîne du service AlbumDataService. Tester avec SOAPUI.

JAX-RS

Liens

Publication AlbumDataService en REST

Annoter la classe AlbumDataService de manière à pouvoir exposer ce service en REST en utilisant entre autre les annotations suivantes:

  • @Path
  • @GET, @PUT
  • @PathParam
  • @Produces, @Consumes

Modifier le fichier services.xml pour déployer un point d'accès REST pour AlbumDataService.

Bien penser aux dépendances maven à ajouter (c.f. http://cxf.apache.org/docs/jax-rs.html).

1)
l'URI entre accolade est le namespace
2)
avec la propriété password