Cours SOAP 2014 - LORIA · web APIs Re-distribution allowed with author’s consent. 19 From...

49
Olivier Perrin, Université de Lorraine LicencePro, 2014 SOAP Concepts Application à Glassfish LicencePro 2014 Olivier Perrin Université de Lorraine

Transcript of Cours SOAP 2014 - LORIA · web APIs Re-distribution allowed with author’s consent. 19 From...

Page 1: Cours SOAP 2014 - LORIA · web APIs Re-distribution allowed with author’s consent. 19 From server-side app to smart clients and services HTML5 & JS Engine Client DOM Controllers

Olivier Perrin, Université de Lorraine LicencePro, 2014

SOAP   Concepts   Application à Glassfish

   LicencePro 2014

   Olivier Perrin   Université de Lorraine

Page 2: Cours SOAP 2014 - LORIA · web APIs Re-distribution allowed with author’s consent. 19 From server-side app to smart clients and services HTML5 & JS Engine Client DOM Controllers

Olivier Perrin, Université de Lorraine LicencePro, 2014

Évolution2

Re-distribution allowed with author’s consent.

15

From server-side app to smart clients and services

Browser-based

HTML Rendering

(progressive enhancement)

HTML HTTP

ApplicationServer

ViewGeneration Controllers

Client

Server

Browser

Service Layer

Channels Repositories RDBMSCRUD

Page 3: Cours SOAP 2014 - LORIA · web APIs Re-distribution allowed with author’s consent. 19 From server-side app to smart clients and services HTML5 & JS Engine Client DOM Controllers

Olivier Perrin, Université de Lorraine LicencePro, 2014

Évolution3

Re-distribution allowed with author’s consent.16

From server-side app to smart clients and services

Client

ServerRDBMSCRUD

HTML5 & JS Engine

ControllersDOM

Client-side model

Service Layer

Channels Repositories

web stg

HTTP &WebSockets

events &notificationsJSON

Browser app orembedded in native

Page 4: Cours SOAP 2014 - LORIA · web APIs Re-distribution allowed with author’s consent. 19 From server-side app to smart clients and services HTML5 & JS Engine Client DOM Controllers

Olivier Perrin, Université de Lorraine LicencePro, 2014

Évolution4

Re-distribution allowed with author’s consent.17

From server-side app to smart clients and services

Client

RDBMSCRUD

HTML5 & JS Engine

ControllersDOM

Client-side model

Service Layer

Channels Repositories

web stg

HTTP &WebSockets

events &notificationsJSON

Service Service Service

Browser app orembedded in native

Server

business / domain services

Page 5: Cours SOAP 2014 - LORIA · web APIs Re-distribution allowed with author’s consent. 19 From server-side app to smart clients and services HTML5 & JS Engine Client DOM Controllers

Olivier Perrin, Université de Lorraine LicencePro, 2014

Évolution5

Re-distribution allowed with author’s consent.18

From server-side app to smart clients and services

Client

RDBMSCRUD

HTML5 & JS Engine

ControllersDOM

Client-side model

Channels Repositories

web stg

HTTP &WebSockets

events &notificationsJSON

Service Service Servicebusiness / domain services

Browser app orembedded in native

Server

Page 6: Cours SOAP 2014 - LORIA · web APIs Re-distribution allowed with author’s consent. 19 From server-side app to smart clients and services HTML5 & JS Engine Client DOM Controllers

Olivier Perrin, Université de Lorraine LicencePro, 2014

Évolution6

platform services,web APIs

Re-distribution allowed with author’s consent.19

From server-side app to smart clients and services

ClientHTML5 & JS Engine

ControllersDOM

Client-side model web stg

HTTP &WebSockets

events &notificationsJSON

Service Service Servicebusiness / domain services

Browser app orembedded in native

Service Service Service

SQL NoSQL otherPaaS

Page 7: Cours SOAP 2014 - LORIA · web APIs Re-distribution allowed with author’s consent. 19 From server-side app to smart clients and services HTML5 & JS Engine Client DOM Controllers

Olivier Perrin, Université de Lorraine LicencePro, 2014

Les services Web doivent permettre de construire une plateforme distribuée pour le Web

Mais, ce n’est pas nouveau !‣ CORBA

‣ RMI

‣ .NET

Les services Web7

Page 8: Cours SOAP 2014 - LORIA · web APIs Re-distribution allowed with author’s consent. 19 From server-side app to smart clients and services HTML5 & JS Engine Client DOM Controllers

