eservices-tp1: web services

13
TP 1: Services Web JAX-WS et JAX-RS avec IntelliJ-IDEA Cours eServices - GL5 GL5 - 2015-2016 TP 1 ESERVICES MME. LILIA SFAXI 1 Objectifs du TP Utiliser IntelliJ-IDEA pour la création de services web SOAP et REST, ainsi que leurs clients.

Upload: lilia-sfaxi

Post on 09-Apr-2017

374 views

Category:

Technology


5 download

TRANSCRIPT

Page 1: eServices-Tp1: Web Services

TP 1: Services Web JAX-WS et JAX-RS avec IntelliJ-IDEA

Cours eServices - GL5

GL5 - 2015-2016

TP 1 ESERVICES MME. LILIA SFAXI �1

Objectifs du TP

Utiliser IntelliJ-IDEA pour la création de services web SOAP et REST, ainsi que leurs clients.

Page 2: eServices-Tp1: Web Services

I. Environnement de développementIntelliJ-IDEA est un environnement de développement intégré (IDE) en Java. Il est 1

développé par l’entreprise JetBrains, et disponible en édition communautaire avec une licence Apache 2, ainsi qu’une édition commerciale propriétaire.

La version utilisée dans ce TP est la version "Ultimate Edition 14.1.*" On aura également besoin du serveur d’application Tomcat (version 7 ou plus) pour le déploiement des services web, et d’un client SOAP-UI pour les tests des services web.

II. Les Services Web avec JAX-WS1. JAX-WSJAX-WS (Java API for XML - Web Services) est une API permettant de développer des 2

services web étendus en utilisant le protocole SOAP et le langage WSDL via la plateforme de développement JAVA.

Le développement de Services Web avec JAX-WS est basé sur des POJO (Plain Old Java Object). Les fonctionnalités de base pour le développement de Web Services avec JAX-WS requièrent simplement l’utilisation d’annotations Java.

IntelliJ-IDEA: https://www.jetbrains.com/idea/ 1

JAX-WS: http://jax-ws.java.net/ 2

TP 1 ESERVICES MME. LILIA SFAXI �2

Page 3: eServices-Tp1: Web Services

La figure suivante montre l’architecture d’un système utilisant JAX-WS. 3

Il existe deux façons pour développer un service web avec JAX-WS : 1. Approche Top-Down (Contract First) : permet, à partir d’un document WSDL, de générer les squelettes des différentes classes Java, de compléter leur implémentation, puis de les compiler, déployer et tester. 2. Approche Bottom-Up (Code First) : permet de créer et d’annoter un POJO, de le compiler, déployer et tester, puis de générer automatiquement le document WSDL.

2. Axis 2 Axis2 est un moteur de web services SOAP/WSDL, successeur de Apache Axis. Il 4

existe deux implémentations de ce moteur: Apache Axis2/Java et Apache Axis2/C.

Figure extraite du cours Développer des Services Web Étendus avec Java : JAX-WS, par Mickaël 3

BARON.

Axis2: http://axis.apache.org/axis2/java/core/4

TP 1 ESERVICES MME. LILIA SFAXI �3

Page 4: eServices-Tp1: Web Services

3. Première Application JAX-WS: HelloWorld1. Création du service webComme indiqué précédemment, deux approches sont possibles pour créer un service web  : une approche Bottom-Up et une approche Top-Down. L’approche qui nous intéresse pour ce TP (et celle le plus communément utilisée) est l’approche Bottom-Up (Code first). Pour créer un service web en utilisant l’approche Bottom-Up, nous allons suivre les étapes suivantes : • Créer un nouveau projet de type Web Services, en choisissant l’implémentation Axis2,

et l’appeler sampleServer.

• Le code généré aura l’allure suivante:

TP 1 ESERVICES MME. LILIA SFAXI �4

Page 5: eServices-Tp1: Web Services

• Désigner la classe comme service web, et la méthode sayHelloWorldFrom comme WebMethod. Pour cela, ajouter à la main, ou en utilisant le quick-fix (l’ampoule jaune ), les annotations nécessaires.

