Déploiement d’un web service SOAP sur Tomcat 26 Septembre 2016 L’objectif de ce document est d’expliquer comment créer sa première application distribuée composée d’un serveur et d’un client qui communiquent avec le protocole SOAP. Ce document explique : 1. Les outils à télécharger et installer pour développer et déployer une telle application. Nous travaillerons avec l’IDE Eclipse et le langage java, 2. Les différentes étapes pour créer son propre service Web (utilisant SOAP) avec Eclipse et Tomcat, 3. Comment déployer l’application en local et à distance (sur un serveur Tomcat) ? 4. Comment invoquer le serveur à partir d’un client python ? Téléchargement des environnements de développement (Eclipse et Tomact) 1. Télécharger Eclipse IDE for Java EE Developers (Version Indigo) 2. Télécharger Tomcat 7 (http://tomcat.apache.org/download-70.cgi). Pour MAC, vous pouvez consulter ce lien YouTube : https://www.youtube.com/watch?v=wIbJ7tc5oGE Création d’un web service avec Eclipse et Tomcat 1. Dans Eclipse, créer un nouveau projet : New -> Project -> Web -> Dynamic Web Project 2. Nommez votre projet avec votre nom de famille (l’idée est de différencier votre application vis à vis des autres, lorsque vous le déployez sur un serveur public/commun Tomcat). Dans le cas où vous créez votre web service pour la première fois, sous « Target runtime », 1 choisir « New Runtime » et spécifier le dossier Tomcat téléchargé au préalable pour le « Tomcat installation directory » 3. Créez une nouvelle classe YOUR_NAME.com.web.service dans src du package 4. Ecrire le code suivant dans votre fichier (ne pas oublier de sauvegarder le fichier, lors de la création du web service. Eclipse ne le sauvegarde pas automatiquement) public class HelloWorld { public String toUpper (String s){ return s.toUpperCase(); } public String toLower (String s){ return s.toLowerCase(); } } 5. Lancer le web service : Clic droit sur le fichier classe qui vient d’être créée. Sélectionnez le menu Web Services -> Create Web Service. 6. Modifier la scroll bar sous « Client type » pour générer un « Test client » (cf. capture d’écran suivante). Ne pas oublier de cocher « Publish the Web service » & « Monitor the web service ». 2 7. Arrivé à ce stade, Eclipse doit lancer le serveur Tomcat avec votre web service. Il doit aussi générer le client(FAMILY_NAMEClient). Lorsque l’opération est achevée, Eclipse exécute le client. Le WSDL du service web déployé est disponible sur cet URL : http://localhost:8080/FAMILY_NAME/services/HelloWorld?wsdl (on suppose ici que le serveur Tomcat est déployé sur le port 8080. 3 8. On peut maintenant sélectionner les méthodes et les essayer. Par exemple toLower Déploiement du web service sur un serveur Tomcat Maintenant que le service est créé et testé en local, on peut l’exporter et le déposer sur un serveur Tomcat pour pouvoir y accéder. 1. Dans Eclipse, sélectionner votre serveur SOAP (projet Eclipse) et exporter un fichier .war : Export -> Web -> WAR file 2. Aller sur le serveur Tomcat disponible sur cette adresse : gw-hepiacloud.hesge.ch:10172/manager/html password : sdi2016) (login : student, et déployer le .war -> WAR file to deploy -> votre fichier war -> Deploy. Une fois cette étape réalisée, vous pouvez voir votre web service dans la liste. Votre wsdl est disponible sur ce lien : gwhepiacloud.hesge.ch:10172/FAMILY_NAME/services/HelloWorld?wsdl 3. Vous pouvez aussi générer automatiquement un client via le web (par exemple http://www.service-repository.com/client/start) en lui fournissant l’adresse URL du wsdl 4. Il est possible d’invoquer ce service via la commande curl. Pour le faire, il faut créer une enveloppe soap avec la méthode à invoquer et l’envoyer. Exemple : Enveloppe soap qui invoque la méthode toLower sur le texte « LOWER ME PLEASE » : 4 <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body> <toLower xmlns="http://service.web.com.abdennhader"> <s>LOWER ME PLEASE</s> </toLower> </soapenv:Body> </soapenv:Envelope> Ensuite, la commande curl à envoyer est la suivante : curl --header "Content-Type:text/xml;charset=utf-8" --header "SOAPAction:toLower" --data @SOAP_ENVELOPE_FILENAME http://gwhepiacloud.hesge.ch:10172/ FAMILY_NAME /services/HelloWorld Client python soap Il est aussi possible d’écrire un client python pour le même serveur Java développé précédemment. De nombreuses librairies existent, par exemple, suds. 1. Installation de suds : sudo pip install suds 2. Le client est très simple à écrire : import suds url = "http://gwhepiacloud.hesge.ch:10172/FAMILY_NAME/services/Helloworld?wsdl" client = suds.client.Client(url) print print print print client # Print info about invokable methods client.service.toLower ("LOWER ME") client.service.toUpper ("make me bigger"); client.last_received() # Print last content received in xml 5