Olivier Perrin, Université de Lorraine LicencePro, 2014

Objectifs‣ interopérabilité

‣ adoption rapide, ubiquité

‣ liaison dynamique à l’échelle d’Internet (SOA)

‣ support d’environnements ouverts (Web) et plus restreints (entreprise)

Besoins‣ standards

‣ infrastructure raisonnable

‣ intégration «simple» des applications

‣ orientation messages et documents vs API

Besoins8

Page 9: Cours SOAP 2014 - LORIA · web APIs Re-distribution allowed with author’s consent. 19 From server-side app to smart clients and services HTML5 & JS Engine Client DOM Controllers

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 tête (« 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

9

Page 10: Cours SOAP 2014 - LORIA · web APIs Re-distribution allowed with author’s consent. 19 From server-side app to smart clients and services HTML5 & JS Engine Client DOM Controllers

Olivier Perrin, Université de Lorraine LicencePro, 2014

Mécanisme des langages impératifsDéfini par une interface qui spécifie:

‣ le type des résultats retournés

‣ le nom de l’opération

‣ les paramètres de l’opération

‣ ex: string traduire (string msg, integer langue)

Niveau d’abstraction pour cacher la communication au programmeurLangage de définition d’interface commun et indépendant du langage de programmation

Appel de procédure10

Page 11: Cours SOAP 2014 - LORIA · web APIs Re-distribution allowed with author’s consent. 19 From server-side app to smart clients and services HTML5 & JS Engine Client DOM Controllers

Olivier Perrin, Université de Lorraine LicencePro, 2014

Il sont décrits grâce à des fichiers‣ WSDL (Web Service Definition Language)

stockés dans un répertoire/annuaire‣ UDDI (Universal Description, Discovery, and Integration)

et ils communiquent grâce au protocole‣ SOAP (plus d’acronyme)

Services Web11

Page 12: Cours SOAP 2014 - LORIA · web APIs Re-distribution allowed with author’s consent. 19 From server-side app to smart clients and services HTML5 & JS Engine Client DOM Controllers

Olivier Perrin, Université de Lorraine LicencePro, 2014

WS stack [Colan2002 - IBM]12

WSBPEL, WSCI, BPML Procédés

Qualitéde

service

Fiabilité des messages Sécurité

Transactions

Coordination

WSDL, UDDI, WS-Inspection Description

HTTP, SMTP, Jabber,… Transport

MessagesSOAP

XML, encodage

Autresprotocoles

Page 13: Cours SOAP 2014 - LORIA · web APIs Re-distribution allowed with author’s consent. 19 From server-side app to smart clients and services HTML5 & JS Engine Client DOM Controllers

Olivier Perrin, Université de Lorraine LicencePro, 2014

SOAP: historique

Simple Object Access Protocol 1.0‣ pas d’objet‣ plutôt Services-Oriented Architecture Protocol

‣ à partir de 1.2, plus d’acronyme‣ spécifique pour COM et HTTP

SOAP 1.1‣ n’importe quel transport binding (pas limité à HTTP)‣ n’importe quel langage (Java)‣ n’importe quel encodage de données (plug-in)‣ indépendant des vendeurs

SOAP 1.2

13

Page 14: Cours SOAP 2014 - LORIA · web APIs Re-distribution allowed with author’s consent. 19 From server-side app to smart clients and services HTML5 & JS Engine Client DOM Controllers

Olivier Perrin, Université de Lorraine LicencePro, 2014

SOAP: introduction

C’est un protocole pour échanger des informations structurées dans un environnement décentralisé/distribuéIl utilise les technologies XML pour définir un cadre extensible d’échange de messagesIl est indépendant d’un modèle particulier de programmation

En gros, c’est un protocole pour échanger des informations en envoyant des messages

14

Page 15: Cours SOAP 2014 - LORIA · web APIs Re-distribution allowed with author’s consent. 19 From server-side app to smart clients and services HTML5 & JS Engine Client DOM Controllers

Olivier Perrin, Université de Lorraine LicencePro, 2014

SOAP: introduction (cont.)

L’encodage des messages est en XML‣ utilisation de XML Schema

‣ utilisation intensive des Namespaces

Un objectif majeur: l’interopérabilité & les firewallsSOAP est plus simple à implanter qu’un équivalent en DCOM ou CORBADeux utilisations possibles de SOAP

‣ RPC: appel de procédures distantes

‣ Message: échange de documents XML: EDI (messages)

15

Page 16: Cours SOAP 2014 - LORIA · web APIs Re-distribution allowed with author’s consent. 19 From server-side app to smart clients and services HTML5 & JS Engine Client DOM Controllers

Olivier Perrin, Université de Lorraine LicencePro, 2014

SOAP: introduction (cont.)

Message: document style‣ on envoie un message qui contient les données, et uniquement les

données (pas de méthode)

‣ le serveur sait traiter les données et répond avec un message

‣ et ainsi de suite…

‣ c’est du transfert d’informations

RPC: RPC style‣ on envoie les paramètres et les types de retour, et la méthode à

invoquer

‣ SOAP est utilisé comme un système XML-RPC

‣ il traverse mieux les firewalls que RMI par exemple

16

Page 17: Cours SOAP 2014 - LORIA · web APIs Re-distribution allowed with author’s consent. 19 From server-side app to smart clients and services HTML5 & JS Engine Client DOM Controllers

Olivier Perrin, Université de Lorraine LicencePro, 2014

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)

