93
WebServices WebServices [email protected]

Soap 141118081018 Conversion Gate01

Embed Size (px)

DESCRIPTION

s

Citation preview

Page 1: Soap 141118081018 Conversion Gate01

WebServicesWebServices

[email protected]

Page 2: Soap 141118081018 Conversion Gate01

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

Page 3: Soap 141118081018 Conversion Gate01

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

Page 4: Soap 141118081018 Conversion Gate01

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

Page 5: Soap 141118081018 Conversion Gate01

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

Page 6: Soap 141118081018 Conversion Gate01

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é

Page 7: Soap 141118081018 Conversion Gate01

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

Page 8: Soap 141118081018 Conversion Gate01

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

Page 9: Soap 141118081018 Conversion Gate01

• 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 ?

Page 10: Soap 141118081018 Conversion Gate01

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

Page 11: Soap 141118081018 Conversion Gate01

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

Page 12: Soap 141118081018 Conversion Gate01

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

Page 13: Soap 141118081018 Conversion Gate01

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

Page 14: Soap 141118081018 Conversion Gate01

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

Page 15: Soap 141118081018 Conversion Gate01

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

Page 16: Soap 141118081018 Conversion Gate01

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

Page 17: Soap 141118081018 Conversion Gate01

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

Page 18: Soap 141118081018 Conversion Gate01

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>

Page 19: Soap 141118081018 Conversion Gate01

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>

Page 20: Soap 141118081018 Conversion Gate01

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.

Page 21: Soap 141118081018 Conversion Gate01

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>

Page 22: Soap 141118081018 Conversion Gate01

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>

Page 23: Soap 141118081018 Conversion Gate01

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>

Page 24: Soap 141118081018 Conversion Gate01

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

Page 25: Soap 141118081018 Conversion Gate01

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>

Page 26: Soap 141118081018 Conversion Gate01

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>

Page 27: Soap 141118081018 Conversion Gate01

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>

Page 28: Soap 141118081018 Conversion Gate01

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>

Page 29: Soap 141118081018 Conversion Gate01

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>

Page 30: Soap 141118081018 Conversion Gate01

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>

Page 31: Soap 141118081018 Conversion Gate01

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 >

Page 32: Soap 141118081018 Conversion Gate01

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>

Page 33: Soap 141118081018 Conversion Gate01

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>

Page 34: Soap 141118081018 Conversion Gate01

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>

Page 35: Soap 141118081018 Conversion Gate01

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

Page 36: Soap 141118081018 Conversion Gate01

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

Page 37: Soap 141118081018 Conversion Gate01

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

Page 38: Soap 141118081018 Conversion Gate01

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

Page 39: Soap 141118081018 Conversion Gate01

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

Page 40: Soap 141118081018 Conversion Gate01

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

Page 41: Soap 141118081018 Conversion Gate01

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

Page 42: Soap 141118081018 Conversion Gate01

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) { …}

Page 43: Soap 141118081018 Conversion Gate01

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

Page 44: Soap 141118081018 Conversion Gate01

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>.

Page 45: Soap 141118081018 Conversion Gate01

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

Page 46: Soap 141118081018 Conversion Gate01

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

Page 47: Soap 141118081018 Conversion Gate01

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.

Page 48: Soap 141118081018 Conversion Gate01

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, …).

Page 49: Soap 141118081018 Conversion Gate01

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.

Page 50: Soap 141118081018 Conversion Gate01

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

Page 51: Soap 141118081018 Conversion Gate01

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

Page 52: Soap 141118081018 Conversion Gate01

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).).

Page 53: Soap 141118081018 Conversion Gate01

UDDIUDDI

• Document XML Document XML

businessEntitybusinessKeynameURLdescriptioncontactsbusinessServicesidentifierBagcategoryBag

PhoneAddressEmail

Contact

businessServiceKeyNameDescriptionBindingTemplates

PhoneAddressEmail

Contact

businessServiceserviceKeytModelKeyNameDescriptionBindingTemplates

keyedReferencetModelKeykeyNamekeyValue

keyedReferencetModelKeykeyNamekeyValue

keyedReferencekeyedReference

tModelKeykeyNamekeyValue

Page 54: Soap 141118081018 Conversion Gate01

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

Page 55: Soap 141118081018 Conversion Gate01

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>

Page 56: Soap 141118081018 Conversion Gate01

UDDIUDDI

<import>

<types>

<messages>

<portType>

<Binding>

Interface

<port>

<port>

<service>

Implantation

BusinessTemplate

BusinessService

BusinessEntity

BusinessTemplate

tModel

UDDI

Page 57: Soap 141118081018 Conversion Gate01

<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

Page 58: Soap 141118081018 Conversion Gate01

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

Page 59: Soap 141118081018 Conversion Gate01

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:// …” …” ););

Page 60: Soap 141118081018 Conversion Gate01

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

Page 61: Soap 141118081018 Conversion Gate01

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

Page 62: Soap 141118081018 Conversion Gate01

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

Page 63: Soap 141118081018 Conversion Gate01

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

Page 64: Soap 141118081018 Conversion Gate01

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

Page 65: Soap 141118081018 Conversion Gate01

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();

Page 66: Soap 141118081018 Conversion Gate01

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

Page 67: Soap 141118081018 Conversion Gate01

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

Page 68: Soap 141118081018 Conversion Gate01

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","");

Page 69: Soap 141118081018 Conversion Gate01

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

Page 70: Soap 141118081018 Conversion Gate01

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

Page 71: Soap 141118081018 Conversion Gate01

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

Page 72: Soap 141118081018 Conversion Gate01

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

Page 73: Soap 141118081018 Conversion Gate01

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).

Page 74: Soap 141118081018 Conversion Gate01

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

Page 75: Soap 141118081018 Conversion Gate01

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

Page 76: Soap 141118081018 Conversion Gate01

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

Page 77: Soap 141118081018 Conversion Gate01

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

Page 78: Soap 141118081018 Conversion Gate01

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

Page 79: Soap 141118081018 Conversion Gate01

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

Page 80: Soap 141118081018 Conversion Gate01

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

Page 81: Soap 141118081018 Conversion Gate01

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

Page 82: Soap 141118081018 Conversion Gate01

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

Page 83: Soap 141118081018 Conversion Gate01

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

Page 84: Soap 141118081018 Conversion Gate01

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

Page 85: Soap 141118081018 Conversion Gate01

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 ?

Page 86: Soap 141118081018 Conversion Gate01

AtoutsAtouts

• Intégrer au niveau serviceIntégrer au niveau service• Contrat métier• Contrat technique

• OrchestrationOrchestration• IntermédiationIntermédiation

Gagner en abstraction

Page 87: Soap 141118081018 Conversion Gate01

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

Page 88: Soap 141118081018 Conversion Gate01

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

Page 89: Soap 141118081018 Conversion Gate01

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

Page 90: Soap 141118081018 Conversion Gate01

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,

Page 91: Soap 141118081018 Conversion Gate01

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

Page 92: Soap 141118081018 Conversion Gate01

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/

Page 93: Soap 141118081018 Conversion Gate01

[email protected]

Alors ?Alors ?WebServices ?WebServices ?