• Le code obtenu sera comme suit:

• Configurer ensuite le serveur Tomcat (que vous aurez préalablement installé dans l’emplacement de votre choix). Pour cela, aller dans les préférences de l’IDE (File -> Settings) puis naviguer vers Build, Execution, Deployment -> Application Servers. Ajouter votre serveur Tomcat dans la liste des serveurs (si ce n’est déjà fait) en le configurant correctement.

• Configurer ensuite votre environnement d’exécution de manière à ce que Tomcat soit démarré et le service déployé. Pour cela, aller vers Run -> Edit Configurations… et: - Sélectionner le serveur d’application Tomcat que vous venez de configurer, en

cliquant sur + (en haut de la fenêtre) et en sélectionnant dans la liste Tomcat Server -> Local

- Appeler votre configuration Tomcat, par exemple. Décocher la case After launch pour éviter qu’une nouvelle fenêtre de navigateur s’affiche à chaque exécution

- Sous l’onglet Deployment, ajouter un nouvel artifact à déployer (dans notre cas, un fichier war). Pour cela, cliquer sur le + en bas de la fenêtre, et choisir Artifact… Un nouvel artifact sampleServer:war exploded va s’ajouter à la liste de déploiement.

- Modifier les informations concernant cet artifact en cliquant sur le stylo - La fenêtre suivante s’affiche:

TP 1 ESERVICES MME. LILIA SFAXI �5

Page 6: eServices-Tp1: Web Services

- Un message d’erreur apparait en bas de la fenêtre, indiquant que la bibliothèque AX-WS-Apache-Axis n’est pas installée. Cliquer sur Fix… puis Add JAX-WS-Apache-Axis to the artifact. Cliquer ensuite sur OK.

- Revenir vers l’onglet Server. Modifier l’action on Update pour qu’elle re-déploie le service à chaque lancement, au lieu de redémarrer le serveur.

• Cliquer ensuite sur Run (le bouton en haut à droite de votre fenêtre). Bien vérifier, sur la console de votre IDE, que l’artifact est bien déployé, et que le serveur a démarré. Ces messages doivent donc y figurer (entre autres):

• Vérifier que le service web est bien déployé en ouvrant dans votre navigateur préféré: http://localhost:8080/services

• Générer le fichier WSDL à partir de ce service web. Pour cela, aller à Tools -> Web Services -> Generate WSDL from Java Code.

2. Création du client JavaNous allons maintenant créer un client Java qui va consommer le web service que nous avons créé. • Créer un nouveau projet de type Web Services Client en générant un code client

Axis2, et l’appeler sampleClient.

TP 1 ESERVICES MME. LILIA SFAXI �6

Page 7: eServices-Tp1: Web Services

• Sous le répertoire src de votre projet, créer un package intitulé client. • Faites un clic droit sur le répertoire client, et aller vers New -> Web Service Client. • Appeler votre client HWClient. Vous devez également indiquer quel service vous

désirez consommer en donnant son WSDL. Là, vous avez le choix: - Soit vous donnez l’URL du WSDL que vous venez de déployer, dans notre cas :

http://localhost:8080/services/HelloWorld?wsdl - Soit vous naviguez vers le fichier WSDL que vous avez généré à partir du projet

précédent. • Vous remarquerez que plusieurs classes ont été créées pour permettre l’utilisation de