‣ SMTPles messages peuvent être soit le texte du mail, soit un attachement

‣ Jabber

17

Page 18: Cours SOAP 2014 - LORIA · web APIs Re-distribution allowed with author’s consent. 19 From server-side app to smart clients and services HTML5 & JS Engine Client DOM Controllers

Olivier Perrin, Université de Lorraine LicencePro, 2014

Concepts de base

Un message SOAP est un document XML qui contient les éléments suivants:

18

Enveloppe SOAP

Header SOAP

Bloc Header

Bloc Header

Body SOAP

Bloc Body

Bloc Body

-

-

-

Page 19: Cours SOAP 2014 - LORIA · web APIs Re-distribution allowed with author’s consent. 19 From server-side app to smart clients and services HTML5 & JS Engine Client DOM Controllers

Olivier Perrin, Université de Lorraine LicencePro, 2014

‣ un élément enveloppe (obligatoire) qui identifie le document XML comme étant un message SOAP

qui définit le début et la fin du message

‣ un élément header (optionnel) qui contient des attributs du message

point intermédiaire ou final

‣ un élément body (obligatoire)qui contient toutes les informations de l’appel et de la réponse

données XML

‣ un élément fault (optionnel) qui fournit les informations à propos des erreurs survenues lors du traitement du message

Concepts de base (cont.)19

Page 20: Cours SOAP 2014 - LORIA · web APIs Re-distribution allowed with author’s consent. 19 From server-side app to smart clients and services HTML5 & JS Engine Client DOM Controllers

Olivier Perrin, Université de Lorraine LicencePro, 2014

Tous les éléments sont déclarés dans l’espace de nommage pou l’enveloppe SOAP

‣ http://www.w3.org/2003/5/soap-envelope

et les encodages et données dans‣ http://www.w3.org/2003/5/soap-encoding

Concepts de base (cont.)20

Page 21: Cours SOAP 2014 - LORIA · web APIs Re-distribution allowed with author’s consent. 19 From server-side app to smart clients and services HTML5 & JS Engine Client DOM Controllers

Olivier Perrin, Université de Lorraine LicencePro, 2014

Voyage

Exemple de message21

Enveloppe SOAPHeader SOAP

Body SOAP

Bloc Header: réservation

Bloc Header: passager

Bloc sous-élément:itinéraire

Bloc sous-élément: hôtel

Page 22: Cours SOAP 2014 - LORIA · web APIs Re-distribution allowed with author’s consent. 19 From server-side app to smart clients and services HTML5 & JS Engine Client DOM Controllers

Olivier Perrin, Université de Lorraine LicencePro, 2014

Le message en entier est contenu dans l’élément Envelope

L’enveloppe ne contient qu’un seul élément Body qui est obligatoireL’élément Body peut contenir autant de nœuds enfants que nécessaireLe contenu de l’élément Body forme le messageSi une enveloppe contient un élément Header (un seul, optionnel), ce doit être le premier fils de l’élément Envelope

SOAP: Envelope22

Page 23: Cours SOAP 2014 - LORIA · web APIs Re-distribution allowed with author’s consent. 19 From server-side app to smart clients and services HTML5 & JS Engine Client DOM Controllers

Olivier Perrin, Université de Lorraine LicencePro, 2014

Les contenus du Header et du Body dépendent de l’applicationencodingStyle permet d’indiquer comment les données vont être sérialisées/désérialisées

SOAP: Envelope (cont.)23

