Sie sind auf Seite 1von 49

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

Das könnte Ihnen auch gefallen