Architectures Web Services WS-*



Documents pareils
Intégration d'applications à "gros grain" Unité d'intégration : le "service" (interface + contrat)

Architectures Web Services RESTful

Cours Master Recherche RI 7 Extraction et Intégration d'information du Web «Services Web»

Introduction aux «Services Web»

4. SERVICES WEB REST 46

Les Services Web. Jean-Pierre BORG EFORT

Programmation Web Avancée Introduction aux services Web

L3 informatique TP n o 2 : Les applications réseau

On Feature Interaction among Web Services Michael Weiss et Babak Esfandiari

COMPRENDRE L ARCHITECTURE DES WEB SERVICES REST. Amosse EDOUARD, Doctorant

Architecture JEE. Objectifs attendus. Serveurs d applications JEE. Architectures JEE Normes JEE. Systèmes distribués

Application Web et J2EE

Microsoft Technopoche

BPEL Orchestration de Web Services

INF8007 Langages de script

RMI le langage Java XII-1 JMF

Étude de faisabilité d'une application SOAP avec un système embarqué

Gilles.Roussel univ-mlv.fr HTTP/1.1 RFC 2068

XML, PMML, SOAP. Rapport. EPITA SCIA Promo janvier Julien Lemoine Alexandre Thibault Nicolas Wiest-Million

HTTP HTTP. IUT1 dpt SRC L Isle d Abeau Jean-françois Berdjugin. Introduction et architecture Messages Authentification Conclusion

Java et les WebServices :

Messagerie asynchrone et Services Web

WEBSERVICES. Michael Fortier. Master Informatique 2ème année. A308, Université de Paris 13

Tutoriel: Création d'un Web service en C++ avec WebContentC++Framework

Classification : public 1/59

UNIVERSITÉ DU QUÉBEC EN OUTAOUAIS

Volet Synchrone pour Client Lourd

RMI. Remote Method Invocation: permet d'invoquer des méthodes d'objets distants.

Web Application Models

Serveurs de noms Protocoles HTTP et FTP

Les Architectures Orientées Services (SOA)

RFC 7230 : Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing

HTTP 1.1. HyperText Transfer Protocol TCP IP ...

SOAP Concepts Application à Glassfish

Architecture Orientée Service, JSON et API REST

Urbanisation des SI Conduite du changement IT 20/03/09. Patrick CHAMBET

Remote Method Invocation (RMI)

Manuel d implémentation des Web Services Sous Axis1 et Axis2/Tomcat/linux. Par Pr Bouabid EL OUAHIDI

Protocoles Applicatifs

Applications et Services WEB: Architecture REST


Les nouvelles architectures des SI : Etat de l Art

Les services web. Plan. Définitions et généralités Architecture et technologies au cœur des services web

Web Tier : déploiement de servlets

Faculté de Génie Chaire industrielle en infrastructures de communication. La technologie XML. Wajdi Elleuch

Le cadre des Web Services Partie 1 : Introduction

Introduction à HTTP. Chapitre HTTP 0.9

TP JEE Développement Web en Java. Dans ce TP nous commencerons la programmation JEE par le premier niveau d une application JEE : l application web.

(structure des entêtes)

Module BD et sites WEB

1 Introduction Propos du document Introduction De HTTP 1.0 à HTTP

Mise en œuvre des serveurs d application

Les services usuels de l Internet

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

INTERNET est un RESEAU D ORDINATEURS RELIES ENTRE EUX A L ECHELLE PLANETAIRE. Internet : interconnexion de réseaux (anglais : net = réseau)

CORBA. (Common Request Broker Architecture)

«Cachez-moi cette page!»

Internet. DNS World Wide Web. Divers. Mécanismes de base Exécution d'applications sur le web. Proxy, fire-wall

Introduction aux. services web 2 / 2

Composants Logiciels. Le modèle de composant de CORBA. Plan

Architectures n-tiers et déploiement d applications Web

Programmation Internet Cours 4

WebSSO, synchronisation et contrôle des accès via LDAP

Technologies pour Web Services faciles : REST, JSON

Compte Rendu d intégration d application

La démarche SOA et l interopérabilité applicative