Page 24: Cours SOAP 2014 - LORIA · web APIs Re-distribution allowed with author’s consent. 19 From server-side app to smart clients and services HTML5 & JS Engine Client DOM Controllers

Olivier Perrin, Université de Lorraine LicencePro, 2014

Chaque élément du Header est appelé un bloc‣ contient généralement des informations pour traiter le message

‣ les informations peuvent être destinées à des intermédiairesl’attribut role

next: le bloc doit être traité par l’intermédiaire suivantnone: pas de traitement du blocultimateReceiver: le bloc doit être traité par le dernier receveur du messagechaque intermédiaire (application réceptrice) doit vérifier qu’il peut jouer un rôle. Si c’est le cas, il supprime le bloc, sinon, il le passe au suivant

l’attribut mustUnderstand spécifie que l’application doit comprendre ce que le bloc signifie (sinon, erreur)

SOAP: Header24

Page 25: Cours SOAP 2014 - LORIA · web APIs Re-distribution allowed with author’s consent. 19 From server-side app to smart clients and services HTML5 & JS Engine Client DOM Controllers

Olivier Perrin, Université de Lorraine LicencePro, 2014

<?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: Header (cont.)25

Page 26: Cours SOAP 2014 - LORIA · web APIs Re-distribution allowed with author’s consent. 19 From server-side app to smart clients and services HTML5 & JS Engine Client DOM Controllers

Olivier Perrin, Université de Lorraine LicencePro, 2014

Le Body est supposé être traité par le dernier service récepteurHypothèse implicite: le récepteur comprend le messageLa spécification ne dit rien sur les éléments du Body d’un message

SOAP: Body26

Page 27: Cours SOAP 2014 - LORIA · web APIs Re-distribution allowed with author’s consent. 19 From server-side app to smart clients and services HTML5 & JS Engine Client DOM Controllers

Olivier Perrin, Université de Lorraine LicencePro, 2014

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

SOAP: Body (cont.)27

Page 28: Cours SOAP 2014 - LORIA · web APIs Re-distribution allowed with author’s consent. 19 From server-side app to smart clients and services HTML5 & JS Engine Client DOM Controllers

Olivier Perrin, Université de Lorraine LicencePro, 2014

Toutes les erreurs doivent apparaître dans un élément Fault unique dans le Body

Il contient les sous-éléments suivants‣ Code: le code permettant d’identifier

‣ Reason: explication de l’erreur

‣ Node: l’élément à l’origine de la faute

‣ Role: qui est à l’origine de la faute

‣ Detail: information spécifique sur l’erreur pour l’application

SOAP: Fault28

Page 29: Cours SOAP 2014 - LORIA · web APIs Re-distribution allowed with author’s consent. 19 From server-side app to smart clients and services HTML5 & JS Engine Client DOM Controllers

Olivier Perrin, Université de Lorraine LicencePro, 2014

Le schéma soap-envelope définit:‣ VersionMismatch

‣ MustUnderstand

‣ DataEncodingUnknown

‣ Sender

‣ Receiver

SOAP: Fault (cont.)29

Page 30: Cours SOAP 2014 - LORIA · web APIs Re-distribution allowed with author’s consent. 19 From server-side app to smart clients and services HTML5 & JS Engine Client DOM Controllers

Olivier Perrin, Université de Lorraine LicencePro, 2014

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

SOAP: Fault (cont.)30

Page 31: Cours SOAP 2014 - LORIA · web APIs Re-distribution allowed with author’s consent. 19 From server-side app to smart clients and services HTML5 & JS Engine Client DOM Controllers

Olivier Perrin, Université de Lorraine LicencePro, 2014

La spécification SOAP fournit une méthode pour sérialiser les donnéesPour envoyer du XML, on l’envoie tel quelUne valeur représente soit une donnée unique, soit une compositionUn accesseur représente un élément qui donne accès à la valeur

‣ <nom>Toto</nom>

‣ nom est l’accesseur, Toto la valeur

SOAP: sérialisation31

Page 32: Cours SOAP 2014 - LORIA · web APIs Re-distribution allowed with author’s consent. 19 From server-side app to smart clients and services HTML5 & JS Engine Client DOM Controllers

Olivier Perrin, Université de Lorraine LicencePro, 2014

32

SOAP apporte ‣ la possibilité d’orchestrer plusieurs services Web

‣ la possibilité d'accéder à un service Web possédant une API

