SOAP
Concepts
Application Glassfish
LicencePro 2014
Olivier Perrin
Universit de Lorraine
Olivier Perrin, Universit de Lorraine LicencePro, 2014
2
volution
From server-side app to smart clients and services
Browser Client
Browser-based
HTML Rendering
(progressive enhancement)
HTML HTTP
View Application
Controllers Server
Generation
Service Layer
Channels Repositories RDBMS
Server
CRUD
Olivier Perrin, Universit de Lorraine LicencePro, 2014
Re-distribution allowed with authors consent.
15
3
volution
From server-side app to smart clients and services
HTML5 & JS Engine Browser app or Client
embedded in native
DOM Controllers
Client-side model web stg
events & HTTP &
JSON notifications WebSockets
Service Layer
Channels Repositories RDBMS
Server
CRUD
Olivier Perrin, Universit de Lorraine LicencePro, 2014
Re-distribution allowed with authors consent.
16
4
volution
From server-side app to smart clients and services
HTML5 & JS Engine Browser app or Client
embedded in native
DOM Controllers
Client-side model web stg
events & HTTP &
JSON notifications WebSockets
Service Service Service
business /
domain services
Service Layer
Channels Repositories RDBMS
Server
CRUD
Olivier Perrin, Universit de Lorraine LicencePro, 2014
Re-distribution allowed with authors consent.
17
5
volution
From server-side app to smart clients and services
HTML5 & JS Engine Browser app or Client
embedded in native
DOM Controllers
Client-side model web stg
events & HTTP &
JSON notifications WebSockets
business /
Service Service Service domain services
Channels Repositories RDBMS
Server
CRUD
Olivier Perrin, Universit de Lorraine LicencePro, 2014
Re-distribution allowed with authors consent.
18
6
volution
From server-side app to smart clients and services
HTML5 & JS Engine Browser app or Client
embedded in native
DOM Controllers
Client-side model web stg
events & HTTP &
JSON notifications WebSockets
business /
Service Service Service domain services
Service Service Service platform services,
web APIs
PaaS
SQL NoSQL other
Olivier Perrin, Universit de Lorraine LicencePro, 2014
Re-distribution allowed with authors consent.
19
7
Les services Web
Les services Web doivent permettre de construire une
plateforme distribue pour le Web
Mais, ce nest pas nouveau !
CORBA
RMI
.NET
Olivier Perrin, Universit de Lorraine LicencePro, 2014
8
Besoins
Objectifs
interoprabilit
adoption rapide, ubiquit
liaison dynamique lchelle dInternet (SOA)
support denvironnements ouverts (Web) et plus restreints
(entreprise)
Besoins
standards
infrastructure raisonnable
intgration simple des applications
orientation messages et documents vs API
Olivier Perrin, Universit de Lorraine LicencePro, 2014
9
Micro-services
Couplage faible
Composables
Chaque service fait une seule chose, mais la fait bien
Suffisamment petit pour tenir dans une tte ( If a class is
bigger than my head then it is too big )
Suffisamment petit pour tre remplac ( Rewrite over
Maintain , un service qui meurt doit le faire vite et fort)
Multiples versions de services
Olivier Perrin, Universit de Lorraine LicencePro, 2014
10
Appel de procdure
Mcanisme des langages impratifs
Dfini par une interface qui spcifie:
le type des rsultats retourns
le nom de lopration
les paramtres de lopration
ex: string traduire (string msg, integer langue)
Niveau dabstraction pour cacher la communication au
programmeur
Langage de dfinition dinterface commun et indpendant
du langage de programmation
Olivier Perrin, Universit de Lorraine LicencePro, 2014
11
Services Web
Il sont dcrits grce des fichiers
WSDL (Web Service Definition Language)
stocks dans un rpertoire/annuaire
UDDI (Universal Description, Discovery, and Integration)
et ils communiquent grce au protocole
SOAP (plus dacronyme)
Olivier Perrin, Universit de Lorraine LicencePro, 2014
12
WS stack [Colan2002 - IBM]
WSBPEL, WSCI, BPML Procds
Transactions Qualit
Fiabilit des
Scurit de
messages
Coordination service
WSDL, UDDI, WS-Inspection Description
SOAP
Autres
Messages
protocoles
XML, encodage
HTTP, SMTP, Jabber, Transport
Olivier Perrin, Universit de Lorraine LicencePro, 2014
13
SOAP: historique
Simple Object Access Protocol 1.0
pas dobjet
plutt Services-Oriented Architecture Protocol
partir de 1.2, plus dacronyme
spcifique pour COM et HTTP
SOAP 1.1
nimporte quel transport binding (pas limit HTTP)
nimporte quel langage (Java)
nimporte quel encodage de donnes (plug-in)
indpendant des vendeurs
SOAP 1.2
Olivier Perrin, Universit de Lorraine LicencePro, 2014
14
SOAP: introduction
Cest un protocole pour changer des informations
structures dans un environnement dcentralis/distribu
Il utilise les technologies XML pour dfinir un cadre
extensible dchange de messages
Il est indpendant dun modle particulier de
programmation
En gros, cest un protocole pour changer des informations
en envoyant des messages
Olivier Perrin, Universit de Lorraine LicencePro, 2014
15
SOAP: introduction (cont.)
Lencodage des messages est en XML
utilisation de XML Schema
utilisation intensive des Namespaces
Un objectif majeur: linteroprabilit & les firewalls
SOAP est plus simple implanter quun quivalent en
DCOM ou CORBA
Deux utilisations possibles de SOAP
RPC: appel de procdures distantes
Message: change de documents XML: EDI (messages)
Olivier Perrin, Universit de Lorraine LicencePro, 2014
16
SOAP: introduction (cont.)
Message: document style
on envoie un message qui contient les donnes, et uniquement les
donnes (pas de mthode)
le serveur sait traiter les donnes et rpond avec un message
et ainsi de suite
cest du transfert dinformations
RPC: RPC style
on envoie les paramtres et les types de retour, et la mthode
invoquer
SOAP est utilis comme un systme XML-RPC
il traverse mieux les firewalls que RMI par exemple
Olivier Perrin, Universit de Lorraine LicencePro, 2014
17
SOAP: introduction (cont.)
Plusieurs bindings pour transporter un message
HTTP: le plus courant
traverse bien les firewalls sur le port 80 (contrairement RMI par exemple)
SMTP
les messages peuvent tre soit le texte du mail, soit un attachement
Jabber
Olivier Perrin, Universit de Lorraine LicencePro, 2014
18
Concepts de base
Un message SOAP est un document XML qui contient les
lments suivants:
Enveloppe SOAP
Header SOAP
Bloc Header
Bloc Header
Body SOAP
Bloc Body
-
-
-
Bloc Body
Olivier Perrin, Universit de Lorraine LicencePro, 2014
19
Concepts de base (cont.)
un lment enveloppe (obligatoire)
qui identifie le document XML comme tant un message SOAP
qui dfinit le dbut et la fin du message
un lment header (optionnel)
qui contient des attributs du message
point intermdiaire ou final
un lment body (obligatoire)
qui contient toutes les informations de lappel et de la rponse
donnes XML
un lment fault (optionnel)
qui fournit les informations propos des erreurs survenues lors du traitement du
message
Olivier Perrin, Universit de Lorraine LicencePro, 2014
20
Concepts de base (cont.)
Tous les lments sont dclars dans lespace de nommage
pou lenveloppe SOAP
http://www.w3.org/2003/5/soap-envelope
et les encodages et donnes dans
http://www.w3.org/2003/5/soap-encoding
Olivier Perrin, Universit de Lorraine LicencePro, 2014
21
Exemple de message
Voyage
Enveloppe SOAP
Header SOAP
Bloc Header: rservation
Bloc Header: passager
Body SOAP
Bloc sous-lment:
itinraire
Bloc sous-lment:
htel
Olivier Perrin, Universit de Lorraine LicencePro, 2014
22
SOAP: Envelope
Le message en entier est contenu dans llment Envelope
Lenveloppe ne contient quun seul lment Body qui est
obligatoire
Llment Body peut contenir autant de nuds enfants que
ncessaire
Le contenu de llment Body forme le message
Si une enveloppe contient un lment Header (un seul,
optionnel), ce doit tre le premier fils de llment
Envelope
Olivier Perrin, Universit de Lorraine LicencePro, 2014
23
SOAP: Envelope (cont.)
Les contenus du Header et du Body dpendent de
lapplication
encodingStyle permet dindiquer comment les donnes vont
tre srialises/dsrialises
Olivier Perrin, Universit de Lorraine LicencePro, 2014
24
SOAP: Header
Chaque lment du Header est appel un bloc
contient gnralement des informations pour traiter le message
les informations peuvent tre destines des intermdiaires
lattribut role
next: le bloc doit tre trait par lintermdiaire suivant
none: pas de traitement du bloc
ultimateReceiver: le bloc doit tre trait par le dernier receveur du message
chaque intermdiaire (application rceptrice) doit vrifier quil peut jouer un
rle. Si cest le cas, il supprime le bloc, sinon, il le passe au suivant
lattribut mustUnderstand spcifie que lapplication doit comprendre ce que le
bloc signifie (sinon, erreur)
Olivier Perrin, Universit de Lorraine LicencePro, 2014
25
SOAP: Header (cont.)
<?xml version="1.0"?>
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"
env:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
<env:Header>
<m:reservation xmlns:m="http://example.org/reservation"
env:role="http://www.w3.org/2003/05/soap-envelope/role/next"
env:mustUnderstand="true">
<m:reference>uuid:093a2da1-q345-739r-ba5d-pqff98fe8j7d</reference>
<m:dateAndTime>2012-09-29T13:20:00.000-05:00</m:dateAndTime>
</m:reservation>
<n:passenger xmlns:n="http://mycompany.example.com/employees"
env:role="http://www.w3.org/2003/05/soap-envelope/role/next"
env:mustUnderstand="true">
<n:name>John Q. Public</n:name>
</n:passenger>
</env:Header>
...
</env:Envelope>
Olivier Perrin, Universit de Lorraine LicencePro, 2014
26
SOAP: Body
Le Body est suppos tre trait par le dernier service
rcepteur
Hypothse implicite: le rcepteur comprend le message
La spcification ne dit rien sur les lments du Body dun
message
Olivier Perrin, Universit de Lorraine LicencePro, 2014
27
SOAP: Body (cont.)
<env:Body>
<p:itinerary xmlns:p="http://example.org/reservation/travel">
<p:departure>
<p:departing>New York</p:departing>
<p:arriving>Los Angeles</p:arriving>
<p:departureDate>2012-09-14</p:departureDate>
<p:departureTime>late afternoon</p:departureTime>
<p:seatPreference>aisle</p:seatPreference>
</p:departure>
<p:return>
<p:departing>Los Angeles</p:departing>
<p:arriving>New York</p:arriving>
<p:departureDate>2012-09-20</p:departureDate>
<p:departureTime>mid morning</p:departureTime>
<p:seatPreference/>
</p:return>
</p:itinerary>
<q:lodging xmlns:q="http://example.org/reservation/hotels">
<q:preference>none</q:preference>
</q:lodging>
</env:Body>
Olivier Perrin, Universit de Lorraine LicencePro, 2014
28
SOAP: Fault
Toutes les erreurs doivent apparatre dans un lment Fault
unique dans le Body
Il contient les sous-lments suivants
Code: le code permettant didentifier
Reason: explication de lerreur
Node: llment lorigine de la faute
Role: qui est lorigine de la faute
Detail: information spcifique sur lerreur pour lapplication
Olivier Perrin, Universit de Lorraine LicencePro, 2014
29
SOAP: Fault (cont.)
Le schma soap-envelope dfinit:
VersionMismatch
MustUnderstand
DataEncodingUnknown
Sender
Receiver
Olivier Perrin, Universit de Lorraine LicencePro, 2014
30
SOAP: Fault (cont.)
<?xml version="1.0" ?>
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"
xmlns:rpc="http://www.w3.org/2003/05/soap-rpc">
<env:Body>
<env:Fault>
<env:Code>
<env:Value>env:Sender</env:Value>
<env:Subcode>
<env:Value>rpc:BadArguments</env:Value>
</env:Subcode>
</env:Code>
<env:Reason>
<env:Text xml:lang="en-US">Processing error</env:Text>
</env:Reason>
<env:Detail>
<e:myFaultDetails
xmlns:e="http://travelcompany.example.org/faults">
<e:message>Name does not match card number</e:message>
<e:errorcode>999</e:errorcode>
</e:myFaultDetails>
</env:Detail>
</env:Fault>
</env:Body>
</env:Envelope>
Olivier Perrin, Universit de Lorraine LicencePro, 2014
31
SOAP: srialisation
La spcification SOAP fournit une mthode pour srialiser
les donnes
Pour envoyer du XML, on lenvoie tel quel
Une valeur reprsente soit une donne unique, soit une
composition
Un accesseur reprsente un lment qui donne accs la
valeur
<nom>Toto</nom>
nom est laccesseur, Toto la valeur
Olivier Perrin, Universit de Lorraine LicencePro, 2014
32
SOAP: avec ou sans SOAP ?
SOAP apporte
la possibilit dorchestrer plusieurs services Web
la possibilit d'accder un service Web possdant une API
la possibilit dajouter des mta-donnes dans le header
cela permet de traiter le message dune certaine faon, ou de ne pas le traiter
(rle next ou ultimateReceiver)
le fait de ne pas tre restreint des changes de messages bass sur
les documents ou RPC
le fait de simplifier la srialisation de documents XML complexes
Olivier Perrin, Universit de Lorraine LicencePro, 2014
33
SOAP: avec SOAP, message ou RPC ?
SOAP nest pas limit des changes bass sur des
documents
On peut utiliser un modle de RPC avec appels bass sur
XML
Exemple:
reservationService.gere(paiementReservation)
reservationService.reserve(Reservation res,
! ! ! ! CarteCredit cc)
Olivier Perrin, Universit de Lorraine LicencePro, 2014
SOAP: application Glassfish
Olivier Perrin, Universit de Lorraine LicencePro, 2014
35
metro: architecture
Tooling - NetBeans IDE
Security Reliability Transactions Metadata
WSDL
MEX
Policy
SOAP based messaging
Message encoding (XML, FI)
HTTP TCP SMTP
Olivier Perrin, Universit de Lorraine LicencePro, 2014
36
metro: JAX-WS
JAX-WS 2.2: API Web services simple utiliser
support de Web Services Addressing 1.0
POJO + annotations
programmation facilite
Indpendance vis--vis de encodage, protocole, transport
Intgration de JAXB (Java Architecture for XML Binding)
API Java
support100% de XML Schema
Transmission de messages optimise
MTOM/XOP (W3C), FastInfoset (ITU-T/ISO)
Olivier Perrin, Universit de Lorraine LicencePro, 2014
37
metro: gestion des attachements
BLOB en XML est coteux
Envoi dun BLOB comme un attachement SOAP
Mthode par dfaut JVM
011011101
utilisation de byte[]
besoin de mmoire (tas) byte[]
Mthode plus approprie: utilisation dun Data Handler
plus besoin que lobjet rside en mmoire
JVM
le chargement peut tre diffr 011011 Data handler
Fichier
mthodes facilitant la gestion:
byte[]
InputStream getContent()
String getContentType() Fichier
temp
Object getInputStream()
Olivier Perrin, Universit de Lorraine LicencePro, 2014
38
SOAP: un exemple
tapes
Installation de Glassfish (4.0)
Installation de Metro (2.2)
crire un service Web
Dploiement du service
crire un client
Olivier Perrin, Universit de Lorraine LicencePro, 2014
39
crire un service Web
Simple !
package licencepro;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
@WebService
public class HelloWS {
@WebMethod(operationName = "afficheHello")
public String afficheHello(@WebParam(name = "nom") String nom) {
return "Hello " + nom;
}
}
Olivier Perrin, Universit de Lorraine LicencePro, 2014
40
Dploiement
Se fait grce aux fichiers
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" ...>
<description>licencepro</description>
<display-name>Hello</display-name>
<listener>
<listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener
</listener-class>
</listener>
<servlet>
<servlet-name>licencepro</servlet-name>
<servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>licencepro</servlet-name>
<url-pattern>/helloservice</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>60</session-timeout>
</session-config>
</web-app>
Olivier Perrin, Universit de Lorraine LicencePro, 2014
41
Dploiement (cont.)
sun-jaxws.xml
<?xml version="1.0" encoding="UTF-8"?>
<endpoints xmlns='http://java.sun.com/xml/ns/jax-ws/ri/runtime'
! ! version='2.0'>
<endpoint
name='licencepro'
implementation='licencepro.HelloService'
url-pattern='/helloservice'/>
</endpoints>
Compilation et dploiement en utilisant le fichier build.xml
fourni
ant server
Olivier Perrin, Universit de Lorraine LicencePro, 2014
42
Le client
package licencepro.helloclient;
public class HelloClient {
public static void main(String[] args) {
try {
!! HelloService port =
! ! ! ! new HelloServiceService().getHelloServicePort();
String resAppelService = port.afficheHello(args[0]);
System.out.println("Le resultat est: "+ resAppelService);
} catch (Exception ex) {
System.out.println ("Exception: " + ex);
}
}
}
Compilation
ant client
Olivier Perrin, Universit de Lorraine LicencePro, 2014
43
Excution
Dans /build/classes
java licencepro.helloclient.HelloClient Toto
Olivier Perrin, Universit de Lorraine LicencePro, 2014
44
SOAP Monitor
Pour voir ce qui se passe !
le message SOAP de la requte
le message SOAP de la rponse
Comment ?
tlcharger larchive sur le site du cours (wsmonitor.zip)
dans le rpertoire bin/, lancez wsmonitor.sh (ou wsmonitor.bat)
modifier le code du client pour:
passer par le port 4040
utiliser le monitor comme intermdiaire entre le client et le service
forwarder la requte au endpoint
Olivier Perrin, Universit de Lorraine LicencePro, 2014
45
SOAP Monitor (cont.)
package licencepro.helloclient;
import javax.xml.ws.BindingProvider;
public class HelloClient {
public static void main(String[] args) {
try {
HelloService port =
! ! new HelloServiceService().getHelloServicePort();
// Modification du port: 4040 au lieu de 8080
BindingProvider bp = (BindingProvider) port;
String addresse =
! ! ! (String)bp.getRequestContext().
! ! ! ! get(BindingProvider.ENDPOINT_ADDRESS_PROPERTY);
addresse = addresse.replaceFirst("8080", "4040");
bp.getRequestContext().put(
! ! ! BindingProvider.ENDPOINT_ADDRESS_PROPERTY, addresse);
String resAppelService = port.afficheHello(args[0]);
System.out.println("Le resultat est: "+ resAppelService);
} catch (Exception ex) {
System.out.println ("Exception: " + ex);
}
}
}
Olivier Perrin, Universit de Lorraine LicencePro, 2014
46
SOAP Monitor (cont.)
Olivier Perrin, Universit de Lorraine LicencePro, 2014
47
Synthse SOAP
Un message SOAP doit tre encod en XML
Un message SOAP doit utiliser le namespace Envelope de
la spcification
Un message SOAP doit utiliser le namespace Encoding de
la spcification
Un message SOAP ne doit pas contenir de DTD
Un message SOAP contient:
un lment Envelope (obligatoire)
un lment Header (optionnel)
un lment Body (obligatoire)
un lment Fault (optionnel)
Olivier Perrin, Universit de Lorraine LicencePro, 2014
48
Synthse SOAP (cont.)
Problmes
SOAP est devenu plus un protocole de bas niveau pour implanter
les files de messages plutt quun protocole daccs un service
pas de fiabilit
pas de scurit rsolus avec WSIT/Tango !
pas de transactions
SOAP et les types de donnes complexes (images, documents,)
attachements (comme avec SMTP), mais MIME nest pas la panace
WS-Attachements rsolus avec metro !
pas toujours trs simple !
Une alternative: REST
Olivier Perrin, Universit de Lorraine LicencePro, 2014
49
SOAP: exercices
Hello
Calculatrice
Traduction
Musixtore WS
Olivier Perrin, Universit de Lorraine LicencePro, 2014