WebServicesWebServices
ComposantsComposants
• Time to marketTime to market• Améliorer la productivité• Réduire la complexité• Réutiliser si possible
• Assemblage plutôt que programmationAssemblage plutôt que programmation• Réduire les besoins en compétences
spécialisées• Recentrage sur l’expertise du domaine• Améliorer la qualité du logiciel
Web Services (1)Web Services (1)
• Opération : action invocableOpération : action invocable• Interface : partition des opérationsInterface : partition des opérations• Service : ensemble des interfaces utilisables pour une autre Service : ensemble des interfaces utilisables pour une autre
application coopérativeapplication coopérative
Service WebService Web
• Service invocable à travers le réseau• Non basé sur le contenu (pages web)• Délivre des données structurées à une
application
Profiter des standards du moment
Web Services (2)Web Services (2)
• Utilisation pour l'intégration
• Dans un portail • Applications d'entreprise
• B2B
Portail
Normalisation d'adresse
traduction
Achat
vente
traducteur
météo
commande
B Processus
Service météo
Intranet
Internet
Web Services (3)Web Services (3)
Systèmes orientés Messages, courtiers d'Intégration
SGBD procédures cataloguées
Adaptateur progiciels
Serveur d'applications
Orchestration de Flux
Web Services (4)Web Services (4)
TCP/IP
http,httpr,smtp,ftp,mq,iiop…
SOAP : messaging
WSDL
UDDI, WSIL
WS-Transaction
Services techniques
RosettaNet
ebXML
Services métier
BPEL
WS-coordination
Processus, workflow
Annuaire
Description
XML-based message
Transport
Pile de protocoles
WS-SecuritySécurité
PlanPlan
• SOAPSOAP• Protocole de transmission de
messages XML• WSDLWSDL
• Web Services Description Language• UDDIUDDI
• Universal Description Discovery and Integration
• Web ServicesWeb Services• Intégration avec l'existant
SOAPSOAP
• SOAP 1.1SOAP 1.1• Un moyen de faire communiquer des
applications par RPC en utilisant HTTP• Proposé à W3C en 2000 par UserLand, Ariba,
Commerce One, Compaq, Developmentor, HP, IBM, IONA, Lotus, Microsoft etSAP
• SOAP 1.2 SOAP 1.2 • travaux W3C• Protocole de transmission de messages en
XML
• SOAP protocole XML permettant la communication entre SOAP protocole XML permettant la communication entre composants logiciels et applications en s’appuyant sur des composants logiciels et applications en s’appuyant sur des protocoles standards de type http, smtp, …protocoles standards de type http, smtp, …
• SOAP Simple Object Access Protocol SOAP Simple Object Access Protocol • SOAP Service Oriented Architecture ProtocolSOAP Service Oriented Architecture Protocol• SOAP est un protocole de transmission de messages SOAP est un protocole de transmission de messages • SOAP est adapté à la communication entre applications SOAP est adapté à la communication entre applications • SOAP est un format d’échange de messages SOAP est un format d’échange de messages • SOAP est conçu pour fonctionner sur l’Internet SOAP est conçu pour fonctionner sur l’Internet • SOAP est indépendant des plates-formes et des langages SOAP est indépendant des plates-formes et des langages • SOAP est basé sur XML SOAP est basé sur XML • SOAP est simple et extensible SOAP est simple et extensible • SOAP en voie de standardisation par W3CSOAP en voie de standardisation par W3C
SOAP ?SOAP ?
OK, et CORBA alors? (1)OK, et CORBA alors? (1)
• CORBA prend aussi en compte tous ces pointsCORBA prend aussi en compte tous ces points• mais exige de compiler et distribuer des
stubs clients pour chaque type de clients • pas toujours pratique pour un grand nombre
de combinaisons de plates-formes et de langages ou lors de fourniture de services à des clients anonymes au travers d’Internet
OK, et CORBA alors? (2)OK, et CORBA alors? (2)
• String-ware ?String-ware ?• SOAP est un protocole basé sur XML SOAP est un protocole basé sur XML
• En conséquence, particulièrement prolixe• CORBA, au travers de IIOP, le battra en
performance car les opérations de conversion et de déconversion (marshalling et demarshalling) dans CORBA sont plus efficaces et il y a moins de données sur le réseau.
• Néanmoins les messages en xml sont lisibles et utilisables : utile pour la mise au point
SOAP Scenarii (1)SOAP Scenarii (1)
Nœud SOAP émetteur
initial
Nœud SOAP ultime
récepteur
Appli SOAP Appli SOAP
processeur SOAP
processeur SOAP
Niveau protocole de
transport
Niveau SOAP
Hôte 1 Hôte 2
Envoi et oublie, avec un ou n récepteurs
Requête réponse, requête avec acquittement ou RPC sur un protocole de transport assurant la corrélation
SOAP Scenarii (2)SOAP Scenarii (2)
Nœud SOAP émetteur
initial
Appli SOAP A Id message
processeur SOAP
Niveau protocole de transport
Niveau SOAP
Hôte 1 Hôte 2
Nœud SOAP ultime
récepteur
Appli SOAP B Id message
processeur SOAP
Nœud SOAP émetteur
initial
Appli SOAP B Id message
processeur SOAP
Nœud SOAP ultime
récepteur
Appli SOAP A Id message
processeur SOAP
Hôte 1Hôte 2
Corrélation de messages
Requête réponse, requête avec acquittement ou RPC sur un protocole de transport n'assurant la corrélation
SOAP Scenarii (3)SOAP Scenarii (3)
Nœud SOAP émetteur
initial
Appli SOAP A routage
processeur SOAP
Niveau protocole de transport
Hôte 1 Hôte 3
Nœud SOAP intermédiaire
Appli SOAP B routage
processeur SOAP
Nœud SOAP ultime
récepteur
Appli SOAP A routage
processeur SOAP
Hôte 2
Niveau SOAP
Changement de protocole possible
Requête réponse, requête avec acquittement ou RPC via de multiples intermédiaires
SOAP Scenarii (4)SOAP Scenarii (4)
• Requêtes avec cryptage du contenu ou de l'en-têteRequêtes avec cryptage du contenu ou de l'en-tête• Echange avec tierce partie Echange avec tierce partie • ConversationConversation• Messages asynchronesMessages asynchrones• Multiples réponse asynchronesMultiples réponse asynchrones• Echange de données Non-XMLEchange de données Non-XML• Notification d'événementsNotification d'événements• Cache, cache avec expirationCache, cache avec expiration• Qualité de serviceQualité de service• Echange avec analyse et traitement incrémentalEchange avec analyse et traitement incrémental• Routage, trackingRoutage, tracking• GrillesGrilles• Et autres, en fonction de l'imagination des architectesEt autres, en fonction de l'imagination des architectes
SOAP messageSOAP message
• Un message SOAP valide est un document XML Un message SOAP valide est un document XML au bon format. Le message doit avoir la forme au bon format. Le message doit avoir la forme suivante: suivante:
• Une déclaration XML (optionnelle)• Une Enveloppe SOAP (l'élément racine) qui
est composée de: • Une En-tête SOAP (optionnel : infos nécessaires à
l'interprétation du message) • Un Corps SOAP (données du message)
• Une section d’erreur SOAP
SOAP messageSOAP message
• Règles de syntaxe:Règles de syntaxe:• un message SOAP MUST être codé en XML • un message SOAP MUST avoir une enveloppe SOAP • un message SOAP CAN avoir un entête SOAP (header)• un message SOAP MUST avoir un corps SOAP (body) • un message SOAP MUST utiliser l'espace de désignation de
l'enveloppe SOAP • un message SOAP MUST utiliser l'espace de désignation d'encodage
SOAP • un message SOAP MUST NOT contenir une référence à une DTD• un message SOAP MUST NOT contenir des instruction de type XML
Processing
SOAP ExempleSOAP Exemple
• <Envelope> est la racine <Envelope> est la racine • <Header>, <Body> et <Fault> sont les enfants<Header>, <Body> et <Fault> sont les enfants : :<?xml version="1.0" encoding="UTF-8" standalone="no" ?><?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<<soap:Envelope soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">"><soap:Header><soap:Header>... Header information...... Header information...</soap:Header></soap:Header><soap:Body> <soap:Body>
... Body information...... Body information...<soap:Fault><soap:Fault> ...Fault information......Fault information...</soap:Fault></soap:Fault>
</soap:Body></soap:Body></soap:Envelope></soap:Envelope>
SOAP EnveloppeSOAP Enveloppe
•<SOAP-ENV:Envelope ... >le style d'encodage <SOAP-ENV:Envelope ... >le style d'encodage de ce message SOAP suit le schéma défini dans de ce message SOAP suit le schéma défini dans http://schemas.xmlsoap.org/soap/encodinghttp://schemas.xmlsoap.org/soap/encoding•Contient les définitions de namespaces. Contient les définitions de namespaces.
<SOAP-ENV:Envelope<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/ 2001 /XMLSchema">xmlns:xsd="http://www.w3.org/ 2001 /XMLSchema">
</SOAP-ENV:Envelope></SOAP-ENV:Envelope>
SOAP Entête (1)SOAP Entête (1)
• Mécanisme pour étendre un message de façon Mécanisme pour étendre un message de façon décentralisée et modulaire, sans connaissance décentralisée et modulaire, sans connaissance a priori des parties de la communication.a priori des parties de la communication.• Typiquement authentification, transaction, …• Règles :
• Identifié par un namespace et un nom local• Les enfants immédiats qualifiés par le namespace.
SOAP Entête (2)SOAP Entête (2)
• 2 attributs particuliers utilisés pour indiquer comment et par qui l’entrée est traitée • mustUnderstand : Indiquer qu’une entrée est
obligatoire<SOAP-ENV:Header> <t:Transaction xmlns:t="some-URI" SOAP-
ENV:mustUnderstand="1"> 5 </t:Transaction> </SOAP-ENV:Header>
• Actor : Indiquer qui peut utiliser l'entête ; par défaut : l’ultime
<SOAP-ENV:Header> <m:local
xmlns:m =’’http://www.w3edfRetD.edu/local/’’ soap:actor= http://www.w3edfRetD.edu/appli > <m:language> dk </m:language></m:local></soap:Header>
Soap BodySoap Body
• Mécanisme simple pour échanger les Mécanisme simple pour échanger les informations avec l’ultime receveur du informations avec l’ultime receveur du message.message.• Typiquement appels marshalling RPC calls et
des rapports d’erreur• Une entrée du body est identifiée par un
namesapce et un nom local<SOAP-ENV:Body><SOAP-ENV:Body>
<ns1:doubleAnIntegerResponse<ns1:doubleAnIntegerResponse
xmlns:ns1="urn:MesSoapServices"xmlns:ns1="urn:MesSoapServices"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">>
<return xsi:type="xsd:int">30</return><return xsi:type="xsd:int">30</return>
</ns1:doubleAnIntegerResponse></ns1:doubleAnIntegerResponse>
</SOAP-ENV:Body></SOAP-ENV:Body>
SOAP section d’erreurSOAP section d’erreur
• Utilisée pour porter les erreurs ou les statuts d’erreur d’un Utilisée pour porter les erreurs ou les statuts d’erreur d’un message message • Doit apparaître comme une entrée du body• Ne doit pas apparaître plus d’une fois• Sous éléments : • faultcode
• Identifier l’erreur • faultstring
• Explication de l’erreur<env:Body><env:Body>
<env:Fault><env:Fault>
<faultcode><value>env:VersionMismatch</value><faultcode><value>env:VersionMismatch</value> </faultcode></faultcode> <faultstring>Version Mismatch</faultstring><faultstring>Version Mismatch</faultstring> </env:Fault></env:Fault> </env:Body></env:Body>
SOAP encodage de graphesSOAP encodage de graphes
• L’information est traitée comme un graphe L’information est traitée comme un graphe constitué de nœuds intermédiaires ou constitué de nœuds intermédiaires ou terminaux et de liens entre ces nœuds.terminaux et de liens entre ces nœuds.
• Il existe des règles d’encodage de ces graphesIl existe des règles d’encodage de ces graphes• Valeurs simplesValeurs simples
• XML schema Built-in datatypes et dérivés• Ou SOAP-ENC pour des éléments
indépendants d’un type hétérogène• Valeurs compositesValeurs composites• Tableaux et structuresTableaux et structures
SOAP Types simplesSOAP Types simples
<element name="age" type="int"/><element name="age" type="int"/>
<element name="height" type="float"/><element name="height" type="float"/>
<element name="displacement" type="negativeInteger"/><element name="displacement" type="negativeInteger"/>
<element name="color"><element name="color">
<simpleType base="xsd:string"><simpleType base="xsd:string">
<enumeration value="Green"/><enumeration value="Green"/>
<enumeration value="Blue"/><enumeration value="Blue"/>
</simpleType></simpleType>
</element></element>
<age>45</age><age>45</age>
<height>5.9</height><height>5.9</height>
<displacement>-450</displacement><displacement>-450</displacement>
<color>Blue</color> <color>Blue</color>
<SOAP-ENC:int id="int1">45</SOAP-ENC:int><SOAP-ENC:int id="int1">45</SOAP-ENC:int>
SOAP Types composites (1)SOAP Types composites (1)
<element name="Livre"><element name="Livre">
<complexType><complexType>
<element name="auteur" type="xsd:string"/><element name="auteur" type="xsd:string"/>
<element name="preface" type="xsd:string"/><element name="preface" type="xsd:string"/>
<element name="intro" type="xsd:string"/><element name="intro" type="xsd:string"/>
</complexType></complexType>
</e:Livre></e:Livre>
<e:Livre><e:Livre>
<author>jean Bonneau</author><author>jean Bonneau</author>
<preface>Preface Soap INT</preface><preface>Preface Soap INT</preface>
<intro>Introduction à SOAP</intro><intro>Introduction à SOAP</intro>
</e:Livre></e:Livre>
SOAP Types composites (2)SOAP Types composites (2)
<e:Livre><e:Livre>
<titre>SOAP à INT</titre><titre>SOAP à INT</titre>
<auteur href="#Personne-1"/><auteur href="#Personne-1"/>
</e:Livre></e:Livre>
<e:Personne id="Personne-1"><e:Personne id="Personne-1">
<name>Jean Bonneau</name><name>Jean Bonneau</name>
<addresse href="#Addresse-2"/><addresse href="#Addresse-2"/>
</e:Personne></e:Personne>
<e:Addresse id="Addresse-2"><e:Addresse id="Addresse-2">
<email>mailto:[email protected]</email><email>mailto:[email protected]</email>
<web>http://www.jbonneau.com</web><web>http://www.jbonneau.com</web>
</e:Addresse></e:Addresse>
SOAP Types composites (3)SOAP Types composites (3)
Structure du livreStructure du livre
<element name="Livre" type="tns:Livre"/><element name="Livre" type="tns:Livre"/>
<complexType name="Livre"><complexType name="Livre">
<sequence minOccurs="0" maxOccurs="1"><sequence minOccurs="0" maxOccurs="1">
<element name="titre" type="xsd:string"/><element name="titre" type="xsd:string"/>
<element name="auteur" type="tns:Personne"/><element name="auteur" type="tns:Personne"/>
</sequence></sequence>
<attribute name="href" type="uriReference"/><attribute name="href" type="uriReference"/>
<attribute name="id" type="ID"/><attribute name="id" type="ID"/>
<anyAttribute namespace="##other"/><anyAttribute namespace="##other"/>
</complexType></complexType>
SOAP Types composites (4)SOAP Types composites (4)
Structure de Personne Structure de Personne
<element name="Personne" base="tns:Personne"/><element name="Personne" base="tns:Personne"/>
<complexType name="Personne"><complexType name="Personne">
<sequence minOccurs="0" maxOccurs="1"><sequence minOccurs="0" maxOccurs="1">
<element name="nom" type="xsd:string"/><element name="nom" type="xsd:string"/>
<element name="addresse" type="tns:Addresse"/><element name="addresse" type="tns:Addresse"/>
</sequence></sequence>
<attribute name="href" type="uriReference"/><attribute name="href" type="uriReference"/>
<attribute name="id" type="ID"/><attribute name="id" type="ID"/>
<anyAttribute namespace="##other"/><anyAttribute namespace="##other"/>
</complexType></complexType>
SOAP Types composites (5)SOAP Types composites (5)
Structure de Adresse Structure de Adresse
<element name="Addresse" base="tns:Addresse"/><element name="Addresse" base="tns:Addresse"/>
<complexType name="Addresse"><complexType name="Addresse">
<sequence minOccurs="0" maxOccurs="1"><sequence minOccurs="0" maxOccurs="1">
<element name="rue" type="xsd:string"/><element name="rue" type="xsd:string"/>
<element name="ville" type="xsd:string"/><element name="ville" type="xsd:string"/>
<element name="pays" type="xsd:string"/><element name="pays" type="xsd:string"/>
</sequence></sequence>
<attribute name="href" type="uriReference"/><attribute name="href" type="uriReference"/>
<attribute name="id" type="ID"/><attribute name="id" type="ID"/>
<anyAttribute namespace="##other"/><anyAttribute namespace="##other"/>
</complexType></complexType>
SOAP ArraySOAP Array
• Définis par le type "SOAP-ENC:Array" Définis par le type "SOAP-ENC:Array" ou dérivéou dérivé
• Représentés comme des éléments de Représentés comme des éléments de valeur sans contrainte sur le nom du valeur sans contrainte sur le nom du contenucontenu
<element name="mesResultats"<element name="mesResultats"
type="SOAP-ENC:Array"/>type="SOAP-ENC:Array"/>
< mesResultats< mesResultats
SOAP-ENC:arrayType="xsd:int[2]">SOAP-ENC:arrayType="xsd:int[2]">
<number>3</number> <number>3</number>
<number>4</number> <number>4</number>
</ mesResultats ></ mesResultats >
SOAP sur HTTPSOAP sur HTTP
• Message SOAP dans le corps HTTPMessage SOAP dans le corps HTTP• En-tête HTTP 'soapAction'En-tête HTTP 'soapAction'
POST http://www.w3edfRetD.fr http/1.1POST http://www.w3edfRetD.fr http/1.1
Content-type:text/xml ; charset="utf-8"Content-type:text/xml ; charset="utf-8"
SOAPAction: http://www.w3edfRetD.fr#serviceSOAPAction: http://www.w3edfRetD.fr#service
<SOAP-ENV:Envelope<SOAP-ENV:Envelope
……..
</SOAP-ENV:Enveloppe></SOAP-ENV:Enveloppe>
SOAP requête RPCSOAP requête RPC
<soap:Envelope><soap:Envelope>
<soap:Body><soap:Body>
<xmlns:m="http://www.w3edfRetD.edu/stock" /<xmlns:m="http://www.w3edfRetD.edu/stock" />>
<m:GetStockPrice><m:GetStockPrice>
<m:StockName>IBM</m:StockName><m:StockName>IBM</m:StockName>
</m:GetStockPrice></m:GetStockPrice>
</soap:Body></soap:Body>
</soap:Envelope></soap:Envelope>
SOAP réponse RPCSOAP réponse RPC
<soap:Envelope><soap:Envelope>
<soap:Body> <soap:Body> <xmlns:m="http://www.w3edfRetD.edu/stock" /<xmlns:m="http://www.w3edfRetD.edu/stock" />>
<m:GetStockPriceResponse><m:GetStockPriceResponse>
<m:Price>20.5</m:Price><m:Price>20.5</m:Price>
</m:GetStockPriceResponse></m:GetStockPriceResponse>
</soap:Body></soap:Body>
</soap:Envelope></soap:Envelope>
SOAP Principes RPC (1)SOAP Principes RPC (1)
• Processus Client avec binding httpProcessus Client avec binding http
Construction de l'appel de
méthode
Sérialise en requête
SOAP-XML
Enveloppe la requête
SOAP-XML
En requête http
Requête http
envoyée au serveur SOAP
Réponse http reçue du serveur
SOAP
Extrait la réponse
SOAP-XML
de la réponse http
Désérialise la réponse
SOAP-XML
En réponse de méthode
Retourne la valeur
Package soap
Serializer/deserializer
Encoding/decoding http
SOAP Principes RPC (2)SOAP Principes RPC (2)
• Processus Serveur avec binding httpProcessus Serveur avec binding http
Requête http du client SOAP
envoie requête
décodeur
Décode la requête http et dé-sérialise la
requête SOAP-XML
Opération du Service
sérialise la réponse SOAP-XML et encode de la réponse
httpEnvoie la réponse
Retourne la réponse http
au client SOAP
Package soap
Servlet SOAP
Encoding/decoding http
et soap
Canal de requête du
servlet
Canal de réponse du
servlet
Invoque la méthode
envoie réponse
décodeur
SOAP Exemple (1)SOAP Exemple (1)
• Service de normalisation d'adressesService de normalisation d'adresses• Capable de fournir une adresse postale normalisée à partir d'informations de localisationCapable de fournir une adresse postale normalisée à partir d'informations de localisation• Utilise des types de données complexes en entrée et en sortieUtilise des types de données complexes en entrée et en sortie
NormAdresse getNorme( Local adresse_local)
getNorme
Service NormalisationAdresse
opérationInterface Implantation
Application
Public et standard
Privé et propriétaire
wsdl
SOAP
XML
SOAP Exemple (2) : Serveur-DéploiementSOAP Exemple (2) : Serveur-Déploiement
Le WSDL associé Le WSDL associé
<Definitions> Racine et namespace<Definitions> Racine et namespace
A voir plus tard en détailA voir plus tard en détail
<Types> Quels types de données dont échangés
<Message> Quels messages sont transmis <Port type>Quelles opérations sont supportées <Binding> Comment les messages sont transmis sur la connexion <service> Où est situé le service
SOAP Exemple (3) : Serveur-CodeSOAP Exemple (3) : Serveur-Code
• Classe Classe DoNormeDoNorme• Méthode getNorme : retourne une adresse
normalisée• Local et NormAdresse : Bean
• Accesseurs (get_) et mutateurs (set_) pour chaque attribut
• Afin d'utiliser un BeanSerializer
• Servlet d'initialisation de contexte
SOAP Exemple (4) : Client-CodeSOAP Exemple (4) : Client-Code
• Mapping des typesMapping des types
// Build the call.// Build the call.
Service service = new Service();Service service = new Service();
Call call = (Call) service.createCall();Call call = (Call) service.createCall();
// Map the types.// Map the types.
QName qn1 = new QName( "urn:NormAdresse", "Local" );QName qn1 = new QName( "urn:NormAdresse", "Local" );
call.registerTypeMapping(Local.class, qn1,call.registerTypeMapping(Local.class, qn1,
new org.apache.axis.encoding.ser.BeanSerializerFactory(Local.class, qn1),new org.apache.axis.encoding.ser.BeanSerializerFactory(Local.class, qn1),
new org.apache.axis.encoding.ser.BeanDeserializerFactory(Local.class, qn1));new org.apache.axis.encoding.ser.BeanDeserializerFactory(Local.class, qn1));
QName qn2 = new QName( "urn:NormAdresse", "NormAdresse" );QName qn2 = new QName( "urn:NormAdresse", "NormAdresse" );
call.registerTypeMapping(NormAdresse.class, qn2,call.registerTypeMapping(NormAdresse.class, qn2,
new org.apache.axis.encoding.ser.BeanSerializerFactory(NormAdresse.class, new org.apache.axis.encoding.ser.BeanSerializerFactory(NormAdresse.class, qn2),qn2),
new org.apache.axis.encoding.ser.BeanDeserializerFactory(NormAdresse.class, new org.apache.axis.encoding.ser.BeanDeserializerFactory(NormAdresse.class, qn2));qn2));
Serialiser la classe Local
SOAP Exemple (5) : Client-CodeSOAP Exemple (5) : Client-Code
• Construire l'appelConstruire l'appel
call.setTargetEndpointAddress( new java.net.URL(endpointURL) );call.setTargetEndpointAddress( new java.net.URL(endpointURL) );
call.setOperationName( new QName("NormAdresseService", "getNorme") );call.setOperationName( new QName("NormAdresseService", "getNorme") );
call.addParameter( "AdresseDuLocal", qn1, ParameterMode.IN );call.addParameter( "AdresseDuLocal", qn1, ParameterMode.IN );
call.setReturnType(qn2,NormAdresse.class); //Build the paramscall.setReturnType(qn2,NormAdresse.class); //Build the params
le_local.setloc_no_voie(" 9 BIS");le_local.setloc_no_voie(" 9 BIS");
le_local.setloc_l_voie1("Chemin de la Sablière ");le_local.setloc_l_voie1("Chemin de la Sablière ");
le_local.setloc_l_voie2("BP 12");le_local.setloc_l_voie2("BP 12");
le_local.setloc_c_postal(" 91430");le_local.setloc_c_postal(" 91430");
le_local.setloc_l_bd(" Igny");le_local.setloc_l_bd(" Igny");
Object resp resp = call.invoke( new Object[] { le_local } );Object resp resp = call.invoke( new Object[] { le_local } );
Méthode
On aurait pu directement
construire le XML dans un
SOAPBodyElement[] et le passer au call
SOAP Exemple (6) : Client-CodeSOAP Exemple (6) : Client-Code
• Exploiter le résultatExploiter le résultat// //
if (resp instanceof java.rmi.RemoteException)if (resp instanceof java.rmi.RemoteException)
{{
throw(java.rmi.RemoteException) resp;throw(java.rmi.RemoteException) resp;
}}
elseelse
try {try {
NormAdresse value = (NormAdresse)resp;NormAdresse value = (NormAdresse)resp;
if ( value != null )if ( value != null )
{{
System.out.println("retour :");System.out.println("retour :");
System.out.println("code"+value.getAdr_c_postal());System.out.println("code"+value.getAdr_c_postal());
… …
}}
} catch(java.lang.Exception e) { …}} catch(java.lang.Exception e) { …}
WSDLWSDL
Web Services Description LanguageWeb Services Description Language
Vocabulaire XML, similaire dans le principe à IDL Vocabulaire XML, similaire dans le principe à IDL
• Il contient des informations opérationnelles concernant le service :Il contient des informations opérationnelles concernant le service :• L'interface du service L'interface du service • Les détails d'implantation Les détails d'implantation • Les protocoles d'accès Les protocoles d'accès • Les points d'activation (contact endpoints)Les points d'activation (contact endpoints)
WSDL : convergence de deux langages WSDL : convergence de deux langages
IBM's NASSLIBM's NASSL
Microsoft's SDLMicrosoft's SDL
WSDLWSDL
<definition<definitions> : Définition du service. Racine de tout WSDL. Elle peut s> : Définition du service. Racine de tout WSDL. Elle peut contenir les attributs précisant le nom du service, et les espaces de contenir les attributs précisant le nom du service, et les espaces de nommage. Il contient trois types d’éléments :nommage. Il contient trois types d’éléments :
<message> et <portType><message> et <portType> : Définissent les opérations offertes par : Définissent les opérations offertes par
Le service. Un <message> correspond à un paramètre d’entrée ou de sortie Le service. Un <message> correspond à un paramètre d’entrée ou de sortie d’une <operation>. Un <portType> définit un ensemble d’opérations. Une d’une <operation>. Un <portType> définit un ensemble d’opérations. Une <operation> possède un nom et des paramètres d'E/S.<operation> possède un nom et des paramètres d'E/S.
<binding<binding> : Associe les <portType> à un protocole particulier. Par exemple > : Associe les <portType> à un protocole particulier. Par exemple SOAP.SOAP.
<service<service> : Précise les informations nécessaires à l'invocation d'un service, en > : Précise les informations nécessaires à l'invocation d'un service, en particulier l’URI du destinataire. Un <service> est une collection de particulier l’URI du destinataire. Un <service> est une collection de <por<port> ;ie t> ;ie d’associations de <binding> et d'URI.d’associations de <binding> et d'URI.
Les types de données complexes peuvent être précisés dans une balise Les types de données complexes peuvent être précisés dans une balise <types> <types> placée juste avant la balise <message>.placée juste avant la balise <message>.
Chaque élément WSDL peut être documenté grâce à une balise Chaque élément WSDL peut être documenté grâce à une balise <documentation>.<documentation>.
WSDL : exemple (1)WSDL : exemple (1)
L’exemple suivant est la description du service Echo précédemment défini :L’exemple suivant est la description du service Echo précédemment défini :
<wsdl:definitions <wsdl:definitions targetNamespace="http://cli20ir:9595/axis/services/NormAdresseService/axis/targetNamespace="http://cli20ir:9595/axis/services/NormAdresseService/axis/services/NormAdresseService" xmlns="http://schemas.xmlsoap.org/wsdl/" services/NormAdresseService" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://cli20ir:9595/axis/services/NormAdresseService/axis/services/xmlns:impl="http://cli20ir:9595/axis/services/NormAdresseService/axis/services/NormAdresseService-impl" NormAdresseService-impl" xmlns:intf="http://cli20ir:9595/axis/services/NormAdresseService/axis/services/xmlns:intf="http://cli20ir:9595/axis/services/NormAdresseService/axis/services/NormAdresseService" NormAdresseService" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns1="urn:NormAdresse" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns1="urn:NormAdresse" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/">xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/">
La première partie du fichier définit les espaces de nommage
WSDL : exemple(2)WSDL : exemple(2)
<wsdl:types><wsdl:types>
<schematargetNamespace="urn:NormAdresse" <schematargetNamespace="urn:NormAdresse" xmlns="http://www.w3.org/2001/XMLSchema">xmlns="http://www.w3.org/2001/XMLSchema">
<complexTypename="Local"> <complexTypename="Local">
<sequence><sequence>
<element name="loc_no"nillable="true"type="xsd:string"/> <element name="loc_no"nillable="true"type="xsd:string"/>
<element name="cli_ic_orig"nillable="true"type="xsd:string"/> <element name="cli_ic_orig"nillable="true"type="xsd:string"/>
… …
</sequence></sequence>
</complexType></complexType>
<element name="Local"nillable="true"type="tns1:Local"/> <element name="Local"nillable="true"type="tns1:Local"/>
</schema></schema>
</wsdl:types></wsdl:types>On trouve ensuite les
types particuliers utilisés
WSDL : exemple (3)WSDL : exemple (3)
<wsdl:message name="getNormeResponse"><wsdl:message name="getNormeResponse">
<wsdl:part name="return"type="tns1:NormAdresse" /><wsdl:part name="return"type="tns1:NormAdresse" />
</wsdl:message></wsdl:message>
<wsdl:message name="getNormeRequest"><wsdl:message name="getNormeRequest">
<wsdl:part name="adresse_local"type="tns1:Local"/> <wsdl:part name="adresse_local"type="tns1:Local"/>
</wsdl:message></wsdl:message>
<wsdl:portTypename="DoNorme"><wsdl:portTypename="DoNorme">
<wsdl:operationname="getNorme"parameterOrder="adresse_local"><wsdl:operationname="getNorme"parameterOrder="adresse_local">
<wsdl:input <wsdl:input message="intf:getNormeRequest"name="getNormeRequest" /> message="intf:getNormeRequest"name="getNormeRequest" /> <wsdl:output <wsdl:output message="intf:getNormeResponse"name="getNormeResponse" />message="intf:getNormeResponse"name="getNormeResponse" />
</wsdl:operation></wsdl:operation>
</</wsdl:portType>
Puis les paramètres
d’entrée et de sortie des
opérations du service
La définition abstraite du service Web est faite par définition du
portType, indépendante de tout protocole de communication. C’est l’interface du service définissant les
méthodes exportées, et leurs paramètres d’entrée et de sortie.
WSDL : exemple (4)WSDL : exemple (4)
<wsdl:binding <wsdl:binding name="NormAdresseServiceSoapBinding"type="intf:DoNorme">name="NormAdresseServiceSoapBinding"type="intf:DoNorme">
<wsdlsoap:binding <wsdlsoap:binding style="rpc"transport="http://schemas.xmlsoap.org/soap/http" />style="rpc"transport="http://schemas.xmlsoap.org/soap/http" />
<wsdl:operationname="getNorme"><wsdl:operationname="getNorme"> <wsdlsoap:operation soapAction="" /><wsdlsoap:operation soapAction="" /><wsdl:input name="getNormeRequest"><wsdl:input name="getNormeRequest"> <wsdlsoap:body <wsdlsoap:body
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"namespacencodingStyle="http://schemas.xmlsoap.org/soap/encoding/"namespace="http://cli20ir:9595/axis/services/NormAdresseService/axis/e="http://cli20ir:9595/axis/services/NormAdresseService/axis/services/NormAdresseService"use="encoded" />services/NormAdresseService"use="encoded" />
</wsdl:input> </wsdl:input> <wsdl:outputname="getNormeResponse"><wsdl:outputname="getNormeResponse"> <wsdlsoap:body <wsdlsoap:body
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"namespacencodingStyle="http://schemas.xmlsoap.org/soap/encoding/"namespace="http://cli20ir:9595/axis/services/NormAdresseService/axis/e="http://cli20ir:9595/axis/services/NormAdresseService/axis/services/NormAdresseService"use="encoded" /> services/NormAdresseService"use="encoded" />
</wsdl:output></wsdl:output></wsdl:operation></wsdl:operation></wsdl:binding></wsdl:binding>
Ce service est associé à un protocole existant, via un binding . Il définit les paramètres d’invocation du service spécifiques au protocole. Les paramètres nécessaires à l’utilisation (lien vers les spécifications du transport utilisé, règles d’encodage pour les messages échangés, …).
WSDL : exemple (5)WSDL : exemple (5)
<wsdl:service name="DoNormeService"><wsdl:port binding="intf:NormAdresseServiceSoapBinding" name="NormAdresseService"><wsdlsoap:address location=http://cli20ir:9595/axis/services/NormAdresseService /></wsdl:port> </wsdl:service>
</wsdl:definitions>
La définition du service se termine par la définition de plusieurs bindings, associés à plusieurs URL, et ce en utilisant la même définition abstraite du service.
WSDLWSDL
• WSDL créé automatiquement à partir de Java WSDL créé automatiquement à partir de Java avec Java2WSDLavec Java2WSDL
• UtilisationUtilisation• Construire un proxy pour une utilisation directe à partir du client ou d'un autre Service avec WSDL2JDoNorme binding = new DoNormeServiceLocator().getNormAdresseService();NormAdresse value = binding.getNorme(le_local);
•Exploiter dynamiquement le WSDL avec WSDL4J•Pour une invocation dynamique ou bien pour automatiser l'enregistrement et la publication dans un annuaire
UDDIUDDI
Universal Description, Discovery and IntegrationUniversal Description, Discovery and Integration
Une spécification pour la description et la découverte de WebServicesUne spécification pour la description et la découverte de WebServices
• Les Businesses enregistrent des Les Businesses enregistrent des informations publiques les informations publiques les concernantconcernant
• Les développeurs, éditeurs de Les développeurs, éditeurs de logiciels, organismes de logiciels, organismes de standardisation enregistrent des standardisation enregistrent des types de services techniquestypes de services techniques
White pages (informations générales)White pages (informations générales)
Yellow pages (catégories de services)Yellow pages (catégories de services)
Green pages (business rules)Green pages (business rules)
WhitePages
YellowPages
GreenPages
UDDIUDDI
Pages blanchesPages blanches : noms, adresses, contacts, identifiants,… des entreprises : noms, adresses, contacts, identifiants,… des entreprises
enregistrées. Ces informations sont décrites dans des entités de type enregistrées. Ces informations sont décrites dans des entités de type BusinessBusiness
EntitEntity. Cette description inclut des informations de catégorisation permettant dey. Cette description inclut des informations de catégorisation permettant de
faire des recherches spécifiques dépendant du métier de l’entreprise ;faire des recherches spécifiques dépendant du métier de l’entreprise ;
Pages jaunesPages jaunes : détails sur le métier de l’entreprise, les services qu’elle propose. Ces : détails sur le métier de l’entreprise, les services qu’elle propose. Ces
informations sont décrites dans des entités de type informations sont décrites dans des entités de type Business Service Business Service ;;
Pages vertesPages vertes : informations techniques sur les services proposés. Les pages vertes : informations techniques sur les services proposés. Les pages vertes
incluent des références vers les spécifications des services Web, et les détailsincluent des références vers les spécifications des services Web, et les détails
nécessaires à l’utilisation de ces services. Ces informations sont décrites dans deux nécessaires à l’utilisation de ces services. Ces informations sont décrites dans deux documents : un documents : un Binding TemplatBinding Template, et un e, et un Technology Model (tModelTechnology Model (tModel).).
UDDIUDDI
• Document XML Document XML
businessEntitybusinessKeynameURLdescriptioncontactsbusinessServicesidentifierBagcategoryBag
PhoneAddressEmail
Contact
businessServiceKeyNameDescriptionBindingTemplates
PhoneAddressEmail
Contact
businessServiceserviceKeytModelKeyNameDescriptionBindingTemplates
keyedReferencetModelKeykeyNamekeyValue
keyedReferencetModelKeykeyNamekeyValue
keyedReferencekeyedReference
tModelKeykeyNamekeyValue
UDDIUDDI
businessEntityRD991… EDF-RETDwww.edf-retd.fr“Architecture Services…."contactsbusinessServicesidentifierBagcategoryBag
businessServiceKeyNameDescriptionBindingTemplates
businessService
34257GHF12…Services support Archi“Website where you can …BindingTemplates
BindingTemplate110293-32009…http://www.edf-retd.fr/sinetics…tModelInstanceDetails
tModelInstanceInfo
1112C-2244-3AXA…
http://www.edf-retd.fr/catalogArchikeyedReference
DFE-2B…DUNS45231
keyedReference
EE123…NAICS007..
tModelKeys
UDDIUDDI
• Enregistrer et retrouver un Service avec UDDI4JEnregistrer et retrouver un Service avec UDDI4J• 2 parties dans WSDL : interface + implantation2 parties dans WSDL : interface + implantation
InterfaceInterface<Definition><Definition>
<Types><Import><Message><Portype><binding>
</Definition></Definition>
ImplantationImplantation<Definition><Definition>
<Import><Import>
<Service><Service>
<Port><Port>
</Service></Service>
</Definition></Definition>
UDDIUDDI
<import>
<types>
<messages>
<portType>
<Binding>
Interface
<port>
<port>
<service>
Implantation
BusinessTemplate
BusinessService
BusinessEntity
BusinessTemplate
tModel
UDDI
<wsdl:definitions name="NormAdresseService" targetNamespace="http://…"><import namespace="http://…" location="http://…" /><wsdl:service name="DoNormeService"><wsdl:port name="NormAdresseService " binding="intf:NormAdresseServiceSoapBinding">…</wsdl:service></wsdl:definitions>
UDDIUDDI
<wsdl:definitions name="NormAdresseService.interface"targetNamespace="http://…"><wsdl:message name="getNormeResponse"></wsdl:message>…<wsdl:portType name="DoNorme"></wsdl:portType><wsdl:binding name="NormAdresseServiceSoapBinding"type="intf:DoNorme"></wsdl:binding></wsdl:definitions></wsdl:definitions>
Interface
Implantation
<BusinessEntity businessKey="…"<name> Normalisation d'adresse </name>…<businessService serviceKey="…"><name> DoNormeService </name><BindingTemplates bindingKey="…"><TmodelInstanceInfo tModelKey="…"><overviewDoc><overviewdocURL>http://…# NormAdresseService </overviewdocURL>…</BindingTemplates></businessService></BusinessEntity>
<tModel tModelKey="…"<name> http://… </name>…<overviewDoc><overviewdocURL>http://…#NormAdresseServiceSoapBinding targetNamespace="http://…"></overviewdocURL>…<categoryBag><KeyedReference tModemKey="…" keyname="uddi-org:types keyvalue="wsdlSpec"/></ categoryBag ></tModel>
UDDI
UDDIUDDI
• Enregistrer séparément les descriptions des Enregistrer séparément les descriptions des Compagnies et les descriptions des servicesCompagnies et les descriptions des services
• Développeurs, éditeurs de logiciels, organismes Développeurs, éditeurs de logiciels, organismes de standardisation enregistrent des types de de standardisation enregistrent des types de servicesservices
• Les Compagnies enregistrent les services Les Compagnies enregistrent les services qu'elles supportentqu'elles supportent
UDDIUDDI
• UDDI4J simplifie l'interaction avec un UDDI4J simplifie l'interaction avec un annuaire UDDIannuaire UDDI
• Pour l'enregistrement et la découvertePour l'enregistrement et la découverte• Utilisation de l'objet UDDIProxy Utilisation de l'objet UDDIProxy
UDDIProxy p = new UDDIProxy();UDDIProxy p = new UDDIProxy();
p. setInquiryURL( p. setInquiryURL( “ “ http:// http:// …” …” ););
p. setPublishURL( p. setPublishURL( ““https:// https:// …” …” ););
UDDIUDDI
• Inquiry APIInquiry API• Trouver
• find_business• find_service• find_binding• find_tModel
• Plus de détails• get_businessDetail• get_serviceDetail• get_bindingDetail• get_tModelDetail
• Publishers APIPublishers API• Enregistrer
• save_business• save_service• save_binding• save_tModel
• Détruire• delete_business• delete_service• delete_binding• delete_tModel
• Sécurité• get_authToken• discard_authToken
UDDIUDDI
Client
Nœud annuaire UDDI
Requête UDDI SOAP
Réponse UDDI SOAP
Serveur HTTP
Serveur SOAP
Annuaire UDDI
WSDL
WebService
Nœud WS
UDDI4J
WSDL4J
Enregistrement à partir d'un fichier
wsdl
Enregistrement UDDI
UDDIUDDI
Client
Nœud annuaire UDDI
Requête UDDI SOAP
Réponse UDDI SOAP
Serveur HTTP
Serveur SOAP
Annuaire UDDI
WSDL
WebService
Nœud WS
UDDI4J
Utilisation UDDI
URI="http://…"
Communication avec le WS
UDDI : exemple (1)UDDI : exemple (1)
• Retrouver une BusinessEntity, un des services Retrouver une BusinessEntity, un des services qu'elle propose qu'elle propose
• Invoquer ce serviceInvoquer ce service
Retrouver la BusinessEntityRetrouver la BusinessEntity
Vector names = new Vector();Vector names = new Vector();
names.add(new Name("EDF-RetD"));names.add(new Name("EDF-RetD"));
BusinessList businessList = proxy.find_business(names, null, null,null,null,null,10);BusinessList businessList = proxy.find_business(names, null, null,null,null,null,10);
Vector businessInfoVector = businessList.getBusinessInfos().getBusinessInfoVector();Vector businessInfoVector = businessList.getBusinessInfos().getBusinessInfoVector();
BusinessInfo businessInfo = null;BusinessInfo businessInfo = null;
……..
Boucle dans businessInfoVector pour vérifier que c'est le bon Boucle dans businessInfoVector pour vérifier que c'est le bon BusinessEntityBusinessEntity
Vector serviceInfoVector = businessInfo.getServiceInfos().getServiceInfoVector();Vector serviceInfoVector = businessInfo.getServiceInfos().getServiceInfoVector();
……
Boucle dans serviceInfoVector pour retrouver le serviceInfoBoucle dans serviceInfoVector pour retrouver le serviceInfo
Dans la pratique on rechercherait plutôt par catégorie
UDDI : exemple (2)UDDI : exemple (2)
Retrouver les détails pour le service référencé par les différentes Retrouver les détails pour le service référencé par les différentes clésclés
ServiceDetail serviceDetail = proxy.get_serviceDetail(serviceInfo.getServiceKey());ServiceDetail serviceDetail = proxy.get_serviceDetail(serviceInfo.getServiceKey());
Vector businessServices = serviceDetail.getBusinessServiceVector();Vector businessServices = serviceDetail.getBusinessServiceVector();
Boucle dans businessServices pour retrouver le ServiceBoucle dans businessServices pour retrouver le Service
BusinessService businessService = null;BusinessService businessService = null;
for (int i = 0; i < businessServices.size(); i++) {for (int i = 0; i < businessServices.size(); i++) {
businessService = (BusinessService)businessServices.elementAt(i);businessService = (BusinessService)businessServices.elementAt(i);
if (serviceName.equals(businessService.getDefaultNameString())) {…}if (serviceName.equals(businessService.getDefaultNameString())) {…}
Maintenant,il faut retrouver l'Overview URL du tModel :Maintenant,il faut retrouver l'Overview URL du tModel :
Grâce au businessServices, retrouver le bindingTemplates puis le Grâce au businessServices, retrouver le bindingTemplates puis le point d'accès basé sur httppoint d'accès basé sur http
Vector bindingTemplateVector = Vector bindingTemplateVector = businessService.getBindingTemplates().getBindingTemplateVector();businessService.getBindingTemplates().getBindingTemplateVector();
AccessPoint accessPoint = null;AccessPoint accessPoint = null;
BindingTemplate bindingTemplate = null;BindingTemplate bindingTemplate = null;
On peut aussi faire un find_service
UDDI : exemple (3)UDDI : exemple (3)
Boucle dans bindingTemplateVector pour retrouver le Boucle dans bindingTemplateVector pour retrouver le bindingTemplate corrrespondantbindingTemplate corrrespondant
if (accessPoint.getURLType().equals("http")) …if (accessPoint.getURLType().equals("http")) …
Il faut enfin retrouver le tModel associéIl faut enfin retrouver le tModel associé
Vector tmodelInstanceInfoVector = Vector tmodelInstanceInfoVector = bindingTemplate.getTModelInstanceDetails().getTModelInstanceInfoVector();bindingTemplate.getTModelInstanceDetails().getTModelInstanceInfoVector();
String wsdlImplURI = null;String wsdlImplURI = null;
Boucle dans tmodelInstanceInfoVector pour retrouver Boucle dans tmodelInstanceInfoVector pour retrouver l'OverviewURL corrrespondantl'OverviewURL corrrespondant
TModelInstanceInfo instanceInfo = TModelInstanceInfo instanceInfo = (TModelInstanceInfo)tmodelInstanceInfoVector.elementAt(i);(TModelInstanceInfo)tmodelInstanceInfoVector.elementAt(i);
InstanceDetails details = instanceInfo.getInstanceDetails();InstanceDetails details = instanceInfo.getInstanceDetails();
OverviewDoc wsdlImpl = details.getOverviewDoc();OverviewDoc wsdlImpl = details.getOverviewDoc();
wsdlImplURI = wsdlImpl.getOverviewURLString();wsdlImplURI = wsdlImpl.getOverviewURLString();
UDDI : exemple (4) avec WSDLUDDI : exemple (4) avec WSDL
Il est alors possible d'invoquer Il est alors possible d'invoquer dynamiquement le service en utilisation l'api dynamiquement le service en utilisation l'api WSDL4JWSDL4J
Il faut en particulier analyser le WSDL et extraireIl faut en particulier analyser le WSDL et extraire
Le target namespaceLe target namespace
Le nom du serviceLe nom du service
Le nom du port le nom de l'opération ainsi que ces Le nom du port le nom de l'opération ainsi que ces paramètresparamètres
UDDIUDDI
• En pratique les clés de classification et d'identification En pratique les clés de classification et d'identification devraient être gérées et fournies par des agences devraient être gérées et fournies par des agences mondialesmondiales
• Les informations du niveau "yellow pages" de UDDI sont Les informations du niveau "yellow pages" de UDDI sont typiquement fondées sur deux standards : typiquement fondées sur deux standards : • NAICS (the North American Industry Classification System)
• projet des gouvernements du Canada, du Mexique et des US.
• http:// www.naics.comhttp:// www.naics.com
• UNSPSC (the Universal Standard Products and Services Classification).
• Efforts conjoints de Dun & Bradstreet et du programme de développement des nations unies pour une unification des classifications
• http://www.unspsc.orghttp://www.unspsc.org
UDDIUDDI
• Application directeApplication directe• La recherche du document WSDL associé au La recherche du document WSDL associé au
service est facilitée par une référence spécifique service est facilitée par une référence spécifique de nom "uddi-org:types" et de valeur "wsdlSpec" de nom "uddi-org:types" et de valeur "wsdlSpec"
Lors de l'enregistrement cette clé est définie de la Lors de l'enregistrement cette clé est définie de la manière suivante :manière suivante :
KeyedReference kr = new KeyedReference("uddi-org:types","wsdlSpec","");KeyedReference kr = new KeyedReference("uddi-org:types","wsdlSpec","");
UDDIUDDI
• Type d'annuaire utile pour la découverte de Type d'annuaire utile pour la découverte de BusinessEntity ou de BusinessServiceBusinessEntity ou de BusinessService• Identification et catégorisation
• Encore peu implantéEncore peu implanté• Nécessité d'un modérateurNécessité d'un modérateur• Mise en œuvre relativement complexeMise en œuvre relativement complexe• On lui préfère une approche plus pragmatiqueOn lui préfère une approche plus pragmatique
• WSIL • Fournit une liste simple des services
disponibles
WSIL WSIL
• WebService Inspection LanguageWebService Inspection Language• Une méthode de découverte de services décentraliséeUne méthode de découverte de services décentralisée• Considère que l'on connaît déjà le fournisseur de Considère que l'on connaît déjà le fournisseur de
services, donc pas de notion de businessEntityservices, donc pas de notion de businessEntity• WSIL représente une entité spécifique, ses services, ses WSIL représente une entité spécifique, ses services, ses
contacts et est fourni directement par celui qui le contacts et est fourni directement par celui qui le représentereprésente
• Un fichier WSIL références tous les documents qui Un fichier WSIL références tous les documents qui décrivent les services de l'entreprise, y compris UDDI décrivent les services de l'entreprise, y compris UDDI
WSILWSIL
XMLUDDI
WSDL
HTML
WSIL : exemple WSIL : exemple
<?xml version="1.0" encoding="UTF-8"?><?xml version="1.0" encoding="UTF-8"?> <inspection xmlns="http://schemas.xmlsoap.org/ws/2001/10/inspection/"><inspection xmlns="http://schemas.xmlsoap.org/ws/2001/10/inspection/"> <abstract>The EDF-RetD W Service Search API</abstract><abstract>The EDF-RetD W Service Search API</abstract> <service><service> <abstract>NormAdresse Search</abstract><abstract>NormAdresse Search</abstract> <description <description
referencedNamespace="http://schemas.xmlsoap.org/wsdl/" referencedNamespace="http://schemas.xmlsoap.org/wsdl/" location="http://www.edf-RetD.fr/NormAdresse.wsdl"/>location="http://www.edf-RetD.fr/NormAdresse.wsdl"/>
<description <description referencedNamespace ="http://www.w3c.org/html/" referencedNamespace ="http://www.w3c.org/html/" location ="http://www. edf-RetD.fr location ="http://www. edf-RetD.fr
/1999/NormAdresse_Deployment.html"/1999/NormAdresse_Deployment.html" /> />
<description <description referencedNamespace ="http://www.uddi.org/" referencedNamespace ="http://www.uddi.org/" location ="http://www. edf-RetD.fr /soapuddi/"location ="http://www. edf-RetD.fr /soapuddi/" /> /></service></service> </inspection></inspection>
Une fois le fichier créé, on peut le placer sousUne fois le fichier créé, on peut le placer soushttp://www.EDF-RetD.fr/WS/inspection.wsilhttp://www.EDF-RetD.fr/WS/inspection.wsil
Web Services et l'existantWeb Services et l'existant
• Que gagne-t-on ?• Que perd-on ?• Comment gérer la transition ?
Vraiment différent de J2EE ou CORBA ?
• Une nouvelle technologie pour le middleware• Curiosité, méfiance
Description des servicesDescription des services
• Spécification CORBASpécification CORBA • Langage de description des interfaces (OMG IDL) +
règles de projection vers des langages de programmation
• Langage de description des implantations : OMG CIDL + règles de génération de guides d’implantation.
Orientation service de WSDL
• Structure des messages échangés déduite de la Structure des messages échangés déduite de la description des interfaces (explicite en WSDL).description des interfaces (explicite en WSDL).
• Choix du protocole d’échange et de l’encodage des Choix du protocole d’échange et de l’encodage des messages lié à l’ORB (explicite en WSDL).messages lié à l’ORB (explicite en WSDL).
• Localisation des services déterminée au déploiement Localisation des services déterminée au déploiement (explicite en WSDL).(explicite en WSDL).
Description : CoexistenceDescription : Coexistence
• Spécification en cours à l’OMG Spécification en cours à l’OMG • RFP « CORBA to WSDL/SOAP interworking »• Réponse commune de Cape Clear, Fujitsu, HP, IONA,
Sankhya avec le support d’IBM• J2EE 1.4 conteneur de serviceJ2EE 1.4 conteneur de service
Serveur d'applications
Port (représentation du web service)
Service endpoint interface
Wsdl :portType
Service instance
Wsdl :service
Usine à stubs
Service interface
Ejb ou JAX-RPC web component
Cycle de vie de la responsabilité su
serveur d'applications
Wsdl :portType, transport et
encoding binding
Wsdl:portadress
LocalisationLocalisation
• Spécification CORBA Spécification CORBA • Référence CORBA – chaîne de caractère ou URL• Annuaire de services (Naming Service) • Registre d'interfaces et d'implantation(Interface and
Implementation Repository)• Courtier (Trading Service)
• J2EE : JNDIJ2EE : JNDI• Passerelle vers des répertoires d’entreprises• Et JNDI SPI vers Corba• Répertoire centralisé des objets J2EE
• Fabrique d’objets « Home »• Variables et ressources partagées
client courtier serveur
ORB1 - import 2 - export
3 - interaction
Localisation : WebServiceLocalisation : WebService
• UDDIUDDI• Universal Description, Discovery and IntegrationUniversal Description, Discovery and Integration• Le référentiel UDDI vu comme un annuaire Le référentiel UDDI vu comme un annuaire
• pages blanches (informations de contact) • pages jaunes (classification par catégories)
• pages vertes (informations techniques sur le service)• WSILWSIL• WebService Inspection LanguageWebService Inspection Language• Une méthode de découverte de services décentraliséeUne méthode de découverte de services décentralisée
Découverte de service
Localisation Localisation
• Annuaire et découverte de service commun aux Annuaire et découverte de service commun aux WebServices et aux architectures CORBA, J2EEWebServices et aux architectures CORBA, J2EE
• Qualité de service pas dans UDDI mais peut Qualité de service pas dans UDDI mais peut être associée à ebXMLêtre associée à ebXML
CommunicationCommunication
CorbaCorba WebservicesWebservices
IDLIDL WSDL
Corba ServicesCorba Services UDDI - WSILUDDI - WSIL
Corba Stubs/SkeletonCorba Stubs/Skeleton Soap messagesSoap messages
CDR Binary EncodingCDR Binary Encoding XML unicode EncodingXML unicode Encoding
GIOP/IIOP , ESIOPGIOP/IIOP , ESIOP HTTP,FTP,SMTPHTTP,FTP,SMTP
TCP/IPTCP/IP TCP/IPTCP/IP
CommunicationCommunication
• CORBA - IIOPCORBA - IIOP• Invocation d'opération ou One-way• Relocalisation, • Multiplexage client-serveur• Abandon de requête
• SOAP SOAP • one way • Reconstruction de protocole• Multiples intermédiaires• Attachements SOAP permettent de véhiculer
des contenus MIME avec un message SOAP
Coexistence : CORBA - WSCoexistence : CORBA - WS
• Exposer des composants CORBA sous forme de Web ServicesExposer des composants CORBA sous forme de Web Services
• Web Services vus comme des composants CORBAWeb Services vus comme des composants CORBA
• Adaptation des environnements CORBA.Adaptation des environnements CORBA.
Conteneur d’applications Web
RéférentielUDDI
Client SOAP
SOAP/HTTP
Systèmes CORBA
DescriptionWSDL
ServeurSOAP
Client CORBA
Serveur Web
Coexistence : J2EE - WS Coexistence : J2EE - WS
• J2EE 1.4J2EE 1.4• API pour SOAP, WSDL, UDDIAPI pour SOAP, WSDL, UDDI
• SOAP Messaging• JAXM, SAAJ, JAX-RPC, JMS
• WSDL• Java API for WSDL• JAX-RPC
• UDDI• JAXR
Coexistence : J2EE - WSCoexistence : J2EE - WS
Conteneur de servlet
Conteneur Ejb
Port Port
servlet jsp ejb
RMI/IIOP
RMI/IIOP
HTTP/SSL
SOAP/HTTP et autres bindings
Noyau J2EE Noyau J2EE
Coexistence : J2EE - WSCoexistence : J2EE - WS
• Paquetage pour déploiementPaquetage pour déploiement• Pour Web Component : fichier WAR• Pour stateless session bean : fichier EJB JAR
• Descripteur de déploiement : webservices.xmlDescripteur de déploiement : webservices.xml• Différents de celui associé à l'implantation du
service : web.xml ou ejb-jar.xml• DéploiementDéploiement
• Génération des classes d'aide : servlet, stub, proxy,… pour le client (placement du service implementation accessible par JNDI)
• Génération, mise à jour et publication du WSDL
Coexistence : J2EE - WSCoexistence : J2EE - WS
• Développement sur J2EE Développement sur J2EE • WSDL de/vers Web service Endpoint Interface WSDL de/vers Web service Endpoint Interface
(java)(java)• Endpoint Interface spécifiée dans JAX-RPCEndpoint Interface spécifiée dans JAX-RPC
• Utile pour servlet-based et EJB-based endpoint
• Pour le cas EJB déclaration dans le descripteur de déploiement du endpoint
• Implantation en classe Java (servlet) ou Implantation en classe Java (servlet) ou Stateless session beanStateless session bean
• Création de descripteur de déploiementCréation de descripteur de déploiement• webservices.xml
ConclusionConclusion
• WS : De nombreuses caractéritiques en commun avec WS : De nombreuses caractéritiques en commun avec les environnements répartis J2EE, CORBA, Net.les environnements répartis J2EE, CORBA, Net.
• Principales différencesPrincipales différences• Positionnement ?
• WS : middleware de middleware• fonctionnement en mode déconnecté (connexions
transitoires et temporaires)• pas de connaissance a-priori des parties qui entrent en
communication (accès aux informations sur le service)
Réinventer la roue ?
AtoutsAtouts
• Intégrer au niveau serviceIntégrer au niveau service• Contrat métier• Contrat technique
• OrchestrationOrchestration• IntermédiationIntermédiation
Gagner en abstraction
ProduitsProduits
• ““HP WS” de HPHP WS” de HP• eSpeak, HP-AS, HP-WS
• ““E2A” de IONAE2A” de IONA• E2A WS Interoperation, Application Server
• ““Cape” de CapeClearCape” de CapeClear• CapeConnect, CapeStudio
• ““.Net” de Microsoft.Net” de Microsoft• .Net environment, .Net framework, .Net Visual Studio
• ““Sun One Net” de SunSun One Net” de Sun• iPlanet, Sun One Studio
• ““WebSphere” de IBMWebSphere” de IBM• WebSphere, WebSphere Studio
• ““WebLogic” de BEAWebLogic” de BEA• WebLogic Server, Integration, Portal, Studio
• ““Oracle 9i” de OracleOracle 9i” de Oracle• Oracle 9iAS
Des outils existent
PerspectivesPerspectives
• PerspectivesPerspectives• Maturité WS : encore du travailMaturité WS : encore du travail
• Gestion de la sécurité (Microsoft, IBM, Verisign : WS-Security) et des transactions (Microsoft, IBM, BEA : WS-Transaction).
• Définition de modèles d’interaction (chorégraphie) et de collaboration (processus métiers, recherche de partenaires).
• Périmètre WS : des interrogationsPérimètre WS : des interrogations• Persistance, gestion de l'état, …
Maturité et périmètre
WebServices : le futur ! (1)WebServices : le futur ! (1)
• SOAP Recommandations W3C , version 1.2SOAP Recommandations W3C , version 1.2• Points à voirPoints à voir
• La gestion des sessions• L'asynchronisme• …
• Des protocoles au dessus de SOAPDes protocoles au dessus de SOAP• Pour des sémantiques d'échanges
particulières• SOAP : one way• Basés sur la définition de patrons d'échanges
WebServices : le futur ! (2)WebServices : le futur ! (2)
• WSDL Recommandations W3C , version 1.2WSDL Recommandations W3C , version 1.2• On trouve encore plusieurs styles de
génération de WSDL ce qui complique l'interopérabilité
• UDDI Recommandations UDDI.org, version 3.0UDDI Recommandations UDDI.org, version 3.0• Trouver la vitesse de croisière• Le démarrage est difficile• Mise en œuvre assez complexe• Pas de modérateur
• WSIL version 1.0 une solution intéressanteWSIL version 1.0 une solution intéressante
IBM, MicroSoft,HP, Oracle, SAP,
…
WebServices : le futur ! (3)WebServices : le futur ! (3)
• Stabilisation des autres niveaux de la pile de Stabilisation des autres niveaux de la pile de protocole pour les WebServicesprotocole pour les WebServices
• En particulier l'orchestration ou encore la En particulier l'orchestration ou encore la chorégraphie des serviceschorégraphie des services• dérouler des processus plus complexes que l’appel
d’opérations atomiques, avec plusieurs acteurs. Couvert par la spécification BPEL4WS
• Notion d'intermédiaire entre acteurs de Notion d'intermédiaire entre acteurs de différentes compagniesdifférentes compagnies
Quelques URLsQuelques URLs
StandardsStandardshttp://xml.apache.org/axis. Apache-Axishttp://xml.apache.org/axis. Apache-Axishttp://www.w3.org/2000/xp SOAPhttp://www.w3.org/2000/xp SOAPhttp://www.w3.org/XML/Schema XML-schemahttp://www.w3.org/XML/Schema XML-schemahttp://www.w3.org/TR/wsdl WSDLhttp://www.w3.org/TR/wsdl WSDLhttp://www.uddi.org/UDDIhttp://www.uddi.org/UDDI
RessourcesRessourceshttp://www-106.ibm.com/developerworks/webservices/http://www-106.ibm.com/developerworks/webservices/http://www-106.ibm.com/developerworks/webservices/wsdk/http://www-106.ibm.com/developerworks/webservices/wsdk/http://www.webservices.org/http://www.webservices.org/http://www.javaworld.com/javaworld/jw-05-2002/jw-0517-webservices.html http://www.javaworld.com/javaworld/jw-05-2002/jw-0517-webservices.html http://www.themindelectric.com/ http://www.themindelectric.com/
Sites de WSSites de WShttp://www.xmethods.net/ http://www.xmethods.net/ http://hosting.msugs.ch/http://hosting.msugs.ch/http://java.sun.com/webservices/ http://java.sun.com/webservices/
Alors ?Alors ?WebServices ?WebServices ?
Top Related