‣ la possibilité d’ajouter des méta-données dans le headercela permet de traiter le message d’une certaine façon, ou de ne pas le traiter (rôle next ou ultimateReceiver)

‣ le fait de ne pas être restreint à des échanges de messages basés sur les documents ou RPC

‣ le fait de simplifier la sérialisation de documents XML complexes

SOAP: avec ou sans SOAP ?

Page 33: Cours SOAP 2014 - LORIA · web APIs Re-distribution allowed with author’s consent. 19 From server-side app to smart clients and services HTML5 & JS Engine Client DOM Controllers

Olivier Perrin, Université de Lorraine LicencePro, 2014

33

SOAP n’est pas limité à à des échanges basés sur des documentsOn peut utiliser un modèle de RPC avec appels basés sur XMLExemple:

‣ reservationService.gere(paiementReservation)

‣ reservationService.reserve(Reservation res,! ! ! ! CarteCredit cc)

SOAP: avec SOAP, message ou RPC ?

Page 34: Cours SOAP 2014 - LORIA · web APIs Re-distribution allowed with author’s consent. 19 From server-side app to smart clients and services HTML5 & JS Engine Client DOM Controllers

Olivier Perrin, Université de Lorraine LicencePro, 2014

SOAP: application à Glassfish

Page 35: Cours SOAP 2014 - LORIA · web APIs Re-distribution allowed with author’s consent. 19 From server-side app to smart clients and services HTML5 & JS Engine Client DOM Controllers

Olivier Perrin, Université de Lorraine LicencePro, 2014

metro: architecture35

Tooling - NetBeans IDE

Security Reliability Transactions MetadataWSDLMEX

PolicySOAP based messaging

Message encoding (XML, FI)

HTTP TCP SMTP

Page 36: Cours SOAP 2014 - LORIA · web APIs Re-distribution allowed with author’s consent. 19 From server-side app to smart clients and services HTML5 & JS Engine Client DOM Controllers

Olivier Perrin, Université de Lorraine LicencePro, 2014

metro: JAX-WS

JAX-WS 2.2: API Web services simple à utiliser ‣ support de Web Services Addressing 1.0

POJO + annotations ‣ programmation facilitée

Indépendance vis-à-vis de encodage, protocole, transportIntégration de JAXB (Java Architecture for XML Binding)

‣ API Java

‣ support100% de XML Schema

Transmission de messages optimisée‣ MTOM/XOP (W3C), FastInfoset (ITU-T/ISO)

36

Page 37: Cours SOAP 2014 - LORIA · web APIs Re-distribution allowed with author’s consent. 19 From server-side app to smart clients and services HTML5 & JS Engine Client DOM Controllers

Olivier Perrin, Université de Lorraine LicencePro, 2014

metro: gestion des attachements

BLOB en XML est coûteuxEnvoi d’un BLOB comme un attachement SOAPMéthode par défaut

‣ utilisation de byte[]‣ besoin de mémoire (tas)

Méthode plus appropriée: utilisation d’un “Data Handler”‣ plus besoin que l’objet réside en mémoire‣ le chargement peut être différé‣ méthodes facilitant la gestion:

InputStream getContent()String getContentType()Object getInputStream()

37

JVM

byte[]

011011101…

JVM

byte[]

011011…

Fichiertemp

Data handlerFichier

Page 38: Cours SOAP 2014 - LORIA · web APIs Re-distribution allowed with author’s consent. 19 From server-side app to smart clients and services HTML5 & JS Engine Client DOM Controllers

Olivier Perrin, Université de Lorraine LicencePro, 2014

38

Étapes‣ Installation de Glassfish (4.0)

‣ Installation de Metro (2.2)

‣ Écrire un service Web

‣ Déploiement du service

‣ Écrire un client

SOAP: un exemple

Page 39: Cours SOAP 2014 - LORIA · web APIs Re-distribution allowed with author’s consent. 19 From server-side app to smart clients and services HTML5 & JS Engine Client DOM Controllers

Olivier Perrin, Université de Lorraine LicencePro, 2014

39

Simple !

package licencepro;

public class HelloWS { @WebMethod(operationName = "afficheHello") public String afficheHello(@WebParam(name = "nom") String nom) { return "Hello " + nom; }}

Écrire un service Web

import javax.jws.WebMethod;import javax.jws.WebParam;import javax.jws.WebService;

@WebService

Page 40: Cours SOAP 2014 - LORIA · web APIs Re-distribution allowed with author’s consent. 19 From server-side app to smart clients and services HTML5 & JS Engine Client DOM Controllers