Principes. 2A-SI 3 Prog. réseau et systèmes distribués 3. 3 Programmation en CORBA. Programmation en Corba. Stéphane Vialle

Systèmes répartis. Fabrice Rossi Université Paris-IX Dauphine. Systèmes répartis p.1/49

Environnements de Développement

Avant-propos 1. Avant-propos Organisation du guide À qui s'adresse ce guide?...4

Apache Camel. Entreprise Integration Patterns. Raphaël Delaporte BreizhJUG

Autour du web. Une introduction technique Première partie : HTML. Georges-André SILBER Centre de recherche en informatique MINES ParisTech

Systèmes d'informations historique et mutations

Remote Method Invocation en Java (RMI)

Manuel d intégration API SOAP SMS ALLMYSMS.COM

Urbanisme du Système d Information et EAI

IFIPS 5 / Nouvelles Architectures Logicielles Projet : Bus de web services avec «moteur» BPEL

Europa. Développement JEE 5. avec Eclipse. K a r i m D j a a f a r. A v e c l a c o n t r i b u t i o n d e O l i v i e r S a l v a t o r i

Institut Supérieur de Gestion. Cours pour 3 ème LFIG. Java Enterprise Edition Introduction Bayoudhi Chaouki

Cours CCNA 1. Exercices

Internet. Web Sécurité Optimisation

PRIMAVERA P6 ENTERPRISE PROJECT PORTFOLIO MANAGEMENT WEB SERVICES

Optimisation des échanges et traitements XML

XML par la pratique Bases indispensables, concepts et cas pratiques (3ième édition)

Réseaux. 1 Généralités. E. Jeandel

Les services Web. Jeremy Fierstone fierston@essi.fr. SAR5 Novembre 2002

Installation d un serveur HTTP (Hypertext Transfer Protocol) sous Débian 6

Intergiciel - concepts de base

MINISTÈRE DES SOLIDARITÉ ET DE LA COHÉSION SOCIALE

Petite définition : Présentation :

Programmation des Applications Réparties. Parsers XML DOM et SAX

Intergiciels pour la répartition CORBA : Common Object Request Broker. Patrice Torguet torguet@irit.fr Université Paul Sabatier

Application web de gestion de comptes en banques

L architecture des services Web

Module http MMS AllMySMS.com Manuel d intégration

Livre Blanc WebSphere Transcoding Publisher

NFP111 Systèmes et Applications Réparties

HTTP. Technologies du Web. Programmation Web côté serveur. Mastère spécialisé Management et nouvelles technologies, 16 novembre 2009

Développement des Systèmes d Information

Transcription:

Architectures Web Services WS-* Alexandre Denis Alexandre.Denis@inria.fr Inria Bordeaux Sud-Ouest France ENSEIRB PG306

Services Motivations Intégration d'applications à gros grain Unité : le «service» Hétérogénéité Applications conçues indépendamment Pas de modèle commun Intégration par les protocoles communs et la description A. Denis ENSEIRB PG306-2

Service - SOA Définition selon l'open Group : Service-Oriented Architecture (SOA) is an architectural style that supports service-orientation. Service-orientation is a way of thinking in terms of services and servicebased development and the outcomes of services. A service: Is a logical representation of a repeatable business activity that has a specified outcome (e.g., check customer credit, provide weather data, consolidate drilling reports) Is self-contained May be composed of other services Is a black box to consumers of the service ~ composants? A. Denis ENSEIRB PG306-3

Architecture générale : accès à un service Figure : Krakowiak A. Denis ENSEIRB PG306-4

Définition Web Services Une infrastructure independante des langages et des systèmes permettant des interactions faiblement couplées et interopérables entre des applications distribuées sur Internet. séparation de la spécification et de l'implementation faiblement couplé, car basé sur l'échange de messages interopérable, car basé sur des standards Version simple : Web Service = architecture SOA construite avec technologies «web» A. Denis ENSEIRB PG306-5

Positionnement des Web Services Fondamentalement : Rien de nouveau... RPC, composants, annuaire, concepts connus Schéma d'intégration à grande échelle On encapsule une application complète plutôt qu'un objet Grain plus gros Technologies «web» plus vendeuses que CORBA On peut faire du SOA en CORBA Certaines implémentations Web Service ont aussi une interface CORBA ex.: Apache CXF A. Denis ENSEIRB PG306-6

