Vous êtes sur la page 1sur 93

WebServices

Philippe.Bedu@edf.fr

Composants
Time to market
Amliorer la productivit
Rduire la complexit
Rutiliser si possible
Assemblage plutt que programmation
Rduire les besoins en comptences
spcialises
Recentrage sur lexpertise du domaine
Amliorer la qualit du logiciel

Web Services (1)


Opration : action invocable
Interface : partition des oprations
Service : ensemble des interfaces utilisables pour une autre
application cooprative

Service Web
Service invocable travers le rseau
Non bas sur le contenu (pages web)
Dlivre des donnes structures une
application

Profiter des standards du moment

Web Services (2)

Utilisation pour l'intgration

Dans un portail
Applications d'entreprise

Internet

B2B

Intranet

Service
mto

Portail
mto

Normalisation
d'adresse

traducteur

commande

traduction

vente
B Processus

Achat

Web Services (3)

SGBD procdures catalogues

Orchestration de Flux
Serveur d'applications
Adaptateur progiciels

Systmes orients Messages,


courtiers d'Intgration

Web Services (4)


Pile de protocoles

Services techniques

Services mtier

Processus, workflow

BPEL

ebXML

WS-coordination

RosettaNet

WS-Transaction
Annuaire

UDDI, WSIL

Description

WSDL

Scurit

WS-Security

XML-based message

SOAP : messaging

Transport

http,httpr,smtp,ftp,mq,iiop
TCP/IP

Plan
SOAP
Protocole de transmission de
messages XML
WSDL
Web Services Description Language
UDDI
Universal Description Discovery and
Integration
Web Services
Intgration avec l'existant

SOAP
SOAP 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
travaux W3C
Protocole de transmission de messages en
XML

SOAP ?
SOAP protocole XML permettant la communication entre
composants logiciels et applications en sappuyant sur des
protocoles standards de type http, smtp,
SOAP Simple Object Access Protocol
SOAP Service Oriented Architecture Protocol
SOAP est un protocole de transmission de messages
SOAP est adapt la communication entre applications
SOAP est un format dchange de messages
SOAP est conu pour fonctionner sur lInternet
SOAP est indpendant des plates-formes et des langages
SOAP est bas sur XML
SOAP est simple et extensible
SOAP en voie de standardisation par W3C

OK, et CORBA alors? (1)


CORBA 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 dInternet

OK, et CORBA alors? (2)


String-ware ?
SOAP est un protocole bas sur XML
En consquence, particulirement prolixe
CORBA, au travers de IIOP, le battra en
performance car les oprations de
conversion et de dconversion
(marshalling et demarshalling) dans CORBA
sont plus efficaces et il y a moins de donnes
sur le rseau.
Nanmoins les messages en xml sont
lisibles et utilisables : utile pour la mise au
point

SOAP Scenarii (1)


Envoi et oublie, avec
un ou n rcepteurs

Niveau SOAP

Requte rponse, requte


avec acquittement ou RPC
sur un protocole de
transport assurant la
corrlation

Nud SOAP
metteur
initial

Nud SOAP
ultime
rcepteur

Appli SOAP

Appli SOAP

processeur
SOAP

processeur
SOAP

Niveau
protocole de
transport
Hte 1

Hte 2

SOAP Scenarii (2)


Requte rponse,
requte avec
acquittement ou RPC
sur un protocole de
transport n'assurant
la corrlation

Nud SOAP
metteur
initial
Appli SOAP
A
Id
message
Niveau SOAP

processeur
SOAP

Corrlation de
messages
Nud SOAP
ultime
rcepteur

Nud SOAP
metteur
initial

Appli SOAP
B
Id
message

Appli SOAP
B
Id
message

processeur
SOAP

processeur
SOAP

Nud SOAP
ultime
rcepteur
Appli SOAP
A
Id
message
processeur
SOAP

Niveau protocole de
transport

Hte 1

Hte 2

Hte 2

Hte 1

SOAP Scenarii (3)


Requte rponse, requte avec
acquittement ou RPC via de
multiples intermdiaires

Nud SOAP
metteur
initial
Appli SOAP
A
routage

Niveau SOAP

processeur
SOAP

Nud SOAP
intermdiaire
Appli SOAP
B
routage

processeur
SOAP

Nud SOAP
ultime
rcepteur
Appli SOAP
A
routage
processeur
SOAP

Niveau protocole de
transport

Hte 1

Hte 2

Hte 3
Changement de
protocole possible

SOAP Scenarii (4)

Requtes avec cryptage du contenu ou de l'en-tte


Echange avec tierce partie
Conversation
Messages asynchrones
Multiples rponse asynchrones
Echange de donnes Non-XML
Notification d'vnements
Cache, cache avec expiration
Qualit de service
Echange avec analyse et traitement incrmental
Routage, tracking
Grilles
Et autres, en fonction de l'imagination des architectes