Olivier Perrin, Université de Lorraine LicencePro, 2014

40

Se fait grâce aux fichiers‣ web.xml

Déploiement

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

Page 41: Cours SOAP 2014 - LORIA · web APIs Re-distribution allowed with author’s consent. 19 From server-side app to smart clients and services HTML5 & JS Engine Client DOM Controllers

Olivier Perrin, Université de Lorraine LicencePro, 2014

Déploiement (cont.)41

‣ sun-jaxws.xml

Compilation et déploiement en utilisant le fichier build.xml fourni

‣ ant server

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

Page 42: Cours SOAP 2014 - LORIA · web APIs Re-distribution allowed with author’s consent. 19 From server-side app to smart clients and services HTML5 & JS Engine Client DOM Controllers

Olivier Perrin, Université de Lorraine LicencePro, 2014

42

Le client

Compilation‣ ant 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); } } }

Page 43: Cours SOAP 2014 - LORIA · web APIs Re-distribution allowed with author’s consent. 19 From server-side app to smart clients and services HTML5 & JS Engine Client DOM Controllers

Olivier Perrin, Université de Lorraine LicencePro, 2014

43

Dans /build/classesjava licencepro.helloclient.HelloClient Toto

Exécution

Page 44: Cours SOAP 2014 - LORIA · web APIs Re-distribution allowed with author’s consent. 19 From server-side app to smart clients and services HTML5 & JS Engine Client DOM Controllers

Olivier Perrin, Université de Lorraine LicencePro, 2014

SOAP Monitor

Pour voir ce qui se passe !‣ le message SOAP de la requête

‣ le message SOAP de la réponse

Comment ?‣ télécharger l’archive sur le site du cours (wsmonitor.zip)

‣ dans le répertoire bin/, lancez wsmonitor.sh (ou wsmonitor.bat)

‣ modifier le code du client pour:passer par le port 4040

utiliser le monitor comme intermédiaire entre le client et le service

forwarder la requête au endpoint

44

Page 45: Cours SOAP 2014 - LORIA · web APIs Re-distribution allowed with author’s consent. 19 From server-side app to smart clients and services HTML5 & JS Engine Client DOM Controllers

Olivier Perrin, Université de Lorraine LicencePro, 2014

SOAP Monitor (cont.)45

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); } } }

Page 46: Cours SOAP 2014 - LORIA · web APIs Re-distribution allowed with author’s consent. 19 From server-side app to smart clients and services HTML5 & JS Engine Client DOM Controllers

Olivier Perrin, Université de Lorraine LicencePro, 2014

SOAP Monitor (cont.)46

Page 47: Cours SOAP 2014 - LORIA · web APIs Re-distribution allowed with author’s consent. 19 From server-side app to smart clients and services HTML5 & JS Engine Client DOM Controllers

Olivier Perrin, Université de Lorraine LicencePro, 2014

Un message SOAP doit être encodé en XMLUn message SOAP doit utiliser le namespace Envelope de la spécificationUn message SOAP doit utiliser le namespace Encoding de la spécificationUn message SOAP ne doit pas contenir de DTDUn message SOAP contient:

‣ un élément Envelope (obligatoire)‣ un élément Header (optionnel)‣ un élément Body (obligatoire)‣ un élément Fault (optionnel)

Synthèse SOAP 47

Page 48: Cours SOAP 2014 - LORIA · web APIs Re-distribution allowed with author’s consent. 19 From server-side app to smart clients and services HTML5 & JS Engine Client DOM Controllers

Olivier Perrin, Université de Lorraine LicencePro, 2014

Problèmes‣ SOAP est devenu plus un protocole de bas niveau pour implanter

les files de messages plutôt qu’un protocole d’accès à un servicepas de fiabilité

pas de sécurité

pas de transactions

‣ SOAP et les types de données complexes (images, documents,…)attachements (comme avec SMTP), mais MIME n’est pas la panacée

WS-Attachements

‣ pas toujours très simple !

Une alternative: REST

Synthèse SOAP (cont.)48

résolus avec WSIT/Tango !

résolus avec metro !

Page 49: Cours SOAP 2014 - LORIA · web APIs Re-distribution allowed with author’s consent. 19 From server-side app to smart clients and services HTML5 & JS Engine Client DOM Controllers

Olivier Perrin, Université de Lorraine LicencePro, 2014

49

HelloCalculatriceTraductionMusixtore WS

SOAP: exercices