Web Services perspective historique XML-RPC - 1998 SOAP 1998 Idem Standard W3C SOAP 2003 RPC minimaliste sur HTTP + XML WSDL, UDDI, etc. WS-* - 2003-aujourd'hui Florilège de normes (80+) formant l'architecture Web Service WS-Adressing, WS-Enumeration, WS-Policy, WS-Routing, WSTransfer, WS-Security, WS-Eventing, WS-Transaction, etc. Architecture REST - ~2007 Autre approche, différente des WS-* A. Denis ENSEIRB PG306-7

Deux écoles de Web Services WS-* Web Services suivant les normes W3C (et OASIS, OGF, WS-I, Microsoft) Essentiellement SOAP, XML, WSDL, UDDI Orienté «applications d'entreprises» REST Un style d'architecture, pas une norme L'interface est le protocole réseau Orienté «Web 2.0», applications légères c.f. prochaine séance A. Denis ENSEIRB PG306-8

Les protocoles Web Protocoles conçu initialement pour les sites web Protocole de transport : HTTP Ou SMTP... Encodage : XML Normalisation par le W3C A. Denis ENSEIRB PG306-9

Rappels HTTP HTTP Hypertext Transfer Protocol Protocole de transport sur port TCP 80 Protocole sans état Adressage URI Uniform Ressource Identifier Requête HTTP Client (Navigateur) Serveur Web File Réponse HTTP Ressources (HTML,...) A. Denis ENSEIRB PG306-10

Rappels HTTP Requêtes GET - demander une ressource POST - ajouter une nouvelle ressource (ex. : formulaire) HEAD - demander uniquement l'en-tête HTTP TRACE - echo de la requête CONNECT, PUT, DELETE,... Historique Version 0.9 : requête GET, réponse HTML Version 1.0 : gestion de cache, description du type MIME des ressources (content-type),... Version 1.1 : connexion persistante (keep-alive), négociation de contenu (accept-*), Version 2.0 : en cours de normalisation A. Denis ENSEIRB PG306-11

Rappels HTTP - exemple Requête commande GET GET /HelloWorld.html HTTP/1.1 Host: localhost:8080 User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-us; rv:1.9.0.15) Gecko/2009102815 Ubuntu/9.04 (jaunty) Firefox/3.0.15 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-us,en;q=0.5 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive If-Modified-Since: Thu, 19 Nov 2009 14:06:01 GMT If-None-Match: W/"153-1258639561000" Cache-Control: max-age=0 A. Denis ENSEIRB PG306 header - 12

Rappels HTTP - exemple Réponse HTTP/1.1 200 OK Server: Apache-Coyote/1.1 Accept-Ranges: bytes ETag: W/"153-1258639561000" Last-Modified: Thu, 19 Nov 2009 14:06:01 GMT Content-Type: text/html Content-Length: 153 Date: Tue, 24 Nov 2009 15:48:32 GMT Connection: close <html> <head> <title>hello World!</title> </head> <body> <center> <h1>hello World!</h1> </center> </body> </html> A. Denis ENSEIRB PG306 type MIME de la ressource corps de la réponse - 13

Rappels XML XML extensible Markup Language Standard W3C depuis 1998 Formalisme pour la description de données structurées Constructions de langages spécialisés Utilisation de DTD ou Schema Dérivé du SGML Standard Generalized Markup Language A. Denis ENSEIRB PG306-14

Rappels XML - documents Document XML Format texte Structure : balises Deux niveau de correction Document bien formé <?xml version="1.0" encoding="iso-8859-1"?> <adresse> <lieu> <rue> avenue de l'europe</rue> <numero>655</numero> </lieu> <ville>montbonnot></ville> <code>38330</code> </adresse> Conforme à la syntaxe XML (caractères autorisés, balises bien imbriquées, etc.) Document valide Conforme au modèle spécifié par le DTD ou le Schema Source: Krakowiak A. Denis ENSEIRB PG306-15

