M2 SIR 2016-2017 TP2 : Création et tests de services Web basés SOAP Objectif du TP L’objectif de ce TP est de realiser des services Web SOAP en utilisant la librairie Spring et de tester ces services en utilisant SOAPUI. Environnement de développement Environnement de developpement : IDE Netbeans JDK 6 ou 7 Serveur TomEE Plus 1.7.1 Librairies : Spring 2.5.6 I. Prise en main de JAX-WS Spring Web Services Pour cette partie, vous allez developper un service Spring. Vous allez reprendre le meme exemple de service pour le calcul de la somme de deux entiers et suivre les etapes suivantes : 1. Création d’un projet Maven Télécharger le serveur TomEE plus1 Ajouter ce serveur à Netbeans en le renommant TomEE plus. Créer une Maven Web application que vous nommerez « Spring_WS » : nouveau projetMavenWeb application et lui associer le serveur TomEE Plus. Maven est un outil de construction de projets (build) open source développé par la fondation Apache. Il permet de gérer des dépendances vis-à-vis des bibliothèques nécessaires au projet. 2. Création du service Web Définir l’interface du service « CalculService » (java interface) et l’implémentation du service (java class) « CalculServiceImpl ». Pour créer le service Web, vous avez besoin d’annoter l’interface « CalculService » avec l’annotation JAX-WS qui consiste à indiquer qu’il s’agit d’un service Web. Déclarer la méthode de l’interface annotée. 3. Configuration de Spring et des dépendances Définir les dépendances2 de Jax-ws et Spring3 dans le fichier « pom.xml » <!—Jax-ws framework --> <dependency> <groupId>com.sun.xml.ws</groupId> <artifactId>jaxws-rt</artifactId> <version>2.2.7</version> </dependency> <!-- Spring framework --> 1 http://tomee.apache.org/download/tomee-1.7.1.html https://maven.apache.org/guides/introduction/introduction -to-dependency-mechanism.html 3 https://mvnrepository.com/artifact/org.springframework 2 Page 1 M2 SIR 2016-2017 <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring-version}</version> <exclusions> <exclusion> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring-version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>${spring-version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring-version}</version> </dependency> <!-- JAX-WS/Spring integration --> <dependency> <groupId>org.jvnet.jax-ws-commons.spring</groupId> <artifactId>jaxws-spring</artifactId> <version>1.8</version> <exclusions> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring</artifactId> </exclusion> </exclusions> </dependency> Configurer le fichier « web.xml » (standard deployment descriptor) qui se trouve sous Webapp/WEB-INF. Ce fichier contient la définition des servlets4. <web-app> <!-- this is for Spring --> <listener> <listenerclass>org.springframework.web.context.ContextLoaderListener</list ener-class> </listener> <!-- these are for JAX-WS --> <servlet> <servlet-name>jaxws-servlet</servlet-name> <servletclass>com.sun.xml.ws.transport.http.servlet.WSSpringServlet</serv let-class> 4 https://jax-ws-commons.java.net/spring/ Page 2 M2 SIR 2016-2017 </servlet> <servlet-mapping> <servlet-name>jaxws-servlet</servlet-name> <url-pattern>/add</url-pattern> </servlet-mapping> ... if you deploy more services, you might need more <servlet-mapping>s ... </web-app> Configurer le fichier « applicationContext.xml » qui est le fichier de configuration de Spring5. Il doit se trouver sous sous Webapp/WEB-INF. Ce fichier va comporter les espaces de noms, les imports de fichiers, la définition des beans et le endpoint. Voici un exemple : <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ws="http://jax-ws.dev.java.net/spring/core" xmlns:wss="http://jax-ws.dev.java.net/spring/servlet" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://jax-ws.java.net/spring/core http://jax-ws.java.net/spring/core.xsd http://jax-ws.java.net/spring/servlet http://jax-ws.java.net/spring/servlet.xsd"> <wss:binding url="/add" service="#addService" /> <wss:binding url="/sub"> <wss:service><!-- nested bean is of course fine --> <ws:service bean="#myService" /> </wss:service> </wss:binding> <!-- this bean implements web service methods --> <bean id="myService" class="foo.MyService" /> <!-- simplest definition only needs the class name --> <ws:service id="addService" impl="foo.MyAddService" handlers="#myHandler"/> <bean id="myHandler" class="foo.MyHandler" /> 4. Déploiement de l’application Déployer l’application sur TomEE plus en faisant un run du projet. Vous allez ajouter un nouveau service qui réalise le produit de deux entiers et redéployer votre projet. 5. Test du service 5 Tester votre service avec SOAPUI. Quels noms portent les arguments ? Ajouter les annotations nécessaires à votre service. http://cxf.apache.org/docs/writing-a-service-with-spring.html Page 3 M2 SIR 2016-2017 II .Service Web de Réservation de vols avec Maven et Spring L’objectif de cet exercice est de creer une application Maven pour la reservation de vols. Le service Web doit pouvoir : Lister les vols selon un critère de recherche : villes et pays de départ et d’arrivée, jour et horaire de départ. Fournir des opérations pour la gestion d’une réservation pour un client donné. 1. Creer une application de type Maven Web Application que vous nommerez « TripBooking ». 2. Pour les vols : o Creer la classe Vols qui represente les vols. Chaque vol aura un identifiant, un pays et une ville de depart, un pays et une ville d’arrivee et une heure de depart. o Creer une interface representant la description du service Web avec des methodes permettant l’ajout d’un vol, d’afficher l’ensemble des vols et de rechercher un vol par son numéro. o Créer la classe implémentant l’interface 3. Pour la reservation : o Creer une classe pour la reservation de vols. Une reservation aura un numero et le vol concerne. o Creer une classe permettant l'acces au service Web de Reservation. Vous allez definir des methodes pour la creation d’une reservation, la liste des reservations, de recherche de reservation a partir d’un numero et de suppression d’une reservation. 4. Déployer et Tester vos services. III. Client des services Pays, aéroport et réservation Vous allez ecrire un client qui affiche la liste des vols, des reservations, de creer une reservation de vol et d’afficher l’aeroport du pays de votre choix et la devise utilisee par le pays destination en invoquant des services Web existants. Le client developpe en Java se compose de trois parties. Page 4 M2 SIR 2016-2017 Etape 1 : Création d’un projet Java Vous allez creer un projet que vous nommerez « TripBookingClient ». Une fois le projet cree, vous pouvez ajouter soit une interface graphique dans le projet (choisir New/JFrame Form ; saisir ensuite JFrame1 comme nom de la classe puis cliquer sur Finish) soit utiliser Java EE avec les EJB (JSP, Servlet, …). Etape 2 : Conception de la couche d’affichage Vous allez concevoir la partie affichage de telle sorte a avoir la liste des vols des aeroports du pays selectionne, des reservations et la devise utilisee par le pays destination. Etape 3 : Création de la couche SOAP En plus des services precedemment crees, vous allez invoquer deux services : Airport Information Web Service : http://www.webservicex.net/New/Home/ServiceDetail/20 WSDL : http://www.webservicex.net/airport.asmx?WSDL Country Details : http://www.webservicex.net/New/Home/ServiceDetail/17 WSDL : http://www.webservicex.net/country.asmx?WSDL Etape 4 : Création de la couche XML (couche métier) Apres avoir cree le projet et ajoute les services Web a celui-ci, il est important d’associer les boutons/composants de votre interface graphique au declenchement des fonctions des services web permettant d’obtenir les aeroports, les vols, les reservations et la devise utilisee. Page 5