Soap PDF
Soap PDF
Concepts
Application Glassfish
LicencePro 2014
Olivier Perrin
Universit de Lorraine
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
volution
From server-side app to smart clients and services
Service Layer
volution
From server-side app to smart clients and services
volution
From server-side app to smart clients and services
business /
Service Service Service domain services
volution
From server-side app to smart clients and services
business /
Service Service Service domain services
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
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)
Services Web
Il sont dcrits grce des fichiers
WSDL (Web Service Definition Language)
Transactions Qualit
Fiabilit des
Scurit de
messages
Coordination service
SOAP
Autres
Messages
protocoles
XML, encodage
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
SMTP
les messages peuvent tre soit le texte du mail, soit un attachement
Jabber
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
Exemple de message
Voyage
Enveloppe SOAP
Header SOAP
Bloc Header: rservation
Body SOAP
Bloc sous-lment:
itinraire
Bloc sous-lment:
htel
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
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)
<?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>
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
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
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
metro: architecture
metro: JAX-WS
JAX-WS 2.2: API Web services simple utiliser
support de Web Services Addressing 1.0
POJO + annotations
programmation facilite
SOAP: un exemple
tapes
Installation de Glassfish (4.0)
Installation de Metro (2.2)
crire un service Web
Dploiement du service
crire un client
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;
}
}
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>
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>
Le client
package licencepro.helloclient;
Compilation
ant client
Excution
Dans /build/classes
java licencepro.helloclient.HelloClient Toto
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
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
SOAP: exercices
Hello
Calculatrice
Traduction
Musixtore WS