You are on page 1of 49

SOAP

Concepts
Application Glassfish
LicencePro 2014
Olivier Perrin
Universit de Lorraine

Olivier Perrin, Universit de Lorraine LicencePro, 2014

From server-side app to smart clients and services


volution

Client

Browser
Browser-based
HTML Rendering
(progressive enhancement)

HTTP

HTML
View
Generation

Controllers

Application
Server

Service Layer
Channels

Repositories

RDBMS
CRUD

Server

Olivier Perrin, Universit de Lorraine LicencePro, 2014


Re-distribution allowed with authors consent.

15

From server-side app to smart clients and services


volution
HTML5 & JS Engine
DOM

Browser app or
embedded in native

Controllers

Client-side model

JSON

Client

web stg

events &
HTTP &
notifications WebSockets

Service Layer
Channels

Repositories

RDBMS
CRUD

Server

Olivier Perrin, Universit de Lorraine LicencePro, 2014


Re-distribution allowed with authors consent.

16

From server-side app to smart clients and services


volution
Browser app or
embedded in native

HTML5 & JS Engine


DOM

Controllers

Client-side model

JSON
Service

web stg

events &
HTTP &
notifications WebSockets
Service

Service

Service Layer
Channels

Client

business /
domain services

Repositories

RDBMS
CRUD

Server

Olivier Perrin, Universit de Lorraine LicencePro, 2014

Re-distribution allowed with authors consent.

17

From server-side app to smart clients and services


volution
Browser app or
embedded in native

HTML5 & JS Engine


DOM

Controllers

Client-side model

JSON

Service

Channels

Client

web stg

events &
HTTP &
notifications WebSockets

Service

Service

business /
domain services

Repositories

RDBMS
CRUD

Server

Olivier Perrin, Universit de Lorraine LicencePro, 2014


Re-distribution allowed with authors consent.

18

From server-side app to smart clients and services


volution
Browser app or
embedded in native

HTML5 & JS Engine


DOM

Controllers

Client-side model

JSON

Service
Service
SQL

Client

web stg

events &
HTTP &
notifications WebSockets

Service
Service
NoSQL

Service

business /
domain services

Service
other

platform services,
web APIs

PaaS

Olivier Perrin, Universit de Lorraine LicencePro, 2014


Re-distribution allowed with authors consent.

19

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

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

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

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

10

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

11

12

WS stack [Colan2002 - IBM]


WSBPEL, WSCI, BPML

Procds
Transactions

Fiabilit des
messages

Scurit
Coordination
WSDL, UDDI, WS-Inspection
SOAP

XML, encodage

Qualit
de
service
Description

Autres
protocoles

HTTP, SMTP, Jabber,


Olivier Perrin, Universit de Lorraine LicencePro, 2014

Messages

Transport

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

13

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

14

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

15

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

16

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

17

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

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

19

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

20

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

21

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

22

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

23

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

24

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

25

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

26

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

27

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

SOAP: Fault (cont.)


Le schma soap-envelope dfinit:

VersionMismatch

MustUnderstand

DataEncodingUnknown

Sender

Receiver

Olivier Perrin, Universit de Lorraine LicencePro, 2014

29

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

30

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

31

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

32

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

33

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
Olivier Perrin, Universit de Lorraine LicencePro, 2014

SMTP

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

36

37

metro: gestion des attachements


BLOB en XML est coteux
Envoi dun BLOB comme un attachement SOAP
JVM
Mthode par dfaut
011011101

utilisation de byte[]

besoin de mmoire (tas)

byte[]

Mthode plus approprie: utilisation dun Data Handler

plus besoin que lobjet rside en mmoire

le chargement peut tre diffr

mthodes facilitant la gestion:

011011

JVM
Data handler
byte[]

InputStream getContent()
String getContentType()
Object getInputStream()
Olivier Perrin, Universit de Lorraine LicencePro, 2014

Fichier

Fichier
temp

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

38

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

39

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

40

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

41

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

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

44

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

45

SOAP Monitor (cont.)

Olivier Perrin, Universit de Lorraine LicencePro, 2014

46

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

47

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

SOAP: exercices
Hello
Calculatrice
Traduction
Musixtore WS

Olivier Perrin, Universit de Lorraine LicencePro, 2014

49

You might also like