====== TP Handlers JAX-WS ====== ===== Liens ===== * [[http://download.oracle.com/javase/6/docs/api/|Javadoc Java SE 6]], [[http://download.oracle.com/javaee/5/api/|Javadoc Java EE 5]] (en particulier javax.xml.ws.handler, javax.xml.ws.handler.soap) * [[http://jcp.org/aboutJava/communityprocess/mrel/jsr224/index3.html|Spec JAX-WS (JSR224)]], [[http://jax-ws.java.net/nonav/jaxws-api/2.2/index.html|Javadoc]] * [[http://jcp.org/aboutJava/communityprocess/mrel/jsr109/index2.html|Spec architecture JEE Web Services (JSR109)]] * [[http://cxf.apache.org/docs/jax-ws-configuration.html|Configuration dans CXF]] * [[http://jcp.org/aboutJava/communityprocess/mrel/jsr181/index.html|Configuration Standard]], [[http://java.sun.com/xml/ns/javaee/javaee_web_services_1_2.xsd|XML Schema]] ===== Travail ===== Reprendre un des services codé dans le [[sw-tp3-impl|TP précédent]] comme base. Le TP est à rendre sur [[http://spiral.univ-lyon1.fr/entree.asp?id=9055&objet=echangedocs|spiral]] pour le 23/12. Vous pouvez également partir du projet suivant: {{:enseignement:sw:storecalservicedummy.zip}} Le TP a été testé sur Tomcat avec la pile CXF. ==== Handler de log ==== Créer une classe 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, le log se faisant dans la méthode handleMessage. Configurer le service pour utiliser le handler et tester avec soapUI ==== Ajout d'information ==== Créer une classe étendant SOAPHandler. Si un élément ''{http://master-info.univ-lyon1.fr/M2TI/sw/store-cal/}user'' ((l'URI entre accolade est le namespace)) est dans le header SOAP, prendre sa valeur et ajouter au contexte un propriété ''user'' avec cette valeur. Question optionnelle: Modifier le WSDL pour y intégrer les déclarations de header (voir [[http://www.w3.org/TR/wsdl#_soap:header|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''. ==== Ajout d'information - 2 ==== Créer un handler supplémentaire qui, lors du stockage d'un calendrier, ajoute dans la base de donnée l'information de l'utilisateur ayant demandé ce stockage (le "propriétaire" du calendrier) et intégrer ce handler dans la chaine de handlers du service. ==== Contrôle d'accès ==== Ajouter un ou plusieurs handlers permettant d'effectuer un contrôle d'accès: * un utilisateur ne peut pas écraser un calendrier créé par un autre, * un utilisateur ne peut lire que les calendriers qu'il a lui même stocké. On pourra empêcher l'accès/la modification en lançant une exception SOAPFaultException ou ProtocolException (selon le type de handler). On fera attention à l'ordre des handlers dans la chaine. ===== Annexes ===== Exemple de fichier service.xml avec quelques handlers ainsi que de l'injection de dépendance((la classe DataSourceProvider contient simplement une méthode permettant de récupérer un Datasource pour établir une connexion au SGBD)): et le fichier web.xml qui l'utilise: StoreCalService contextConfigLocation classpath:m2ti/ti3/storecalservice/services.xml org.springframework.web.context.ContextLoaderListener CXFServlet org.apache.cxf.transport.servlet.CXFServlet CXFServlet /services/* 30 Datasource for StoreCalService jdbc/StoreCalDS javax.sql.DataSource Container index.jsp Fichier de configuration pour le tomcat exécuté via maven((''mvn tomcat:run'')), ''src/main/webapp/META-INF/context.xml'':