SOAP message
Un message SOAP valide est un document XML
au bon format. Le message doit avoir la forme
suivante:
Une dclaration XML (optionnelle)
Une Enveloppe SOAP (l'lment racine) qui
est compose de:
Une En-tte SOAP (optionnel : infos ncessaires
l'interprtation du message)
Un Corps SOAP (donnes du message)
Une section derreur SOAP

SOAP message

Rgles de syntaxe:
un message SOAP
un message SOAP
un message SOAP
un message SOAP
un message SOAP
l'enveloppe SOAP
un message SOAP
SOAP
un message SOAP
un message SOAP
Processing

MUST tre cod en XML


MUST avoir une enveloppe SOAP
CAN avoir un entte SOAP (header)
MUST avoir un corps SOAP (body)
MUST utiliser l'espace de dsignation de
MUST utiliser l'espace de dsignation d'encodage
MUST NOT contenir une rfrence une DTD
MUST NOT contenir des instruction de type XML

SOAP Exemple

<Envelope> est la racine


<Header>, <Body> et <Fault> sont les enfants

<?xml version="1.0" encoding="UTF-8" standalone="no" ?>

<soap:Envelope

xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"

soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding
/">
<soap:Header>
... Header information...
</soap:Header>
<soap:Body>
... Body information...
<soap:Fault>
...Fault information...
</soap:Fault>
</soap:Body>
</soap:Envelope>

SOAP Enveloppe
<SOAP-ENV:Envelope ... >le style d'encodage
de ce message SOAP suit le schma dfini dans
http://schemas.xmlsoap.org/soap/encoding
Contient les dfinitions de namespaces.
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/ 2001 /XMLSchema">
</SOAP-ENV:Envelope>

SOAP Entte (1)


Mcanisme pour tendre un message de faon
dcentralise et modulaire, sans connaissance
a priori des parties de la communication.
Typiquement authentification, transaction,
Rgles :
Identifi par un namespace et un nom local
Les enfants immdiats qualifis par le namespace.

SOAP Entte (2)


2 attributs particuliers utiliss pour indiquer
comment et par qui lentre est traite
mustUnderstand : Indiquer quune entre est
obligatoire
<SOAP-ENV:Header>
<t:Transaction xmlns:t="some-URI" SOAPENV:mustUnderstand="1">
5
</t:Transaction>
</SOAP-ENV:Header>

Actor : Indiquer qui peut utiliser l'entte ; par


dfaut : lultime
<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 Body
Mcanisme simple pour changer les
informations avec lultime receveur du
message.
Typiquement appels marshalling RPC calls et
des rapports derreur
Une entre du body est identifie par un
namesapce et un nom local
<SOAP-ENV:Body>
<ns1:doubleAnIntegerResponse
xmlns:ns1="urn:MesSoapServices"
SOAPENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<return xsi:type="xsd:int">30</return>
</ns1:doubleAnIntegerResponse>
</SOAP-ENV:Body>

SOAP section derreur


Utilise pour porter les erreurs ou les statuts derreur dun
message
Doit apparatre comme une entre du body
Ne doit pas apparatre plus dune fois
Sous lments :

faultcode
Identifier lerreur
faultstring
Explication de lerreur
<env:Body>
<env:Fault>
<faultcode><value>env:VersionMismatch</value>
</faultcode>
<faultstring>Version Mismatch</faultstring>
</env:Fault>
</env:Body>

SOAP encodage de graphes


Linformation est traite comme un graphe
constitu de nuds intermdiaires ou
terminaux et de liens entre ces nuds.
Il existe des rgles dencodage de ces graphes
Valeurs simples
XML schema Built-in datatypes et drivs
Ou SOAP-ENC pour des lments
indpendants dun type htrogne
Valeurs composites
Tableaux et structures

SOAP Types simples


<element name="age" type="int"/>
<element name="height" type="float"/>
<element name="displacement" type="negativeInteger"/>
<element name="color">
<simpleType base="xsd:string">
<enumeration value="Green"/>
<enumeration value="Blue"/>
</simpleType>
</element>

<age>45</age>
<height>5.9</height>
<displacement>-450</displacement>
<color>Blue</color>
<SOAP-ENC:int id="int1">45</SOAP-ENC:int>

SOAP Types composites (1)


<element name="Livre">
<complexType>
<element name="auteur" type="xsd:string"/>
<element name="preface" type="xsd:string"/>
<element name="intro" type="xsd:string"/>
</complexType>
</e:Livre>

<e:Livre>
<author>jean Bonneau</author>
<preface>Preface Soap INT</preface>
<intro>Introduction SOAP</intro>
</e:Livre>

SOAP Types composites (2)


<e:Livre>
<titre>SOAP INT</titre>
<auteur href="#Personne-1"/>
</e:Livre>
<e:Personne id="Personne-1">
<name>Jean Bonneau</name>
<addresse href="#Addresse-2"/>
</e:Personne>
<e:Addresse id="Addresse-2">
<email>mailto:jbonneau@hotmail.com</email>
<web>http://www.jbonneau.com</web>
</e:Addresse>

SOAP Types composites (3)


Structure du livre

<element name="Livre" type="tns:Livre"/>


<complexType name="Livre">
<sequence minOccurs="0" maxOccurs="1">
<element name="titre" type="xsd:string"/>
<element name="auteur" type="tns:Personne"/>
</sequence>
<attribute name="href" type="uriReference"/>
<attribute name="id" type="ID"/>
<anyAttribute namespace="##other"/>
</complexType>

SOAP Types composites (4)


Structure de Personne

<element name="Personne" base="tns:Personne"/>


<complexType name="Personne">
<sequence minOccurs="0" maxOccurs="1">
<element name="nom" type="xsd:string"/>
<element name="addresse" type="tns:Addresse"/>
</sequence>
<attribute name="href" type="uriReference"/>
<attribute name="id" type="ID"/>
<anyAttribute namespace="##other"/>
</complexType>

SOAP Types composites (5)


Structure de Adresse

<element name="Addresse" base="tns:Addresse"/>


<complexType name="Addresse">
<sequence minOccurs="0" maxOccurs="1">
<element name="rue" type="xsd:string"/>
<element name="ville" type="xsd:string"/>
<element name="pays" type="xsd:string"/>
</sequence>
<attribute name="href" type="uriReference"/>
<attribute name="id" type="ID"/>
<anyAttribute namespace="##other"/>
</complexType>

SOAP Array

Dfinis par le type "SOAP-ENC:Array"


ou driv
Reprsents comme des lments de
valeur sans contrainte sur le nom du
contenu
<element name="mesResultats"
type="SOAP-ENC:Array"/>
< mesResultats
SOAP-ENC:arrayType="xsd:int[2]">
<number>3</number>
<number>4</number>
</ mesResultats >

SOAP sur HTTP


Message SOAP dans le corps HTTP
En-tte HTTP 'soapAction'
POST http://www.w3edfRetD.fr http/1.1
Content-type:text/xml ; charset="utf-8"
SOAPAction: http://www.w3edfRetD.fr#service
<SOAP-ENV:Envelope
.
</SOAP-ENV:Enveloppe>

SOAP requte RPC


<soap:Envelope>
<soap:Body>
<xmlns:m="http://www.w3edfRetD.edu/stock"
/>
<m:GetStockPrice>
<m:StockName>IBM</m:StockName>
</m:GetStockPrice>
</soap:Body>
</soap:Envelope>

SOAP rponse RPC


<soap:Envelope>
<soap:Body>
<xmlns:m="http://www.w3edfRetD.edu/stock"
/>
<m:GetStockPriceResponse>
<m:Price>20.5</m:Price>
</m:GetStockPriceResponse>
</soap:Body>
</soap:Envelope>

SOAP Principes RPC (1)


Processus Client avec binding http
Package soap

Construction
de l'appel de
mthode

Retourne la
valeur

Srialise en
requte
SOAP-XML

Enveloppe la
requte
SOAP-XML
En requte
http

Dsrialise la
rponse
SOAP-XML

Extrait la
rponse
SOAP-XML

En rponse
de mthode

de la rponse
http

Serializer/des
erializer

Encoding/de
coding http

Requte
http
envoye au
serveur
SOAP

Rponse
http reue
du serveur
SOAP

SOAP Principes RPC (2)


Processus Serveur avec binding http
Package soap
Canal de
requte du
Requte http
servlet
du client
SOAP

envoie
requte
dcodeur
Invoque la
mthode

Retourne la
rponse http
au client
SOAP

envoie
rponse
dcodeur
Canal de
rponse du
servlet

Envoie la
rponse
Servlet
SOAP

Dcode la
requte http et
d-srialise la
requte SOAPXML
Opration
du Service
srialise la
rponse SOAPXML et encode
de la rponse
http
Encoding/de
coding http
et soap

SOAP Exemple (1)


Service de normalisation d'adresses
Capable de fournir une adresse postale normalise partir d'informations de localisation
Utilise des types de donnes complexes en entre et en sortie

NormAdresse getNorme( Local adresse_local)

Service NormalisationAdresse

Application

SOAP
XML

getNorme

wsdl
Interface

Public et
standard

Implantation

opration

Priv et
propritaire

SOAP Exemple (2) : Serveur-Dploiement


Le WSDL associ
<Definitions> Racine et namespace
<Types> Quels types de donnes dont changs
<Message> Quels messages sont transmis
<Port type>Quelles oprations sont supportes
<Binding> Comment les messages sont transmis sur la connexion
<service> O est situ le service

A voir plus tard en dtail

SOAP Exemple (3) : Serveur-Code


Classe DoNorme
Mthode getNorme : retourne une adresse
normalise
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-Code


Mapping des types
Serialiser la classe
// Build the call.
Local
Service service = new Service();
Call
call = (Call) service.createCall();
// Map the types.
QName qn1
= new QName( "urn:NormAdresse", "Local" );
call.registerTypeMapping(Local.class, qn1,
new org.apache.axis.encoding.ser.BeanSerializerFactory(Local.class, qn1),
new org.apache.axis.encoding.ser.BeanDeserializerFactory(Local.class, qn1));
QName qn2
= new QName( "urn:NormAdresse", "NormAdresse" );
call.registerTypeMapping(NormAdresse.class, qn2,
new org.apache.axis.encoding.ser.BeanSerializerFactory(NormAdresse.class,
qn2),
new org.apache.axis.encoding.ser.BeanDeserializerFactory(NormAdresse.class,
qn2));

SOAP Exemple (5) : Client-Code


Construire l'appel

Mthode

call.setTargetEndpointAddress( new java.net.URL(endpointURL) );


call.setOperationName( new QName("NormAdresseService", "getNorme") );
call.addParameter( "AdresseDuLocal", qn1, ParameterMode.IN );
call.setReturnType(qn2,NormAdresse.class); //Build the params

le_local.setloc_no_voie(" 9 BIS");
le_local.setloc_l_voie1("Chemin de la
le_local.setloc_l_voie2("BP 12");
le_local.setloc_c_postal(" 91430");
le_local.setloc_l_bd(" Igny");

Sablire

");

Object resp resp = call.invoke( new Object[] { le_local } );

On aurait pu
directement
construire le XML
dans un
SOAPBodyElement[]
et le passer au call

SOAP Exemple (6) : Client-Code

Exploiter le rsultat
//
if (resp instanceof java.rmi.RemoteException)
{
throw(java.rmi.RemoteException) resp;
}
else
try {
NormAdresse value = (NormAdresse)resp;
if ( value != null )
{
System.out.println("retour :");
System.out.println("code"+value.getAdr_c_postal());

}
} catch(java.lang.Exception e) { }

WSDL
Web Services Description Language
Vocabulaire XML, similaire dans le principe IDL

Il contient des informations oprationnelles concernant le service :


L'interface du service
Les dtails d'implantation
Les protocoles d'accs
Les points d'activation (contact endpoints)
WSDL : convergence de deux langages
IBM's NASSL
Microsoft's SDL

WSDL
<definitions> : Dfinition du service. Racine de tout WSDL. Elle peut
contenir les attributs prcisant le nom du service, et les espaces de
nommage. Il contient trois types dlments :
<message> et <portType> : Dfinissent les oprations offertes par
Le service. Un <message> correspond un paramtre dentre ou de sortie
dune <operation>. Un <portType> dfinit un ensemble doprations. Une
<operation> possde un nom et des paramtres d'E/S.
<binding> : Associe les <portType> un protocole particulier. Par exemple
SOAP.
<service> : Prcise les informations ncessaires l'invocation d'un service, en
particulier lURI du destinataire. Un <service> est une collection de <port> ;ie
dassociations de <binding> et d'URI.

Les types de donnes complexes peuvent tre prciss dans une balise
<types> place juste avant la balise <message>.
Chaque lment WSDL peut tre document grce une balise
<documentation>.

WSDL : exemple (1)


Lexemple suivant est la description du service Echo prcdemment dfini :
<wsdl:definitions
targetNamespace="http://cli20ir:9595/axis/services/NormAdresseService/axis/s
ervices/NormAdresseService" xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:apachesoap="http://xml.apache.org/xml-soap"
xmlns:impl="http://cli20ir:9595/axis/services/NormAdresseService/axis/services
/NormAdresseService-impl"
xmlns:intf="http://cli20ir:9595/axis/services/NormAdresseService/axis/services/
NormAdresseService"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:tns1="urn:NormAdresse"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/">

La premire
partie du
fichier
dfinit les
espaces de
nommage

WSDL : exemple(2)
<wsdl:types>
<schematargetNamespace="urn:NormAdresse"
xmlns="http://www.w3.org/2001/XMLSchema">
<complexTypename="Local">
<sequence>
<element name="loc_no"nillable="true"type="xsd:string"/>
<element name="cli_ic_orig"nillable="true"type="xsd:string"/>

</sequence>
</complexType>
<element name="Local"nillable="true"type="tns1:Local"/>
</schema>
</wsdl:types>
On trouve ensuite les
types particuliers
utiliss

WSDL : exemple (3)

Puis les
paramtres
dentre et de
sortie des
oprations du
service

<wsdl:message name="getNormeResponse">
<wsdl:part name="return"type="tns1:NormAdresse" />
</wsdl:message>
<wsdl:message name="getNormeRequest">
<wsdl:part name="adresse_local"type="tns1:Local"/>
</wsdl:message>
<wsdl:portTypename="DoNorme">
<wsdl:operationname="getNorme"parameterOrder="adresse_local">
<wsdl:input
message="intf:getNormeRequest"name="getNormeRequest" />
<wsdl:output
message="intf:getNormeResponse"name="getNormeResponse" />
</wsdl:operation>
La dfinition abstraite du service Web
</wsdl:portType>
</
est faite par dfinition du
portType, indpendante de tout
protocole de communication. Cest
linterface du service dfinissant les
mthodes exportes, et leurs
paramtres dentre et de sortie.

WSDL : exemple (4)


<wsdl:binding
name="NormAdresseServiceSoapBinding"type="intf:DoNorme">
<wsdlsoap:binding
style="rpc"transport="http://schemas.xmlsoap.org/soap/http" />
<wsdl:operationname="getNorme">
<wsdlsoap:operation soapAction="" />
<wsdl:input name="getNormeRequest">
<wsdlsoap:body
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"namespac
e="http://cli20ir:9595/axis/services/NormAdresseService/axis/services
/NormAdresseService"use="encoded" />
</wsdl:input>
<wsdl:outputname="getNormeResponse">
<wsdlsoap:body
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"namespac
e="http://cli20ir:9595/axis/services/NormAdresseService/axis/services
/NormAdresseService"use="encoded" />
</wsdl:output>
Ce service est associ un protocole existant, via un
</wsdl:operation>
binding . Il dfinit les paramtres dinvocation du service
</wsdl:binding>
spcifiques au protocole. Les paramtres ncessaires
lutilisation (lien vers les spcifications du transport
utilis, rgles dencodage pour les messages changs,
).

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 dfinition du service se termine par la dfinition de


plusieurs bindings, associs plusieurs URL, et ce en
utilisant la mme dfinition abstraite du service.

WSDL
WSDL cr automatiquement partir de Java
avec Java2WSDL
Utilisation
Construire un proxy pour une utilisation
directe partir du client ou d'un autre Service
avec WSDL2J
DoNorme 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

UDDI
Universal Description, Discovery and Integration
Une spcification pour la description et la dcouverte de WebServices

Les Businesses enregistrent des


informations publiques les
concernant
Les dveloppeurs, diteurs de
logiciels, organismes de
standardisation enregistrent des
types de services techniques
White pages (informations gnrales)
Yellow pages (catgories de services)
Green pages (business rules)

White
Pages
Yellow
Pages
Green
Pages

UDDI
Pages blanches : noms, adresses, contacts, identifiants, des entreprises
enregistres. Ces informations sont dcrites dans des entits de type Business
Entity. Cette description inclut des informations de catgorisation permettant de
faire des recherches spcifiques dpendant du mtier de lentreprise ;
Pages jaunes : dtails sur le mtier de lentreprise, les services quelle propose. Ces
informations sont dcrites dans des entits de type Business Service ;
Pages vertes : informations techniques sur les services proposs. Les pages vertes
incluent des rfrences vers les spcifications des services Web, et les dtails
ncessaires lutilisation de ces services. Ces informations sont dcrites dans deux
documents : un Binding Template, et un Technology Model (tModel).

UDDI
Document XML
Contact
Contact
Phone
Phone
Address
Address
Email
Email

businessEntity
businessKey
name
URL
description
contacts
businessServices
identifierBag
categoryBag

businessService
businessService
serviceKey
Key
tModelKey
Name
Name
Description
Description
BindingTemplates
BindingTemplates

keyedReference
keyedReference
tModelKey
keyName
keyValue

keyedReference
keyedReference
tModelKey
tModelKey
keyName
keyName
keyValue
keyValue

UDDI

businessEntity
RD991
EDF-RETD
www.edf-retd.fr
Architecture Services."
contacts
businessServices
identifierBag
categoryBag

businessService
businessService
34257GHF12
Key
Services support Archi
Name
Website where you can
Description
BindingTemplates
BindingTemplates
BindingTemplate
110293-32009
http://www.edf-retd.fr/sinetics
tModelInstanceDetails
tModelInstanceInfo

keyedReference
keyedReference
EE123
NAICS
007..

DFE-2B
DUNS
45231

1112C-2244-3AXA
http://www.edf-retd.fr/catalogArchi

tModelKeys

UDDI
Enregistrer et retrouver un Service avec
UDDI4J
2 parties dans WSDL : interface + implantation
Interface
<Definition>
<Types>
<Import>
<Message>
<Portype>
<binding>
</Definition>

Implantation
<Definition>
<Import>
<Service>
<Port>
</Service>
</Definition>

UDDI
Implantation
<import>
<service>
<port>
<port>

Interface
<types>
<messages>
<portType>
<Binding>

UDDI
BusinessEntity
BusinessService
BusinessTemplate
BusinessTemplate

tModel

Implantation

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>

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

UDDI

<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="uddiorg:types keyvalue="wsdlSpec"/>
</ categoryBag >
</tModel>

UDDI
Enregistrer sparment les descriptions des
Compagnies et les descriptions des services
Dveloppeurs, diteurs de logiciels, organismes
de standardisation enregistrent des types de
services
Les Compagnies enregistrent les services
qu'elles supportent

UDDI
UDDI4J simplifie l'interaction avec un
annuaire UDDI
Pour l'enregistrement et la dcouverte
Utilisation de l'objet UDDIProxy
UDDIProxy p = new UDDIProxy();
p. setInquiryURL( http:// );
p. setPublishURL( https:// );

UDDI
Inquiry API
Trouver

find_business
find_service
find_binding
find_tModel

Plus de dtails

get_businessDetail
get_serviceDetail
get_bindingDetail
get_tModelDetail

Publishers API
Enregistrer

save_business
save_service
save_binding
save_tModel

Dtruire

delete_business
delete_service
delete_binding
delete_tModel

Scurit
get_authToken
discard_authToken

UDDI
Enregistrement UDDI

Nud
annuaire
UDDI

Client
Requte
UDDI SOAP
Rponse
UDDI SOAP

UDDI4J

Serveur
HTTP

Serveur
SOAP

Annuaire
UDDI
WSDL4J

Nud WS
WSDL
WebService

Enregistrement
partir d'un fichier
wsdl

UDDI
Utilisation UDDI

Nud
annuaire
UDDI

Client
Requte
UDDI SOAP
Rponse
UDDI SOAP

UDDI4J

Serveur
HTTP

Serveur
SOAP

URI="http://"

Annuaire
UDDI

Communication
avec le WS

Nud WS
WSDL
WebService

UDDI : exemple (1)


Retrouver une BusinessEntity, un des services
qu'elle propose
Invoquer ce service
Retrouver la BusinessEntity
Vector names = new Vector();
names.add(new Name("EDF-RetD"));

Dans la pratique on
rechercherait plutt par
catgorie

BusinessList businessList = proxy.find_business(names, null, null,null,null,null,10);


Vector businessInfoVector = businessList.getBusinessInfos().getBusinessInfoVector();
BusinessInfo businessInfo = null;
.

Boucle dans businessInfoVector pour vrifier que c'est le bon


BusinessEntity
Vector serviceInfoVector = businessInfo.getServiceInfos().getServiceInfoVector();

Boucle dans serviceInfoVector pour retrouver le serviceInfo

UDDI : exemple (2)


Retrouver les dtails pour le service rfrenc par les diffrentes
cls
ServiceDetail serviceDetail = proxy.get_serviceDetail(serviceInfo.getServiceKey());
Vector businessServices = serviceDetail.getBusinessServiceVector();

Boucle dans businessServices pour retrouver le Service


BusinessService businessService = null;
for (int i = 0; i < businessServices.size(); i++) {

On peut aussi faire


un find_service

businessService = (BusinessService)businessServices.elementAt(i);
if (serviceName.equals(businessService.getDefaultNameString())) {}

Maintenant,il faut retrouver l'Overview URL du tModel :


Grce au businessServices, retrouver le bindingTemplates puis le
point d'accs bas sur http
Vector bindingTemplateVector =
businessService.getBindingTemplates().getBindingTemplateVector();
AccessPoint accessPoint = null;
BindingTemplate bindingTemplate = null;

UDDI : exemple (3)


Boucle dans bindingTemplateVector pour retrouver le
bindingTemplate corrrespondant
if (accessPoint.getURLType().equals("http"))

Il faut enfin retrouver le tModel associ


Vector tmodelInstanceInfoVector =
bindingTemplate.getTModelInstanceDetails().getTModelInstanceInfoVector();
String wsdlImplURI = null;

Boucle dans tmodelInstanceInfoVector pour retrouver


l'OverviewURL corrrespondant
TModelInstanceInfo instanceInfo =
(TModelInstanceInfo)tmodelInstanceInfoVector.elementAt(i);
InstanceDetails details = instanceInfo.getInstanceDetails();
OverviewDoc wsdlImpl = details.getOverviewDoc();
wsdlImplURI = wsdlImpl.getOverviewURLString();

UDDI : exemple (4) avec WSDL

Il est alors possible d'invoquer


dynamiquement le service en utilisation l'api
WSDL4J
Il faut en particulier analyser le WSDL et extraire
Le target namespace
Le nom du service
Le nom du port le nom de l'opration ainsi que ces
paramtres

UDDI
En pratique les cls de classification et d'identification
devraient tre gres et fournies par des agences
mondiales
Les informations du niveau "yellow pages" de UDDI sont
typiquement fondes sur deux standards :
NAICS (the North American Industry Classification System)
projet des gouvernements du Canada, du Mexique et des US.

http:// www.naics.com
UNSPSC (the Universal Standard Products and Services
Classification).
Efforts conjoints de Dun & Bradstreet et du programme de
dveloppement des nations unies pour une unification des
classifications

http://www.unspsc.org

UDDI
Application directe
La recherche du document WSDL associ au
service est facilite par une rfrence spcifique
de nom "uddi-org:types" et de valeur "wsdlSpec"
Lors de l'enregistrement cette cl est dfinie de la
manire suivante :
KeyedReference kr = new KeyedReference("uddi-org:types","wsdlSpec","");

UDDI
Type d'annuaire utile pour la dcouverte de
BusinessEntity ou de BusinessService
Identification et catgorisation
Encore peu implant
Ncessit d'un modrateur
Mise en uvre relativement complexe
On lui prfre une approche plus pragmatique
WSIL
Fournit une liste simple des services
disponibles

WSIL

WebService Inspection Language


Une mthode de dcouverte de services dcentralise
Considre que l'on connat dj le fournisseur de
services, donc pas de notion de businessEntity
WSIL reprsente une entit spcifique, ses services, ses
contacts et est fourni directement par celui qui le
reprsente
Un fichier WSIL rfrences tous les documents qui
dcrivent les services de l'entreprise, y compris UDDI

WSIL
WSDL

UDDI

XML
HTML

WSIL : exemple
<?xml version="1.0" encoding="UTF-8"?>
<inspection xmlns="http://schemas.xmlsoap.org/ws/2001/10/inspection/">
<abstract>The EDF-RetD W Service Search API</abstract>
<service>
<abstract>NormAdresse Search</abstract>
<description
referencedNamespace="http://schemas.xmlsoap.org/wsdl/"
location="http://www.edf-RetD.fr/NormAdresse.wsdl"/>
<description
referencedNamespace ="http://www.w3c.org/html/"
location ="http://www. edf-RetD.fr /
1999/NormAdresse_Deployment.html" />
<description
referencedNamespace ="http://www.uddi.org/"
location ="http://www. edf-RetD.fr /soapuddi/" />
</service>
</inspection>

Une fois le fichier cr, on peut le placer sous


http://www.EDF-RetD.fr/WS/inspection.wsil

Web Services et l'existant


Une nouvelle technologie pour le middleware
Curiosit, mfiance

Vraiment diffrent de J2EE ou


CORBA ?
Que gagne-t-on ?
Que perd-on ?
Comment grer la transition ?

Description des services

Spcification CORBA
Langage de description des interfaces (OMG IDL)
+ rgles de projection vers des langages de
programmation
Langage de description des implantations : OMG
CIDL + rgles de gnration de guides
dimplantation.
Structure des messages changs dduite de la
description des interfaces (explicite en WSDL).
Choix du protocole dchange et de lencodage des
messages li lORB (explicite en WSDL).
Localisation des services dtermine au dploiement
(explicite en WSDL).

Orientation service de WSDL

Description : Coexistence

Spcification en cours lOMG

RFP CORBA to WSDL/SOAP interworking


Rponse commune de Cape Clear, Fujitsu, HP, IONA,
Sankhya avec le support dIBM

J2EE 1.4 conteneur de service


Serveur d'applications
Wsdl :portType,
transport et
encoding binding

Port (reprsentation du web service)

Wsdl:portadress
Service endpoint
interface
Wsdl :portType

Wsdl :service
Usine stubs

Service interface

Service instance

Ejb ou JAX-RPC web


component
Cycle de vie de la
responsabilit su
serveur d'applications

Localisation
Spcification CORBA
Rfrence CORBA chane de caractre ou URL
Annuaire de services (Naming Service)
Registre d'interfaces et d'implantation(Interface and
Implementation Repository)
Courtier (Trading Service)
client

J2EE : JNDI

serveur
courtier
2 - export
1 - import
ORB
3 - interaction

Passerelle vers des rpertoires dentreprises


Et JNDI SPI vers Corba
Rpertoire centralis des objets J2EE
Fabrique dobjets Home
Variables et ressources partages

Localisation : WebService
UDDI
Universal Description, Discovery and Integration
Le rfrentiel UDDI vu comme un annuaire
pages blanches (informations de contact)
pages jaunes (classification par catgories)
pages vertes (informations techniques sur le service)

WSIL
WebService Inspection Language
Une mthode de dcouverte de services dcentralise

Dcouverte de service

Localisation
Annuaire et dcouverte de service commun aux
WebServices et aux architectures CORBA, J2EE
Qualit de service pas dans UDDI mais peut
tre associe ebXML

Communication

Corba

Webservices

IDL

WSDL

Corba Services

UDDI - WSIL

Corba Stubs/Skeleton

Soap messages

CDR Binary Encoding

XML unicode Encoding

GIOP/IIOP , ESIOP

HTTP,FTP,SMTP

TCP/IP

TCP/IP

Communication
CORBA - IIOP
Invocation d'opration ou One-way
Relocalisation,
Multiplexage client-serveur
Abandon de requte
SOAP
one way
Reconstruction de protocole
Multiples intermdiaires
Attachements SOAP permettent de vhiculer
des contenus MIME avec un message SOAP

Coexistence : CORBA - WS
Exposer des composants CORBA sous forme de Web Services
Web Services vus comme des composants CORBA
Adaptation des environnements CORBA.

Rfrentiel
UDDI

Client
SOAP

/HTTP
P
A
O
S

Description
WSDL

Serveur
SOAP

Client
CORBA

Conteneur dapplications Web


Serveur Web

Systmes CORBA

Coexistence : J2EE - WS
J2EE 1.4
API pour SOAP, WSDL, UDDI
SOAP Messaging
JAXM, SAAJ, JAX-RPC, JMS

WSDL
Java API for WSDL
JAX-RPC

UDDI
JAXR

Coexistence : J2EE - WS

SOAP/HTTP et
autres bindings

Conteneur de
servlet

Conteneur Ejb

Port
servlet

Port
jsp

Noyau J2EE
HTTP/SSL

RMI/IIOP

RMI/IIOP

ejb
Noyau J2EE

Coexistence : J2EE - WS
Paquetage pour dploiement
Pour Web Component : fichier WAR
Pour stateless session bean : fichier EJB JAR
Descripteur de dploiement : webservices.xml
Diffrents de celui associ l'implantation du
service : web.xml ou ejb-jar.xml
Dploiement
Gnration des classes d'aide : servlet, stub,
proxy, pour le client (placement du service
implementation accessible par JNDI)
Gnration, mise jour et publication du WSDL

Coexistence : J2EE - WS
Dveloppement sur J2EE
WSDL de/vers Web service Endpoint Interface
(java)
Endpoint Interface spcifie dans JAX-RPC
Utile pour servlet-based et EJB-based
endpoint
Pour le cas EJB dclaration dans le
descripteur de dploiement du endpoint
Implantation en classe Java (servlet) ou
Stateless session bean
Cration de descripteur de dploiement
webservices.xml

Conclusion

WS : De nombreuses caractritiques en commun avec


les environnements rpartis J2EE, CORBA, Net.

Rinventer la roue ?
Principales diffrences
Positionnement ?
WS : middleware de middleware
fonctionnement en mode dconnect (connexions
transitoires et temporaires)
pas de connaissance a-priori des parties qui entrent en
communication (accs aux informations sur le service)

Atouts

Intgrer au niveau service


Contrat mtier
Contrat technique
Orchestration
Intermdiation

Gagner en abstraction

Produits
HP WS de HP
eSpeak, HP-AS, HP-WS

E2A de IONA
E2A WS Interoperation, Application Server

Cape de CapeClear
CapeConnect, CapeStudio

.Net de Microsoft
.Net environment, .Net framework, .Net Visual Studio

Sun One Net de Sun


iPlanet, Sun One Studio

WebSphere de IBM
WebSphere, WebSphere Studio

WebLogic de BEA
WebLogic Server, Integration, Portal, Studio

Oracle 9i de Oracle
Oracle 9iAS

Des outils existent

Perspectives
Perspectives
Maturit WS : encore du travail
Gestion de la scurit (Microsoft, IBM, Verisign : WSSecurity) et des transactions (Microsoft, IBM, BEA :
WS-Transaction).
Dfinition de modles dinteraction (chorgraphie) et
de collaboration (processus mtiers, recherche de
partenaires).
Primtre WS : des interrogations
Persistance, gestion de l'tat,

Maturit et primtre

WebServices : le futur ! (1)


SOAP Recommandations W3C , version 1.2
Points voir
La gestion des sessions
L'asynchronisme

Des protocoles au dessus de SOAP


Pour des smantiques d'changes
particulires
SOAP : one way
Bass sur la dfinition de patrons d'changes

WebServices : le futur ! (2)


WSDL Recommandations W3C , version 1.2
On trouve encore plusieurs styles de
gnration de WSDL ce qui complique
l'interoprabilit
UDDI Recommandations UDDI.org, version 3.0
Trouver la vitesse de croisire
IBM,
Le dmarrage est difficile
MicroSoft,HP,
Oracle, SAP,
Mise en uvre assez complexe
Pas de modrateur
WSIL version 1.0 une solution intressante

WebServices : le futur ! (3)


Stabilisation des autres niveaux de la pile de
protocole pour les WebServices
En particulier l'orchestration ou encore la
chorgraphie des services
drouler des processus plus complexes que lappel
doprations atomiques, avec plusieurs acteurs. Couvert
par la spcification BPEL4WS

Notion d'intermdiaire entre acteurs de


diffrentes compagnies

Quelques URLs
Standards
http://xml.apache.org/axis. Apache-Axis
http://www.w3.org/2000/xp SOAP
http://www.w3.org/XML/Schema XML-schema
http://www.w3.org/TR/wsdl WSDL
http://www.uddi.org/UDDI
Ressources
http://www-106.ibm.com/developerworks/webservices/
http://www-106.ibm.com/developerworks/webservices/wsdk/
http://www.webservices.org/
http://www.javaworld.com/javaworld/jw-05-2002/jw-0517-webservices.html
http://www.themindelectric.com/
Sites de WS
http://www.xmethods.net/
http://hosting.msugs.ch/
http://java.sun.com/webservices/

Alors ?
WebServices ?
Philippe.Bedu@edf.fr

Vous aimerez peut-être aussi