12009-2010
Services Web
Samir TataDépartement INFormatique
TELECOM SudParishttp://www-inf.it-sudparis.eu/cours/WebServices
32009-2010
Références• Web
– http://www-inf.it-sudparis.eu/cours/WebServices/– Site de W3C (normes) : www.w3.org– Site de Zvon (tutoriel XML) : http://www.zvon.org/
• Livres– Georges Gardarin : Des bases de données aux services Web, Dunod,
Paris, 2002
– Hubert Kadima et Valérie Monfort : Les services Web: techniques, démarches et outils, Dunod, Paris, 2003
– Gustavo Alonso, Fabio Casati, Harumi Kuno, and Vijay Machiraju : Web Services: Concepts, Architecture and Applications, Springer-Verlag, New York, 2004
– Jorge Cardoso and Amit P. Sheth : Semantic Web Services, Processesand Applications (Semantic Web and Beyond: Computing for HumanExperience), Springer-Verlag, New York, 2006
Plan
42009-2010
• Genèse de l’« orientation » service• Services Web• Panorama de technologies• Orchestration de services Web
Plan
52009-2010
• Genèse de l’« orientation » service– Genèse– Définition– Architecture
• Services Web• Panorama de technologies• Orchestration de services Web
72009-2010
Genèse (1/3)
• Paradigme procédure– procédures, fonctions et données structurées– applications monolithiques, applications serveurs isolées
• Paradigme objet– classes (fonctions et données structurées)– lié à un langage de programmation– applications monolithiques, applications c/s isolées
• Paradigme composant– composant (groupe d’interfaces)– lié à un modèle de composant – entité de plus gros grain, – décrit par ce qu’il offre et ce qu’il requiert, – supporte des propriétés non fonctionnelles de manière déclarative,– utilisation indépendante de l’implémentation (pour certains
modèle/plateforme de composants)– interaction application-application
82009-2010
Genèse (2/3)
• POS, POO, POC : pourquoi on veut améliorer ?– Paradigmes ?
• on parle du code et non de l’architecture • l’architecture suit le modèle de programmation
– et alors ?• Concepts abstraits et mapping concrets
– mapping vers Java, C++, CORBA, COM …– Réutilisation entre domaines différents difficile sinon
impossible
• Besoins ?– Support de l’hétérogénéité : plusieurs plate-formes
logicielles et matérielles– Accès et manipulation des données de partout
92009-2010
Genèse (3/3)
**
objets
*
servicesservicesservicescomposants
Niveaux d’abstraction grandissant
Langagesprocéduraux
CORBA
CCMEJB.NET
Machinesvirtuelles
Ass
embl
eur
Lang
ages
mac
hine
01011101001100001011
102009-2010
Définition (1/2)
• C’est quoi alors un service– un block avec des propriétés fonctionnelles et non
fonctionnelles• Localisations, plate-forme et code sont peu importants
• implications sur – le service qui peut être
• destinataire d’un message (application)• manipulateur d’un message (infrastructure)• transporteur d’un message (protocole)
– l'utilisation d’un service qui• est toujours supposée distante• passe toujours au dessus des plate-formes• ignore l’implémentation
112009-2010
Définition (2/2)Un Service expose un Contrat
Les services communiquent par messages
Conditions Générales de VenteRèglement Intérieur
Vos droits/Vos devoirsin
out
Un Service est Autonome(et sans état)
Les Frontières entre services sont Explicites
Source A. Occello
122009-2010
Architecture (1/2)
ServiceRegistry
ServiceRequestor
ServiceProvider
Find Publish
Bind
ServiceDescription
ServiceDescription
Service
132009-2010
Architecture (2/2)
• Les partenaires– Le fournisseur de services crée le service Web, puis publie
son interface ainsi que les informations d'accès au service, dans un annuaire de services Web.
– L'annuaire de services rend disponible l'interface du service ainsi que ses informations d'accès, pour les demandeur potentiel de service.
– Le demandeur de services accède à l'annuaire de service pour effectuer une recherche afin de trouver les services désirés. Ensuite, il se lie au fournisseur pour invoquer le service.
Plan
142009-2010
• Genèse de l’« orientation » service• Services Web
– Origines et définition– WSDL : Web Service description Language– SOAP : Simple Object Access Protocol– Développement de SW avec Axis
• Panorama de technologies• Orchestration de services Web
162009-2010
Service Web : les origines• Le Web d’aujourd’hui
– conçu pour une interaction client-application– développé autour de 2 standards http et html– permet de supporter le B2C
• Le Web de demain ?– Le Web est partout. Que peut-on faire avec ?
• Supporter des places de marché électronique (E-marketpalces)
• intégrer des procédés métiers• partager des ressources
– Les approches existantes sont ad hoc • e.g. interactions application-application avec des
formulaires html– But: permettre une interaction application-application
172009-2010
Trois générations d’applications Web
• 1ère génération– Ressources statiques (rôle de serveur)– Documents– e.g. pages Web statiques (HTML)
• 2ème génération– Ressources dynamiques (rôle de serveur)– Applications– e.g. pages Web dynamiques, ASP, JSP, PHP, ...
• 3ème génération– Services (rôles de serveur & client)
182009-2010
Service Web : définition
A Web service is a software application identified by a URI, whose interfaces and binding(1) are capable of being defined, described and discovered by XML artefacts and supports direct interactions with other software applications using XML based messages via Internet-based protocols. (W3C definition)
(1) An association between an Interface, a concrete protocol and a data format
Un service Web est une application logicielle 1. identifiée par un URI dont les interfaces et les
liaisons sont définies, décrites et découvertes avec des mécanismes XML, et
2. supporte une interaction directe avec les autres applications logicielles en utilisant des messages XML via un protocole Internet.
192009-2010
Service Web : caractéristique
• Les services Web sont – des service
• autonome• exposant des contrats• dont les frontières sont explicites• qui communiquent par messages
– accessible sur le Web• Les messages sont véhiculés par des protocoles Web
212009-2010
Architecture Web service
• Les partenaires– Le fournisseur de services crée le service Web, puis publie
son interface ainsi que les informations d'accès au service, dans un annuaire de services Web.
– L'annuaire de services rend disponible l'interface du service ainsi que ses informations d'accès, pour les demandeur potentiel de service.
– Le demandeur de services accède à l'annuaire de service pour effectuer une recherche afin de trouver les services désirés. Ensuite, il se lie au fournisseur pour invoquer le service.
• Les standards– Protocole SOAP : Achemine les messages entre fournisseur,
annuaire et demandeur de services – Langage WSDL : Décrit les interface des services– Norme UDDI : spécifie la structure des annuaires de services
Rôle du langage WSDL
232009-2010
• WSDL est un langage qui permet de décrire :– l’interface d’un service Web (types de données, opérations,
entrées, sorties)– comment invoquer un service Web
• Objectif :– Décrire les services comme un ensemble d’opérations et de
messages abstraits reliés à des protocoles et des serveurs réseaux
• Permet de décharger les utilisateurs des détails techniques de réalisation d’un appel
• WSDL est un langage qui standardise les schémas XML utilisés pour établir une connexion entre émetteurs et récepteurs.
252009-2010
Structure d’un document WSDL
<definitions><types>définition des types</types><message>définition des messages</message><portType>définition des interfaces </portType><binding>définition des bindings</binding><services>définition de endpoint </service>
</definitions>
262009-2010
Exemple : un annuaire
• Opérations– Ajouter une entrée
• Entrée :– Nom : Tata– Prénom : Samir– Adresse : 9 rue Charles Fourier 91011 Evry France
– Chercher une adresse• Entrée : nom• Sortie : Entrée ou message d’érreur
272009-2010
WSDL : <types> <wsdl:types>
<schema targetNamespace="urn:AnnuaireTypes"><import namespace="http://schemas.xmlsoap.org/soap/encoding/"/><complexType name="AdresseType">
<sequence><element name="code" nillable="true" type="soapenc:string"/><element name="numero" type="xsd:int"/><element name="pays" nillable="true" type="soapenc:string"/><element name="rue" nillable="true" type="soapenc:string"/><element name="ville" nillable="true" type="soapenc:string"/>
</sequence></complexType><complexType name="EntreeType">
<sequence><element name="adresse" nillable="true" type="tns1:AdresseType"/><element name="nom" nillable="true" type="soapenc:string"/><element name="prenom" nillable="true" type="soapenc:string"/><element name="telephone" type="xsd:int"/>
</sequence></complexType><complexType name="EntreeInexistanteType">
<sequence><element name="messageErreur" nillable="true" type="soapenc:string"/>
</sequence></complexType>
</schema></wsdl:types>
282009-2010
WSDL : <message> — décrit les noms et types d’un ensemble de champs à transmettre— peut-être comparé aux paramètres d'un appel de procédure
<wsdl:message name="chercherEntreeRequest"><wsdl:part name="nom" type="soapenc:string"/>
</wsdl:message>
<wsdl:message name="ajouterEntreeRequest"><wsdl:part name="entree" type="tns1:EntreeType"/>
</wsdl:message>
<wsdl:message name="EntreeInexistante"><wsdl:part name="fault" type="tns1:EntreeInexistanteType"/>
</wsdl:message>
<wsdl:message name="chercherEntreeResponse"><wsdl:part name="chercherEntreeReturn" type="tns1:EntreeType"/>
</wsdl:message>
<wsdl:message name="ajouterEntreeResponse"><wsdl:part name="ajouterEntreeReturn" type="soapenc:string"/>
</wsdl:message>
292009-2010
WSDL : <portType><wsdl:portType name="Annuaire"><wsdl:operation name="chercherEntree" parameterOrder="nom">
<wsdl:inputmessage="impl:chercherEntreeRequest" name="chercherEntreeRequest"/>
<wsdl:outputmessage="impl:chercherEntreeResponse" name="chercherEntreeResponse"/>
<wsdl:faultmessage="impl:EntreeInexistante" name="EntreeInexistante"/>
</wsdl:operation><wsdl:operation name="ajouterEntree" parameterOrder="entree">
<wsdl:inputmessage="impl:ajouterEntreeRequest" name="ajouterEntreeRequest"/>
<wsdl:outputmessage="impl:ajouterEntreeResponse" name="ajouterEntreeResponse"/>
</wsdl:operation></wsdl:portType>
302009-2010
WSDL : <porttype>
• Les types de port (port Type) décrivent un ensemble d’opérations et euvent être comparés à une interface Java– One-way
• le service reçoit un message en entrée (<input>). – Request-response
• le service reçoit un message en entrée (<input>) et renvoie un message en sortie <output> ou un ou plusieurs messages d’erreur (<fault>)
– Solicit-response• Le service envoie un message (<output>) et reçoit un message
corrélé (<input>) ou un ou plusieurs messages d’erreur (<fault>).
– Notification• le service envoie un message de notification (<output>)
312009-2010
WSDL : <binding>
• Les Liaisons (binding) définissent le format des messages et le protocole utilisépar chaque type de port
<wsdl:binding name="AnnuaireServiceSoapBinding" type="impl:Annuaire"><wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="chercherEntree"><wsdl:input name="chercherEntreeRequest">
<wsdlsoap:bodyencodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</wsdl:input><wsdl:output name="chercherEntreeResponse">
<wsdlsoap:bodyencodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
</wsdl:output><wsdl:fault name="EntreeInexistante">
<wsdlsoap:faultencodingStyle="http://schemas.xmlsoap.org/soap/encoding/" name="EntreeInexistante"/>
</wsdl:fault></wsdl:operation><wsdl:operation name="ajouterEntree">…</wsdl:operation>
</wsdl:binding>
322009-2010
WSDL : <service>• Le port est un point de terminaison identifié de manière unique par la
combinaison d'une adresse Internet et d'une liaison• Un Service est une collection de points d’entrée (endpoint) relatifs.
<?xml version="1.0" encoding="UTF-8"?><wsdl:definitions targetNamespace="http://localhost:8080/axis/services/AnnuaireService"
xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://localhost:8080/axis/services/AnnuaireService" xmlns:intf="http://localhost:8080/axis/services/AnnuaireService" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns1="urn:AnnuaireTypes“xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">…
<!-- service decln --><wsdl:service name="AnnuaireService">
<wsdl:port binding="impl:AnnuaireServiceSoapBinding" name="AnnuaireService"><wsdlsoap:address location="http://localhost:8080/axis/services/AnnuaireService"/>
</wsdl:port></wsdl:service>
</definitions>
332009-2010
Exercice
• Écrire la description WSDL d’un service qui calcule la somme de deux entiers naturels
352009-2010
SOAP
• Simple Object Access Protocol • Intégration de XML au-dessus de HTTP :
– Pour accéder services, objets et serveurs– Indépendant de toute plate-forme
• Codage universel XML par opposition aux spécifiques :– DCOM - DCE/NDR– CORBA - IIOP/CDR– JAVA - RMI/JRMP– RDA - XDR
• Résolution des problèmes de sécurité :– Les firewalls supportent des ports spécifiques (HTTP, FTP)– La plupart des middlewares assignent des ports dynamiques
…• Associé à WSDL pour publication d'interfaces
Source G. Gardarin
362009-2010
Un échange type
Port de connexion (URL)
Application Cliente
Parser XML
Procuration
d'interface
Translateur
SOAP
Parser XML
RPC
local
Pare-feu Pare-feuMessages
SOAP Appel
HTTP
Réponse
Serveurd'application
Source G. Gardarin
372009-2010
Eléments d'un message
• Envelope– Élément pouvant contenir des déclarations d'espaces de
noms ou des sous-éléments
• Header– Élément optionnel fils de Envelope– Permet des extensions telles que authentification,
session, etc.
• Body – Élément obligatoire fils de Envelope– Définit la méthode appelée, contient les paramètres– Peut contenir un élément Fault en cas d'erreur
Source G. Gardarin
XML-RPC et SOAP
382009-2010
Structure d’un message SOAP
SOAP Message
SOAP EnvelopeSOAP Header
SOAP Body
Method Call & Data
Headers
HTTP Headers
Appel de mAppel de mééthode et descriptionthode et descriptionen XML de donnen XML de donnééeses
Corps qui contient lesCorps qui contient lesappels de mappels de mééthodes SOAPthodes SOAP
Entête individuelleEntête individuelleEntêteEntêteEnveloppeEnveloppe
Entête standard HTTPEntête standard HTTPet entête SOAP HTTPet entête SOAP HTTP
Le message SOAP CompletLe message SOAP Complet
392009-2010
SOAP : Message
<soap:Envelope<soap:Header>
... entête... </soap:Header><soap:Body>
... Corps du message... <soap:Fault>
... Erreurs éventuelles ...</soap:Fault>
</soap:Body></soap:Envelope>
402009-2010
L’enveloppe et l’entête• L’enveloppe définit le document XML comme étant un
message SOAP<soap:Envelopexmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
</soap:Envelope>• L ’entête contient des éléments définis par l’utilisateur
<soap:Header> <m:local xmlns:m="http://www.Computer.com/local/">
<m:language>fr</m:language> <m:currency>Euro</m:currency>
</m:local> </soap:Header>
412009-2010
Le corps : Appel
• Le corps– Doit être présent dans le message SOAP– Contient le message
<soap:Envelope><soap:Body>
<sommeDemande xmlns:m="urn:MonPremierService"> <param1>25</param1> <param2>-25</param2>
</sommeDemande> </soap:Body>
</soap:Envelope>
422009-2010
Le corps: réponse
<soap:Envelope><soap:Body>
<sommeReponse xmlns:m=“urn:MonPremierService”> <return>0</return>
</sommeReponse> </soap:Body>
</soap:Envelope>
432009-2010
Le corps : réponse
• Erreurs qui apparaissent pendant l’exécution du message
<soap:Envelope><soap:Body>
<soap:Fault> <faultstring>
On ne peut sommer des entiers négatifs</faultstring>
</soap:Fault> </soap:Body>
</soap:Envelope>
442009-2010
Exercice
• Écrire un exemple d’un message SOAP envoyé à ou par le service Web « annuaire »
462009-2010
Introduction
• Implantation de SOAP1.1– Java– OpenSource
• Communauté Apache– Apache, Tomcat, Xerces, Struts, Cocoon
• Support coté serveur – Servlet qui reçoit et envoie des messages SOAP HTTP
(pont SMTP)• Support coté client
– API pour envoyer des messages SOAP sur HTTP et SMTP
472009-2010
Moteur de Servlets (Notion)
• Une Servlet (HTTP) – objet Java qui fonctionne en mode requête/réponse (HTTP)
• Un moteur (container) de Servlet
– application qui reçoit des requêtes http et qui les transmet aux Servlets
– Exemples• Tomcat (couplage avec Apache), • Websphere (couplage avec IBM http Server), • Weblogic …
482009-2010
Architecture (Serveur)
• Le client envoie des messages SOAP/HTTP• La Servlet AxisServlet reçoit et renvoie les messages SOAP et transmet
aux objets Java correspondant• Les Objets Java effectuent les services. Ils sont des objets Java
classiques.
JVM
Moteur de Servlet(Tomacat)
AxisServletSOAP/HTTP
492009-2010
Tomcat File System
anotherapp
TOMCAT
webapps
index.htmlWEB-INF
web.xml classes lib
examples
jsp
*.jar*.class
Exp.jsp
WEB-INF
web.xml classes lib
axis
Somme.jws
*.class *.jar
502009-2010
Développement d’un Web Service JWS (axis1)
• Développer une classe Javapublic class Somme {
public int sommer(int i1, int i2) {return i1+i2;
}}
• Sauvegarder la classe dans Somme.jws • Copier Somme.java dans le répertoire axis • Lancer le serveur tomcat• Obtention de la description WSDL
http://postex:8080/axis/Somme.jws?WSDL
512009-2010
Développement d’un client à partir du WSDL (axis1)
• Génération d’un ensemble de classes facilitant l’envoi de messages SOAP:– java org.apache.axis.wsdl.WSDL2Java file.wsdl
• Classes générées:– Type, PortType, Binding et Service
• Construction du client :– Instancier un Service– Obtenir un Port à partir du Service– Utiliser les méthodes du Port
• Construire les paramètres en fonction des Types
522009-2010
Le client (axis1)
public class Client {public static void main(String[] args) {
try {// Instancier un ServiceSommeService service=new SommeServiceLocator();
// Obtenir un Port à partir du ServiceSomme port=service.getSomme();
// Utiliser les méthodes du Portint result = port.sommer(2,3);System.out.println("La somme est : "+result);
} catch (Exception ex) {ex.printStackTrace();
}}}
532009-2010
Axis2 avec ADB
• Génération d’un ensemble de classes facilitant l’envoi de messages SOAP:– $AXIS2_HOME/bin/wsdl2java.sh –uri file.wsdl -d adb -s
• Classes générées:– Sub
• Construction du client :– Instancier le stub– Instancient et initialiser la requête (sous classe du stub)– Utiliser les méthodes du stub
• Construire les paramètres en fonction des Types
Top Related