Rappels XML - validation Deux modèle de spécification de structure DTD Document Type Definition Formalisme spécifique Simple, peu puissant, tombe en désuétude XML Schema (XSD XML Schema Definition) Exprimé en XML Standard actuel Validation Vérification qu'un document XML est conforme au Schema A. Denis ENSEIRB PG306-16

Rappels XML - Schema Schema DTD <element name="rue" type="string"/> <element name="numero" type="string"/> <element name="ville" type="string"/> <element name="code" type="string"/> <element name="lieu"> <complextype> <sequence> <element ref="rue"/> <element ref="numero"/> </sequence> </complextype> </element> <element name="adresse"> <complextype> <sequence> <element ref="lieu"/> <element ref="ville"/> <element ref="code"/> </sequence> </complextype> </element> <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT rue (#PCDATA)> numero (#PCDATA)> ville (#PCDATA)> code (#PCDATA)> lieu(rue, numero)> adresse(lieu, ville, code)> Document XML <?xml version="1.0" encoding="iso-8859-1"?> <adresse> <lieu> <rue> avenue de l'europe</rue> <numero>655</numero> </lieu> <ville>montbonnot></ville> <code>38330</code> </adresse> Source: Krakowiak A. Denis ENSEIRB PG306-17

Rappels XML - parsing Parsing XML : transformer un document XML en données exploitables Deux familles de parseurs génériques DOM Document Object Model SAX Simple API for XML Document transformé en arboressence d'objets, puis navigation dans la structure Interface évènementielle, fonction utilisateur appelée sur chaque balise Alternative : parseur compilé Un code de parseur spécifique est généré à partir du Schema A. Denis ENSEIRB PG306-18

Rappels XML - namespace Espace de nom (namespace) : domaines séparés de définition des balises Définition d'un namespace Dans les attributs de la balise XML englobante : xmlns:toto=http://toto.net/todo.xsd URI indentifie le namespace Ne coresspondant pas nécessairement à une URI accessible sur le web Habituellement : URL du DTD/Schema, ou de la norme Namespace par défaut : xmlns=http://toto.net/ Utilisation d'un namespace Préfixe de balise : <toto:balise>... </toto:balise> Sans préfixe : dans le namespace par défaut A. Denis ENSEIRB PG306-19

Service web minimal : RPC-XML Des RPC avec un encodage XML Le typage est géré par le Schema XML <methodcall> <methodname>meteo.temperature</methodname> <params> <param> <value>38330</value> </param> </params> </methodcall> A. Denis ENSEIRB PG306 <methodresponse> <params> <param> <value>12</value> </param> </params> </methodresponse> - 20

Big Picture des Web Services Content A. Denis ENSEIRB PG306-21

Briques de base : WSDL, SOAP, UDDI WSDL Web Service Description Language SOAP Simple Object Access Protocol Description de l'interface d'un service Protocole de communication pour accéder aux services web UDDI Universal Description, Discovery and Integration Annuaire de services A. Denis ENSEIRB PG306-22

Le protocole SOAP Protocole d'échange de messages Message ASCII en langage XML Transport quelconque En pratique : HTTP Paradigme essentiellement RPC Pas un format binaire Mais pas seulement Messages unidirectionnels A. Denis ENSEIRB PG306-23

Message SOAP Un document XML Espace de nommage SOAP Espace de nommage de l'application Document auto-descriptif (avec le DTD ou Schema) Messages «lisibles» Doivent être générés puis parsés Protocole coûteux Messages volumineux Chaque paramètre est en format texte avec une étiquette A. Denis ENSEIRB PG306-24

Message SOAP Enveloppe (envelope) En-tête (header) Facultatif Authentification, facuration, etc. Corps du message (body) Codage, namespace, etc. Méthodes, paramètres Erreurs (fault) Retour d'erreur Source : Sun A. Denis ENSEIRB PG306-25

Message SOAP avec pièces jointes Utilisation de XML Attachment Pour des paramètres binaires Pour la performance Éviter les sérialisation / desérialisation en encodage XML Autodescription du typage à l'aide du système multipart MIME A. Denis ENSEIRB PG306-26

Exemple SOAP/HTTP - requête En-tête HTTP Message XML (dont la requête) POST /StockQuote HTTP/1.1 Host:www.stockquoteserver.com Content-Type: text/xml: charset="utf-8" Content-Length: nnnn SOAPAction: "SomeURI" <SOAP-ENV:Envelope xmlns:soap-env= "http://schemas.xmlsoap.org/soap/envelope/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <SOAP-ENV:Body> <m:getlasttradeprice xmlns:m="someuri"> <symbol>somecompany </symbol> </m:getlasttradeprice> </SOAP-ENV:Body> </SOAP-ENV:Envelope> A. Denis ENSEIRB PG306-27

Exemple SOAP/HTTP - réponse En-tête HTTP Message XML (dont la réponse) HTTP/1.1 200 OK Content-Type: text/xml: charset="utf-8" Content-Length: nnnn <SOAP-ENV:Envelope xmlns:soap-env= "http://schemas.xmlsoap.org/soap/envelope/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <SOAP-ENV:Body> <m:getlastrtradepriceresponse xmlns:m="someuri"> < price>34.5 </price> </m:getlasttradepriceresponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope> A. Denis ENSEIRB PG306-28

SOAP codage des données Sérialisation : génération de XML Desérialisation : parsing de XML Typage via XML Schema Schema <element name="price" type="float/> <element name="color"> <simpletype base="xsd:string"> <enumeration value ="Green"/> <enumeration value ="Red"/> <enumeration value ="Blue"/> </simpletype> </element> A. Denis ENSEIRB PG306 Valeur <price>23.5</price> <color>red</color> - 29

WSDL Web Service Description Language Description d'un service Format des messages échangés Relations entre messages (requête-réponse) Exprimé en XML Définit L'interface (~IDL) Types, messages, opérations, ports Les points d'entrée (endpoints) En pratique Très peu lisible, difficile à écrire pour l'utilisateur Généré automatiquement à l'aide d'outils A. Denis ENSEIRB PG306-30

WSDL - syntaxe <wsdl:definitions> racine du document XML décrivant un service web <wsdl:type> définition des types de données utilisées <wsdl:message> description du type des messages <wsdl:operation> description d'un type de requête <wsdl:part> type des paramètres <wsdl:porttype> type de port, décrivant l'ensemble des opérations du service <wsdl:binding> <wsdl:service> une collection de ports <wsdl:port> port associant une liaison et une adresse réseau explicite liaison décrivant le protocole de transport, et les types des messages associés aux opérations du service. (endpoint) A. Denis ENSEIRB PG306-31

WSDL - exemple Content En-têtes XML omis pour rester concis... Messages (request, response) Port Type (operations) Binding Service A. Denis ENSEIRB PG306-32

UDDI Universal Description, Discovery and Integration Annuaire et référentiel pour la description de services web Pages blanches Annuaire de services, par nom Pages jaunes Fourni sous forme de web service Annuaire de services, pas catégorie Pages vertes Définition des services en WSDL A. Denis ENSEIRB PG306-33

Outils pour Web Services Seuls les protocoles sont normalisés Pas de modèle de programmation spécifique! Pas d'outil / API / workflow standard Plusieurs approches Compilation de stubs à partir du WSDL Extraction du WSDL à partir d'un code applicatif Annotations dans le code et préprocessing Servlets dans un serveur Web Processus serveur autonome issu de code généré A. Denis ENSEIRB PG306-34

Middleware pour Web Services Apache Axis Apache CXF SOAP = une interface parmi d'autres, extraite automatiquement gsoap Annotations de code Java IBM WebSphere, Redhat JBoss Framework successeur d'axis, interopérable CORBA JAX-WS - Java API for XML WebServices, JWS, Oracle WebLogic Framework de référence (maintenant obsolète) Stubs et serveur autonome en C/C++.NET Classes HttpChannel et SoapFormatter intégrées au SDK A. Denis ENSEIRB PG306-35

Apache Axis http://ws.apache.org/axis Axis (Apache extensible Interaction Service) Un toolkit open source de Web Service basé sur Apache Tomcat Deux styles de déploiement des Web Services Instant Deployment (JWS) Custom Deployment (WSDD) Programmation d'application Java avec JAX-RPC Client statique ou dynamique Outils pour WSDL : WSDL2Java et Java2WSDL Support de EJB : Session Bean accessible comme WS A. Denis ENSEIRB PG306-36

Apache Axis Vue d'ensemble Source : Mark Volkmann A. Denis ENSEIRB PG306-37

JWS Instant Deployement Une simple classe Java renommée avec l'extension jws Placer le fichier jws dans <tomcat>/webapps/axis/ Traduction automatique en Web Service Déploiement instantané dans http://<server>:<port>/axis/ Scope Request : un nouvel objet instancié à chaque requête Exemple : HelloWorld.jws public class HelloWorld { public String test(string data) { return "Hello World! You sent the string '" + data + "'."; } } A. Denis ENSEIRB PG306-38

JAX-RPC Java API for XML-based RPC (JAX-RPC) Modèle de programmation Sun Java des Web Services (en mode RPC), comparable à RMI Mapping des types Java et WSDL Client statique ou dynamique Génération des stubs avec WSDL2Java... Utilisation des interfaces Service et Call Version 2.0 de JAX-RPC Java API for XML Web Services (JAX-WS) A. Denis ENSEIRB PG306-39

Client statique JAX-RPC Génération des stubs à partir du WSDL java org.apache.axis.wsdl.wsdl2java HelloWorld.wsdl WSDL Description Service Client Stub Service Endpoint WSDL to Java Mapping Container Dispatch JAX-RPC API JAX-RPC API Client Side JAX-RPC Runtime System Server Side JAX-RPC Runtime System Protocol (SOAP) Transport (HTTP) Source : Pankaj Kumar A. Denis ENSEIRB PG306-40

Client statique JAX-RPC Exemple import java.rmi.remoteexception; import javax.xml.rpc.serviceexception; import localhost.axis.helloworld_jws.*; import des classes stub localisation du endpoint public class HelloWorldStaticClient { public static void main(string[ ] args) throws ServiceException, RemoteException { HelloWorldService locator = new HelloWorldServiceLocator(); HelloWorld stub = locator.gethelloworld(); récupération du stub String returnvalue = stub.test("toto"); System.out.println(returnValue); } } interface du service HelloWorld A. Denis ENSEIRB PG306-41

Projection des types Projection des tyes WSDL/XSD/SOAP en Java Source : http://ws.apache.org/axis/java/user-guide.html A. Denis ENSEIRB PG306-42

Client dynamique JAX-RPC Construction dynamique des requêtes (DII) N'utilise pas le WSDL Utilisation des interfaces Service et Call javax.xml.rpc.service javax.xml.rpc.call Pas de vérification du type des paramètres à la compilation Passage d'un tableau d'object. A. Denis ENSEIRB PG306-43

Client dynamique JAX-RPC Exemple import org.apache.axis.client.call; import org.apache.axis.client.service; public class HelloWorldClient { private static final String ENDPOINT = "http://localhost:8080/axis/helloworld.jws"; private static final String NAMESPACE = "http://soapinterop.org/"; private static final String OPERATION = "test"; public static void main(string[ ] args) throws ServiceException, MalformedURLException, RemoteException { Service service = new Service(); Call call = (Call)service.createCall(); call.settargetendpointaddress(new URL(ENDPOINT)); call.setoperationname(new QName(NAMESPACE, OPERATION)); String returnvalue = (String)call.invoke(new Object[ ]{"toto"}); System.out.println(returnValue); } } A. Denis ENSEIRB PG306-44

gsoap Implémentation Web Service en C/C++ Issu de Florida State University Stubs et squelettes compilés statiquement Sérialisation/desérialisation XML optimisée Serveur http intégré ou utilisable en CGI Projection SOAP <-> C/C++ spécifique Reconnaissance de types Directives //gsoap A. Denis ENSEIRB PG306-45

gsoap - client Service definition: service.wsdl WSDL Importer Client Application Bindings: service.h Client Proxy Object gsoap Compiler Client-side code Stub Marshal A. Denis ENSEIRB PG306 Demarshal - 46

gsoap - serveur Service definition: service.wsdl WSDL Importer Web Service Bindings: service.h Server Object gsoap Compiler Server-side code Skeleton Marshal A. Denis ENSEIRB PG306 Demarshal - 47

gsoap extraction du WSDL Extraction automatique du WSDL à partir du code C/C++ Web Service Bindings: service.h Server Object gsoap Compiler Service definition: service.wsdl A. Denis ENSEIRB PG306 Server-side code Skeleton Marshal Demarshal - 48

gsoap génération d'un parseur XML Parseur XML spécifique pour le Schema donné Bindings XML Schemas WSDL Importer & gsoap Compiler <complextype name= List > <complexcontent> <sequence> <element name= item type= xsd:string maxoccurs= unbounded /> </sequence> </complexcontent> </complextype> A. Denis ENSEIRB PG306 Predictive XML Parser class ns List { std::vector<char*> item; int in(char* tag); int out(char *tag); }; int ns List::in(char* tag) { if (begin_element(tag)!= OK) return TAG_MISMATCH; in_vectorofstring(item, item ); end_element(tag); } - 49

gsoap - Exemple Définition de l'interface en C namespace ns getquote(char *symbol, float &result); Génération du WSDL, souches, squelettes : soapcpp2 -ptest -c test.h Sortie : Interface WSDL : ns.wsdl Schema XML pour le typage : ns.xsd Stubs, squelettes : test*.c Invocation : main() { float q; if (soap_call_ns getquote( URL,, AOL, q) == 0) cout << AOL: << q << endl; } A. Denis ENSEIRB PG306-50

gsoap - Exemple XSD généré <?xml version="1.0" encoding="utf-8"?> <schema targetnamespace="http://tempuri.org/ns.xsd" xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soap-enc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xmlns:xsd="http://www.w3.org/2001/xmlschema" xmlns:ns="http://tempuri.org/ns.xsd" xmlns="http://www.w3.org/2001/xmlschema" elementformdefault="unqualified" attributeformdefault="unqualified"> <import namespace="http://schemas.xmlsoap.org/soap/encoding/"/> <!-- operation request element --> <element name="getquote"> <complextype> <sequence> <element name="symbol" type="xsd:string" minoccurs="0" maxoccurs="1" nillable="true"/> <!-- ns getquote::symbol --> </sequence> </complextype> </element> <!-- operation response element --> <element name="getquoteresponse"> <complextype> <sequence> <element name="result" type="xsd:float" minoccurs="1" maxoccurs="1"/><!-- ns getquote::result --> </sequence> </complextype> </element> </schema> A. Denis ENSEIRB PG306-51

gsoap - Exemple <?xml version="1.0" encoding="utf-8"?> <definitions name="service" targetnamespace="http://tempuri.org/ns.xsd/service.wsdl" xmlns:tns="http://tempuri.org/ns.xsd/service.wsdl" xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soap-enc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xmlns:xsd="http://www.w3.org/2001/xmlschema" xmlns:ns="http://tempuri.org/ns.xsd" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:dime="http://schemas.xmlsoap.org/ws/2002/04/dime/wsdl/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns="http://schemas.xmlsoap.org/wsdl/"> <types> <schema targetnamespace="http://tempuri.org/ns.xsd" xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soap-enc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xmlns:xsd="http://www.w3.org/2001/xmlschema" xmlns:ns="http://tempuri.org/ns.xsd" xmlns="http://www.w3.org/2001/xmlschema" elementformdefault="unqualified" attributeformdefault="unqualified"> <import namespace="http://schemas.xmlsoap.org/soap/encoding/"/> <!-- operation request element --> <element name="getquote"> <complextype> <sequence> <element name="symbol" type="xsd:string" minoccurs="0" maxoccurs="1" nillable="true"/><!-- ns getquote::symbol --> </sequence> </complextype> </element> <!-- operation response element --> <element name="getquoteresponse"> <complextype> <sequence> <element name="result" type="xsd:float" minoccurs="1" maxoccurs="1"/><!-ns getquote::result --> </sequence> </complextype> </element> </schema> </types> A. Denis ENSEIRB PG306 WSDL généré... <message name="getquoterequest"> <part name="body" element="ns:getquote"/><!-- ns getquote::ns getquote --> </message> <message name="getquoteresponse"> <part name="body" element="ns:getquoteresponse"/> </message> <porttype name="serviceporttype"> <operation name="getquote"> <documentation>service definition of function ns getquote</documentation> <input message="tns:getquoterequest"/> <output message="tns:getquoteresponse"/> </operation> </porttype> <binding name="service" type="tns:serviceporttype"> <SOAP:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> <operation name="getquote"> <SOAP:operation soapaction=""/> <input> <SOAP:body parts="body" use="literal"/> </input> <output> <SOAP:body parts="body" use="literal"/> </output> </operation> </binding> <service name="service"> <documentation>gsoap 2.8.18 generated service definition</documentation> <port name="service" binding="tns:service"> <SOAP:address location="http://localhost:80"/> </port> </service> </definitions> - 52

gsoap projection C La projection de SOAP vers le C est codifiée Le séparateur entre namespace et méthode est Une fonction double foo(double a) sera définie comme int ns foo(double a, double*result) dans l'interface int ns foo(struct soap*soap, double a, double*result) dans l'implémentation La valeur de retour est pour gsoap Ne pas inclure la définition d'interface dans l'implémentation! soap_call_ns foo(&soap, &server, &action, a, &result) dans le client Consultez la documentation pour le détail de la projection des types A. Denis ENSEIRB PG306-53

Travail à faire - 54

Exemple SOAP Téléchargez l'exemple calc.tar.gz sur la page du cours Compilez l'exemple à l'aide du Makefile Il s'agit d'un serveur de calcul minimaliste doté des opérations add et sub Regardez la définition d'interface calc.h Regardez le fichier calc.wsdl pour voir la projection Des patrons de requêtes sont générés automatiquement calc.*.*.xml A. Denis ENSEIRB PG306-55

HTTP à la main Lancez./server Le serveur écoute alors sur localhost:18083 Connectez-vous à la main à l'aide de telnet Testez une requête HTTP à la main, en vous aidant des patrons calc.*.req.xml pour former une requête correcte Antisèche HTTP : POST /calc/ HTTP/1.1 Content-Length: xxx Au bout d'un nombre de tentatives fini, vous devriez obtenir HTTP/1.1 200 OK Server: gsoap/2.8... <SOAP-ENV:Envelope... A. Denis ENSEIRB PG306-56

HTTP avec curl Lancez des requêtes vers le serveur à l'aide de l'outil curl Consultez le manuel de curl si besoin Vous aurez sans doute besoin de : --header (pour forcer le Content-Type), --upload-file, --request Vers quelle URL faut-il pointer? Quelle opération HTTP faut-il invoquer? Testez plusieurs requêtes, vérifiez que ça calcule juste! A. Denis ENSEIRB PG306-57

Avec le client gsoap Lancez des requêtes avec le client fourni Ajoutez des opérations (mult, div, sqrt, etc.) Dans l'interface Dans l'implémentation du serveur Dans leur utilisation par le client Testez la connexion avec le serveur du voisin Attention, le hostname client et serveur sont codés en dur dans le source, pensez à les adapter! A. Denis ENSEIRB PG306-58

Construire un service web Proposez une interface pour un serveur d'annuaire Rechercher une entrée, ajouter une entrée Écrivez l'interface en C gsoap, extraire le WSDL Implémentez le service Créez un client de test Envoyez le WSDL (et non le.h!) à votre voisin Écrivez un client qui interroge le serveur du voisin A. Denis ENSEIRB PG306-59

Vers un service externe Choisissez un service vers lequel vous connecter Conversion de monnaie : http://www.webservicex.net/currencyconvertor.asmx?wsdl Prévisions météo : http://graphical.weather.gov/xml/soap_server/ndfdxmlserver.php Génération de code barre : http://www.webservicex.net/genericbarcode.asmx?wsdl Via Michelin : http://dev.viamichelin.com/viamichelin-soap-api.html Microsoft translator : http://api.microsofttranslator.com/v2/soap.svc Bing search : https://datamarket.azure.com/dataset/bing/search Ebay : http://developer.ebay.com/webservices/latest/ebaysvc.wsdl A. Denis ENSEIRB PG306-60

Vers un service externe Convertissez le WSDL en.h à l'aide de : wsdl2h -c Écrivez un client utilisant gsoap pour le service choisi A. Denis ENSEIRB PG306-61

À vous de jouer! http://dept-info.labri.fr/~denis/