votre service web. Corriger la classe WSClient en remplaçant: - RemoteHost par HelloWorld_PortType - get() par getHelloWorld() - businessMethod() par sayHelloWorldFrom(“GL5")

• Afficher le résultat de la méthode sayHelloWorldFrom sur la sortie standard (console). • Exécuter la classe. Le résultat obtenu sera comme suit:

3. Test du service web avec le client SoapUILe serveur d’application qui héberge le service peut parfois être inaccessible à l’utilisateur. On dispose donc d’autres outils pour tester notre service web. On cite par exemple l’outil soapUI qui est une solution de test open source et multi-plateforme, permettant de créer rapidement et facilement des tests fonctionnels, grâce à une interface graphique intuitive. • Installer l’outil soapui (il est inutile d’installer Hermer JMS). • Pour tester votre service, créer un nouveau projet intitulé HelloWorldTest et donner

l’URL du fichier WSDL du service HelloWorldService (ou bien le chemin du fichier WSDL généré). Cliquer ensuite sur OK.

TP 1 ESERVICES MME. LILIA SFAXI �7

Page 8: eServices-Tp1: Web Services

• Double-cliquer sur Request1. La fenêtre suivante va s’ouvrir. • Le premier cadre représente la requête soap, et le second représente la réponse. Pour

tester le service, taper GL5 à la place du « ? » dans la balise <arg0> ?</arg0> • Cliquer sur la flèche et observer le résultat.

IV. Les Services Restful avec JAX-RS1. Présentation de RESTREST (Representational State Transfer) est un style d’architecture basé sur les standards Web et le protocole http. Il a été présenté en premier lieu par Roy Fielding en 2000. Dans une architecture basée sur REST : • Tout est Ressource. Une ressource est accédée via une interface basée sur les

méthodes http standard. • Il existe un serveur REST qui fournit l’accès aux ressources, et un client REST qui

accède et modifie les ressources REST. • Chaque ressource doit supporter les opérations HTTP communes. Elle est identifiée

par un ID global (typiquement un URI) • Les ressources peuvent avoir des représentations différentes (texte, xml, json…). Le

client REST peut exiger des représentations spécifiques via le protocole HTTP (négociation de contenu).

Les Méthodes httpLes méthodes PUT, GET, POST et DELETE sont utilisées dans les architectures à base de REST. • GET définit un accès en lecture de la ressource. Il ne change jamais la ressource • PUT crée une nouvelle ressource • DELETE supprime une ressource • POST met à jour une ressource existante et peut en créer des nouvelles Les services web RESTfulLes services web RESTful sont basés sur les méthodes http et le concept de REST, Ils définissent un URI de base pour les services, les types MIME (XML, Text, JSON, …) et l’ensemble des opérations supportées (POST, GET, PUT et DELETE).

2. Présentation de JAX-RSJava définit un support pour le standard REST via JAX-RS (Java API for RESTful Web Services). Il utilise des annotations pour simplifier le développement de services web REST. Ces annotations permettent de définir les ressources et les actions pouvant y être appliquées. Ces annotations prennent effet à l’exécution, pour générer les classes et artéfacts pour la ressource. Le tableau ci-dessous représente les annotations les plus utilisées dans JAX-RS :

TP 1 ESERVICES MME. LILIA SFAXI �8

Page 9: eServices-Tp1: Web Services

3. Première Application JAX-RS: HelloWorld1. Création du service webPour créer un service web RESTful en utilisant l’IDE IntelliJ: • Créer un nouveau projet de type RESTful Web Service, sans générer de code serveur

ni de code client. Indiquer que la bibliothèque utilisée sera installée plus tard.

Annotation Description@PATH Chemin URI indiquant où une classe Java sera hébergée. Par

exemple /helloworld. Il est également possible d’insérer des variables dans un URI, par exemple, il est possible de demander le nom de l’utilisateur et le passer à l’application dans le chemin : /helloworld/{username}

@GET Une méthode Java annotée avec @GET désigne une requête de type HTTP GET. Le comportement de la ressource est déterminé par la méthode HTTP à laquelle la ressource répond.

@POST Désigne une méthode correspondant à la requête HTTP POST.

@PUT Désigne une méthode correspondant à la requête HTTP PUT.

@DELETE Désigne une méthode correspondant à la requête HTTP DELETE.

@HEAD Désigne une méthode correspondant à la requête HTTP HEAD.

@PathParam Désigne un paramètre pouvant être extrait à partir de l’URI, pour être utilisé par la ressource. Le nom du paramètre entré correspond au nom de la variable définie dans l’annotation @PATH

@Consumes Utilisée pour spécifier le type de représentation MIME qu’une ressource peut consommer, et qui sont envoyées par le client.

@Produces Utilisée pour spécifier le type de représentation MIME qu’une ressource peut produire, et envoyer au client.

TP 1 ESERVICES MME. LILIA SFAXI �9

Page 10: eServices-Tp1: Web Services

• Faire un clic droit sur le projet, et choisir Add Framework Support… Ajouter le framework Maven, ainsi que le support Web (en cochant Web Application, et en s’assurant que Create web.xml est bien coché)

• Dans le fichier pom.xml généré, définir le groupID de votre projet (com.example.jersey par exemple) et ajouter la dépendance pour la bibliothèque jersey, version 1.18.3, une API JAX-RS standard et portable, permettant de simplifier le développement de services web RESTful:

TP 1 ESERVICES MME. LILIA SFAXI �10

Page 11: eServices-Tp1: Web Services

• Cliquer sur Enable Auto-Import sur le popup qui s’affiche (figure ci-dessus). • Dans le répertoire src/main/java, créer un nouveau package portant le nom de votre

groupID. • Créer dans ce package une ressource HelloWorld.java, comme suit:

• Configurer le serveur Tomcat (si ce n’est déjà fait). • Créer une nouvelle configuration pour l’exécution, de la même manière que pour JAX-

WS. Dans la fenêtre de configuration de l’artifact, double cliquer sur les deux bibliothèques se trouvant dans la case Available Elements, pour les ajouter au fichier war généré.

• Configurer votre fichier web.xml en ajoutant le code suivant: (Attention, la param-value du paramètre com.sun.jersey.config.property.packages doit être votre nom de package)

• Exécuter l’application. Une fois le serveur démarré et le service déployé, vous pourrez voir le résultat en tapant sur votre navigateur:

http://localhost:8080/hello

2. Ajout de paramètres à la requêtePour ajouter des paramètres à la requête, deux choix sont possibles: • Utiliser l’annotation @PathParam(<param_name>), ce qui permettra d'ajouter le

paramètre comme élément de l’URL appelée. Le code aura alors l’allure suivante:

TP 1 ESERVICES MME. LILIA SFAXI �11

Page 12: eServices-Tp1: Web Services

L’URI de la ressource sera alors de la forme suivante: http://localhost:8080/hello/nom/GL5

• Utiliser l’annotation @QueryParam(<param_name>), ce qui permettra d’utiliser la notation des paramètres. Le code aura alors l’allure suivante:

L’URI de la ressource sera alors de la forme suivante: localhost:8080/hello?nom=GL5

3. Test du service RESTful avec IntelliJIntelliJ offre un mécanisme pour tester facilement les services web RESTful. • Aller à Tools -> Test Restful Web Service • Une vue REST Client s’affichera en bas de votre écran:

• Si c’est le PathParam qui est utilisé, alors il faut remplacer le contenu de Path par /hello/nom/GL5, puis cliquer sur la flèche verte .

• Si on a utilisé le QueryParam, alors il faut ajouter un nouveau Request Parameter avec nom comme nom, et GL5 comme valeur.

4. Création d’un client Java Il est très facile de consommer un service RESTful en utilisant Java. Il suffit d’utiliser Jersey. • Créer un projet de type RESTful Web Service, et de laisser l’IDE télécharger les

bibliothèques nécessaires (notamment Jersey). • Modifier la version de Jersey vers 1.12. Pour cela, aller vers File -> Project Structure ->

Libraries. Sélectionner la bibliothèque Jersey, puis cliquer sur Change Version. • Écrire le code suivant dans la classe HelloWorldClient générée.

TP 1 ESERVICES MME. LILIA SFAXI �12

Page 13: eServices-Tp1: Web Services

• Ne pas oublier de modifier le chemin utilisé dans la méthode resource selon la méthode de paramètrage choisie.

• Lancer la classe normalement.

TP 1 ESERVICES MME. LILIA SFAXI �13