Service - e

Transcription

Service - e
Architecture orientée service
Introduction
Définition des services Web


Un service Web est
−
Une interface
−
Qui décrit une collection d'opérations
−
Accessibles par réseau
−
Au travers de messages
−
Standardisés par XML
Famille des architectures distribuées
Architecture distribuée
orientée message/opération
Avantages

Réutilisation

Indépendance
−
Plate-forme

−
Implémentation

−
UNIX, Windows, ...
C#, Java, VB, ...
Architecture

Axis, Java EE, .NET, ...
Intention


Ce qu'a fait le Web pour les utilisateurs, les
services Web le font pour les applications
Nouvel horizon pour les entreprises
−
Réduction du coût des applications
−
Déploiement plus rapide
−
Développement plus facile
Pourquoi





Pour fournir un service au public ou à des
entreprises
Les utilisateurs peuvent utiliser différents
langages (C#, Java, etc.)
Les utilisateurs peuvent utiliser différents
systèmes d'exploitation (Linux, Windows, etc.)
Les utilisateurs appellent les services via
Internet
Le service peut passer au travers des pare-feux
Types d'application



B2C
−
Business To Consumer
−
Applications pour les consommateurs
B2B
−
Business To Business
−
Applications pour les entreprises
A2A
−
Applications intra-entreprise
−
Intégration d'applications
Standards

Protocole HTTP

Extensible Markup Language (XML)

Simple Object Access Protocol (SOAP)

Web Services Description Language (WSDL)

Universal Description Discovery and Integration
(UDDI)
Accessibilité
Serveur
Serveur Web : http://www.serveur.fr
Service
Service Web : /Service
Opération A
http://www.serveur.fr/Service
Internet
Opération B
Système de noms

Espace de noms (namespace)
−
Équivalent à un paquetage Java
−
Doit être unique
−
Exemple


Nom local (local name)
−

http://www.serveur.fr/unnom/Service
Ici Service est un nom local
Nom qualifié (Qname)
−
Toute l'URL : http://www.serveur.fr/unnom/Service
Mots clefs

Message et opération

Protocole

Binding

URI ou endpoint

Interface

Service

Ressource
Interfaces et bindings
Concepts



L'intégration des services Web se fait à un
haut niveau dans la pile protocolaire
Les services Web sont basés sur les
messages
−
Plus centrés sur une sémantique de service
−
Moins centrés sur des sémantiques de protocole
réseaux
Intégration souple des fonctions métier
Modèle

Le modèle est basé sur l'interaction de trois
rôles :
−
Le fournisseur de services (Service provider)
−
L'annuaire des services (Service registry)
−
Le consommateur de services (Service requestor)
Modèle de comportement

Le modèle est basé sur trois opérations :
−
Publication (Publish)
−
Recherche (Find)
−
Consommation (Bind)
Rôle, opération et objet
service
Registry
Find
Service
Description
Publish
WSDL, UDDI
WSDL, UDDI
Service
Service
Requestor
Bind
Service
Provider
Service
Description
Rôles en détail


Service provider
−
Le propriétaire du service
−
Plate-forme qui héberge l'accès au service
Service requestor
−
Le demandeur de fonctions, le client
−
Application qui recherche et invoque une interaction
avec un service
−
Un navigateur, une application
Rôles en détail

Service registry
−
L'annuaire de description des services
−
Lieu de publication des fournisseurs de services
−
Lieu de recherche et de découverte des services
pour les Service requestors
−
Rôle optionnel
Protocoles sans annuaire


Un fournisseur de services peut envoyer
directement la description d'un service à un
client (Service requestor)
Un client peut obtenir la description d'un
service par :
−
Un fichier local, un site FTP, un site Web
−
Advertisement and Discovery of Services (ADS)
−
Discovery of Web Services (DISCO)
Opérations en détail

Publier (Publish)
−
Pour être accessible un service Web doit être
publié.
−
Ainsi un client peut le trouver
−
Le lieu de publication est variable
Opérations en détail

Trouver (Find)
−
Directement
−
Auprès d'un annuaire
−
Deux phases du cycle de vie
Lors de la conception et du développement

Lors de l'exécution (runtime)

−
−
Pour le binding description
Pour la location description
Opérations en détail

Connecter (Bind)
−
Localiser, contacter et invoquer un service
−
Lors de l'exécution
Objets d'un service Web

Service
−
C'est une interface
−
Décrit par un Service Description
−
Son implémentation est le service lui-même
−
Déployé et accessible via le réseau
−
Existe pour interagir avec ou être invoqué par un
service requestor
−
Il peut lui-même être un requestor
Objets d'un service Web

Service Description
−
Contient le détail de l'interface et de son
implémentation
−
Ceci inclus :
Types de données

Opérations

Informations de connexion (binding)

Localisation sur le réseau

−
Peut être publié vers un service requestor ou
dans un service registry
Cycle de vie
1 - je recherche un service WEB
Annuaire
2 – j'ai trouvé voici le serveur Web
hébergeant ce service
3 – quel est le format d'appel du
service que tu proposes ?
4 – voici mon contrat (WSDL)
Client
5 – j'ai compris comment invoquer
ton service et je t'envoie un document
XML représentant ma requête
6 – j'ai exécuté ta requête et
je te retourne le résultat XML
Serveur
Cycle de vie complet
1. Déploiement du service Web
−
Dépendant de la plate-forme (Apache : WSDD)
2. Enregistrement du service Web
−
WSDL : description du service
−
Référentiels : DISCO (local), UDDI (global)
3. Découverte du service Web
4. Invocation du service Web par le client
Architecture
WSFL
static
direct
Service Flow
UDDI
Service Discovery
UDDI
Service Publication
S
WSDL
Service Description
SOAP
XML-Based Messaging
HTTP, FTP, email,
MQ, IIOP, etc.
Network
M QS
La pile Web Services

Réseau (Network)
−

Le protocole HTTP est le standard
Messages XML (XML-Based Messaging)
−
Le protocole SOAP est le standard
−
HTTP POST avec une enveloppe XML
−
Mécanisme standardisé d'enveloppe XML
Message sous forme de document

Invocation de procédure distante (RPC)

La pile Web Services

Description de service
−
Description de documents XML
−
WSDL est le protocole standard
Définit l'interface du service

Autres descriptions

−
−
−
Contexte métier
Qualité de service
Relations entre services
SOAP et messages XML
Service Requestor
Service Provider
Application
Application Web
service
SOAP
SOAP
Network Protocol
Network Protocol
Réponse
Requête
Un message XML SOAP
<SOAPenv:Envelope
xmlns:SOAPenv="http://schemas.xmlSOAP.org/SOAP/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<SOAPenv:Body>
<req:getNumberOfArticles xmlns:req="http://dailymoon.com/CMS/">
<req:category>classifieds</req:category>
</req:getNumberOfArticles>
</SOAPenv:Body>
</SOAPenv:Envelope>
Autres protocoles

Representational State Transfer (REST)
−
Service Web accessible via une simple URL
Spécifications étendues

WS-Security
−

WS-policy
−

Comment et par qui est utilisé le service
WS-I
−

Cryptage et signature numérique
Ensemble de standards pour l'interopérabilité
WS-BPEL
−
Orchestration des services
Protocole SOAP
Introduction
Simple Object Access Protocol


Spécifications
−
Standard W3C
−
http://www.w3c.org/TR/SOAP
Un support pour l'accès à l'information
−
un protocole client-serveur

−
RPC (Remote Procedure Call)
des protocoles de transport
Au dessus de TCP/IP

protocoles HTTP/SMPT/POP

Requête SOAP
Décodage et appel
de la méthode
CLIENT
Internet
LISTENER
Requête SOAP
NOM+PARAMETRES
SERVICE
exécution de la méthode
SERVEUR HTTP
Simple Object Access Protocol

Simple et extensible

Permet le diagnostic des erreurs

Message unidirectionnel

Fonctionne de façon synchrone et asynchrone

Indépendant de la plate-forme et du langage

N'est pas gêné par les pare-feux

Un système de désignation universelle : URL

Une représentation de documents : HTML
Structure SOAP

Enveloppe
−


Entête
−
Optionnelle
−
Permet de spécifier des directives pour le
traitement du message
Corps
−

Permet de spécifier la version SOAP utilisée
Contient les données
Pièces jointes
−
Permet l'envoi de données non XML
Enveloppe SOAP

C'est l'unité de base d'un message

C'est un document XML
−
Avec deux sous-sections

Header et Body
<?xml version='1.0' ?>
<env:Envelope
xmlns:env="http://www.w3.org/2003/05/SOAP-envelope">
<env:Header>
</env:Header>
<env:Body>
</env:Body>
</env:Envelope>
Enveloppe

Élément obligatoire

Permet de spécifier la version
−
en utilisant un espace de nom


http://www.w3.org/2003/05/soap-envelope
Permet de spécifier les règles d'encodage
−
Encoding Style
−
Sérialisation (Marshalling) et désérialisation
(Unmarshalling)
Exemple de Header SOAP

Contient des informations sur le message
−
Informations de routage
?xml version='1.0' ?>
<env:Envelope xmlns:env="http://www.w3.org/2003/05/SOAP-envelope">
<env:Header>
<wsa:ReplyTo xmlns:wsa=
"http://schemas.xmlSOAP.org/ws/2004/08/addressing">
<wsa:Address>
http://schemas.xmlSOAP.org/ws/2004/08/addressing/role/anonymous
</wsa:Address>
</wsa:ReplyTo>
<wsa:From>
<wsa:Address>
http://localhost:8080/axis2/services/MyService</wsa:Address>
</wsa:From>
<wsa:MessageID>ECE5B3F187F29D28BC11433905662036</wsa:MessageID>
</env:Header>
<env:Body>
</env:Body>
</env:Envelope>
<
Entête

Élément optionnel

Contient des éléments spécifiques à l'application

Peut contenir 3 types d'éléments
−
Actor

−
Permet de préciser le destinataire final du message
MustUnderstand
Spécifie que le récepteur doit comprendre cet élément

Si ce n'est pas le cas il arrête tout traitement

−
Encodingstyle

Même définition que pour l'enveloppe
Exemples
Actor
<m:Trans xmlns:m="http://www.w3schools.com/transaction/"
soap:actor="http://www.w3schools.com/appml/">
MustUnderstand
<m:Trans xmlns:m="http://www.w3schools.com/transaction/"
soap:mustUnderstand="1">234</m:Trans>
Header SOAP

Contient des informations sur le message
−
Comment le message peut être traité par des
intermédiaires


Le protocole SOAP ne garantit pas qu'un message soit
directement échangé entre un client et un serveur
Il peut y avoir d'autres informations dans le Header
Body SOAP

Contient l' information pour dire au récepteur du
message de faire quelque chose

Cette information est appelée « payload »

Le Body possède son propre espace de nom

−
Arbitraire en fonction du contexte applicatif
−
Mais différent de celui de SOAP
Le choix de structuration du « payload » dépend
du style et de l'encodage
Exemple de Body SOAP
?xml version='1.0' ?>
<env:Envelope xmlns:env="http://www.w3.org/2003/05/SOAP-envelope">
<env:Header>
...
</env:Header>
<env:Body>
<cms:addArticle xmlns:cms="http://www.daily-moon.com/cms">
<cms:category>classifieds</category>
<cms:subcategory>forsale</cms:subcategory>
<cms:articleHeadline></cms:articleHeadline>
<cms:articleText>Vintage 1963 T-Bird. Less than 300 miles.
Driven by my daughter until I took it away. Serious inquires only.
555-3264 after 7 PM.</cms:articleText>
</cms:addArticle>
</env:Body>
</env:Envelope>
<
SOAP Message Structure
SOAP Message
HTTP Headers
SOAP Envelope
SOAP Header
Headers
SOAP Body
Method calls & Data
Le message SOAP complet
Entête standard HTTP et
entête SOAP HTTP
Enveloppe
Entête
Entête individuelle
Corps qui contient les appels
de méthodes SOAP
Appel des méthodes et description
en XML des données
Réponse SOAP


Le retour du service
−
Réponse
−
Erreur (SOAP FAULT)
Exemple de réponse
<?xml
version="1.0"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
<soap:Body>
<m:GetPriceResponse xmlns:m="http://www.w3schools.com/prices">
<m:Price>1.90</m:Price>
</m:GetPriceResponse>
</soap:Body>
</soap:Envelope>
SOAP Fault

Réponse SOAP

Fait partie du corps d'un message SOAP

Envoyé à l'émetteur de l'appel
−

Indique les raisons de l'échec
Il existe 4 descripteurs (Faultcode)
−
Version Mismatch
−
MustUnderstand
−
Client
−
Server
Style et encodage


Style RPC
−
Utilise SOAP pour créer des Remote Procedure Calls
−
Invocation d'une méthode avec ses paramètres
−
Types des paramètres
Style document/literal
−
Simple liste de paramètres
−
Pas de détail sur le processus qui les prend en
charge
Exemple de style RPC
<?xml version='1.0' ?>
<env:Envelope xmlns:env="http://www.w3.org/2003/05/SOAP-envelope">
<env:Header>
</env:Header>
<env:Body>
<cms:addArticle xmlns:cms="http://www.daily-moon.com/cms">
<cms:category xsi:type="xsd:string">classifieds</category>
<cms:subcategory xsi:type="xsd:string">forsale
</cms:subcategory>
<cms:articleHeadline xsi:type="xsd:string" />
<cms:articleText xsi:type="xsd:string">Vintage 1963
T-Bird. Less than 300 miles. Driven by my daughter until
I took it away. Serious inquires only. 555-3264 after 7
PM.</cms:articleText>
</cms:addArticle>
</env:Body>
</env:Envelope>
Style document/literal
<?xml version='1.0' ?>
<env:Envelope xmlns:env="http://www.w3.org/2003/05/SOAP-envelope">
<env:Header>
</env:Header>
<env:Body>
<category>classifieds</category>
<subcategory>forsale</subcategory>
<articleHeadline></articleHeadline>
<articleText>Vintage 1963 T-Bird. Less than 300 miles.
Driven by my daughter until I took it away. Serious
inquires only. 555-3264 after 7 PM.</articleText>
</env:Body>
</env:Envelope>
Motifs d'échange de messages

Envoi d'une requête et attente de réponse

Envoi d'une requête et oubli

Échange via des intermédiaires

Options possibles
−
Request-Response
−
One-Way
−
Solicist-Response
−
Notification
Portée de SOAP

SOAP est simple et extensible
−
−
−
−
−
Il permet de réaliser des appels de méthode sur
le Web
Indépendant des OS, des modèles d'objets, des
langages
Transport des message par HTTP + XML
Fonctionne avec l'infrastructure Internet existant
Permet l'interopérabilité entre OS, langages et
modèles objets
Portée de SOAP

Ce n'est pas un système reparti à objets, il
ne couvre donc pas les fonctions suivantes:
−
−
−
−
−
Pas de ramassage de miettes
Pas de contrôle de types, pas de gestion de
version
Pas de dialogue entre deux serveurs HTTP
Pas de passage d'objets par référence
Pas d'invocation
WSDL
Introduction
Web Service Description
Language

C'est le langage de définition des services

Permet de définir le contrat de service

Historique
−
IBM a développé le langage Network Accessible
Service Specification Language (NASSL)
−
Microsoft a développé SOAP Contract Language
( SCL) qui est une évolution de SDL
−
WSDL est la fusion de SCL et de NASSL
Versions WSDL

Première version
−
Version V1.1 (15 Mars 2001)


http://www.w3.org/TR/wsdl
Seconde version
−
Version V1.2 (Working Draft, 3 Mars 2003)

http://www.w3.org/TR/wsdl12
Objectif et représentation

Objectif
−

Décrire les services comme un ensemble
d’opérations et de messages abstraits relié
(bind) à des protocoles et des serveurs réseaux
Grammaire XML (schéma XML)
−
Modulaire (import d’autres documents WSDL et
XSD)
Définition



Une description en XML des services web.
Il décrit de manière abstraite et indépendante
du langage de programmation l’ensemble des
fonctionnalités offertes par un service.
Il permet de connaître
−
les protocoles, les serveurs, les ports
−
le format des messages, les entrées, les sorties
−
les exceptions possibles
−
les opérations réalisées par un service web.
Découplage
Interface/Implémentation
Service
Implementation
Definition
Service
Port
Binding
Service
Interface
Definition
PortType
Message
Type
Pourquoi



Pour décrire les informations à envoyer au
service
Pour décrire les informations que le service
retourne
Pour indiquer où trouver le service
Éléments WSDL
élément
Description
types
A container for abstract type definitions defined using XML Schema
message
A definition of an abstract message that may consist of multiple parts,
each part may be of a different type
portType
An abstract set of operations supported by one or more endpoints
(commonly known as an interface); operations are defined by an
exchange of messages
binding
A concrete protocol and data format specification for a particular
portType
service
A collection of related endpoints, where an endpoint is defined as a
combination of a binding and an address (URI)
Structure WSDL


Section definitions
−
Elle contient le nom du service
−
Elle contient les espaces de nom faisant
référence aux types utilisés dans le document
Section types
−
Permet la définition des éléments abstraits
−
Utilise généralement la grammaire XSD
−
Présent qu'une fois mais peut contenir plusieurs
définitions
Exemples
Définition :
<definitions name="GetStockQuote
targetNamespace="http://advocatemedia.com/GetStockQuote.wsdl"
xmlns:myns = "http://advocatemedia.com/GetStockQuote.wsdl"
xmlns:myXsd = "http://advocatemedia.com/GetStockQuote.xsd"
xmlns:soap = "http://schemas.xmlsoap.org/wsdl/soap"
xmlns="http://schemas.xmlsoap.org/wsdl/">
</definitions>
Types :
<types>
<schema targetNamespace=http://advocatemedia.com/GetStockQuote.xsd
xmlns="http://www.w3.org/2000/10/XMLSchema">
<element name="StockQuoteRequest">
<complexType>
<all>
<element name="symbol" type="string"/>
</all>
...
Structure WSDL

Section message
−
Deux types de message
IN et OUT

Si aucun argument alors pas de IN

−
Définition abstraite des messages échangés entre
deux noeuds
−
Peut être composé de plusieurs section part
Exemple
Message :
<message name="GetStockQuoteRequest">
<part name="body" element="myXSD:StockQuoteRequest"/>
</message>
<message name="GetStockQuoteResponse">
<part name="body" element="myXSD:StockQuoteResponse"/>
</message>
Structure WSDL

Section part
−
Il peut être défini comme un type simple ou
complexe ou un element
−
l'ordre des part dépend de la signature de la
méthode
−
Une section element implique une définition
obligatoire dans la section types
Structure WSDL

Section portType
−
Correspond à une interface IDL CORBA
−
Il contient les classes accessibles
−
A chaque portType sont associées des opérations
correspondant aux méthodes
−
Pour chaque méthode on définit le message d'entrée
et de sortie
−
Les opérations peuvent être de natures différentes

Unidirectionnelle, requête/réponse, sollicitation/réponse,
notification
Exemple
PortType :
<portType name="GetStockQuotePort">
<operation name="GetStockQuote">
<input message="myns:GetStockQuoteRequest"/>
<output message="myns:GetStockQuoteResponse"/>
</operation>
</portType>
Structure WSDL

Section binding
−
Permet de spécifier le protocole d'invocation

HTTP GET/POST, SOAP, SMTP, FTP, ...
−
Un portType peut être invoqué par plusieurs
protocoles
−
Possède un nom unique

portType+protocole+binding
Exemple
Binding :
<binding name="GetStockQuoteBindingName" type="GetStockQuotePort ">
<soap:binding style="rpc" transport=" http://schemas.xmlsoap.org/soap/http"/>
<operation name="GetStockQuote">
<soap:operation soapAction="http://advocatemedia.com/GetStockQuote"/>
<input> <soap:body use="literal"/> </input>
<output> <soap:body use="literal"/> </output>
</operation>
</binding>
Structure WSDL

Section service
−
Permet de
spécifier le nom du service

où se trouve la documentation du service

où envoyer le message

−
La section port permet d'indiquer l'adresse URI
−
L'attribut binding permet d'associer le nom du port au
binding du fichier WSDL
−
La section soap:address spécifie l'adresse du service
Exemple
Service :
<service name="AdvocateMediaGetStockQuotes">
<documentation>Simple Web Service to Retrieve a stock quote</documentation>
<port name="GetStockQuotePort" binding="myns:GetStockQuoteBindingName">
<soap:address location="http://advocatemedia.com/GetStockQuote"/>
</port>
</service>
Limitations

Incapacité de décrire des organisations
complexes
−
Les web services sont des tâches simples, il est
donc nécessaire de définir des enchaînements plus
ou moins complexes pour réaliser des tâches
élaborées.
−
D’autres standards pour cela:
ebXML

Business Process Specification Schema (BPSS)

Web Services Choreography Interface (WSCI).

UDDI
Introduction
Universal Description,
Discovery and Integration

Standard
−

Permet aux fournisseurs de services
−


Organisation for the Advancement Of Structured
Information Standard » (avril 2003)
De s’inscrire et de répertorier les services qu’ils
proposent.
Ne contient que des références associées à
des services, et non les services eux-mêmes
Il peut être public ou privé
Hébergement



Les annuaires publics sont hébergés par des
sociétés comme IBM ou Microsoft.
Les annuaires publics
−
moins développés que les annuaires privés
−
pas suffisamment sécurisés.
Les annuaires privés
−
peuvent être hébergés par une société quelconque
−
sur un réseau privé ou sur internet
Messages entre client
et annuaire
Annuaire UDDI
Client
Requête SOAP UDDI
HTTP Serveur
SOAP Serveur
UDDI API
Réponse SOAP UDDI
données
Structure

Pages vertes
−
Contiennent les informations techniques
détaillées sur les services

Processus métier, description de service, etc.
Structure

L’annuaire UDDI est composé de

Pages blanches
−
Contiennent des informations sur l’entreprise


Nom de la société, adresse, etc.
Pages jaunes
−
Contiennent la description des services déployés
par l’entreprise

Au format WSDL
Pages Blanches

BusinessEntity
−
Décrites sous la forme d’un schéma XML
−
Elles contiennent les éléments relatifs à
l’entreprise

Nom, coordonnées, secteur d’activité, l’adresse du
site web, etc.
Pages Jaunes

BusinessService
−
Décrites aussi sous la forme d’un schéma XML
−
Ensemble de services proposés répondant à un
besoin métier spécifique
−
Contiennent des informations relatives au métier
de l’entreprise.
−
Contiennent aussi la description des services
web proposés

−
Nom du service, description, code, etc.
Une entreprise peut avoir plusieurs métiers et
donc plusieurs businessService.
Pages Vertes

BindingTemplate
−
Contiennent les informations techniques pour
accéder à un service
−
Contiennent aussi les références aux tModels

Spécification des interfaces des services
Les tModels

Représentés par un schéma XML

Représentent les Méta-données et interfaces

Ils contiennent des informations permettant de
connaître
−
Les normes que respecte le service
−
Le format des messages
−
Le protocole de transport
−
etc.
Les tModels

Permettent d’identifier la catégorie à laquelle
appartient le service
−
North American Industry Classification System
( NAICS)
−
Universal Standards Products and Services
Classification (UNSPSC)
−
ISO 3166

Standards pour la localisation géographique
PublisherAssertion



Introduite dans la version 2.0
Représente un ensemble de règles
contractuelles d’invocation de services sous
forme de protocoles entre deux partenaires
métier
Pour qu’une assertion soit publiée, les deux
partenaires doivent publier les mêmes
informations.
Découverte de services



Les standards UDDI sont implémentés dans des
API, permettant l’accès et la manipulation
Il existe deux types d’API
−
API d’interrogation
−
API de publication
La communication avec les registres UDDI se fait
par des messages XML encapsulés dans des
enveloppes SOAP
Relation entre UDDI et WSDL

Le WSDL contient deux parties
−
La description de l’interface du service
−
La description de l’implémentation du service
Relation entre UDDI et WSDL

La description de l’interface d’un service
−
Correspond aux informations techniques du service

−
C’est en quelque sorte une classe abstraite qui sera
utilisée pour implémenter un ou plusieurs autres services.
Elle regroupe

types, import, message, portType, binding
Relation entre UDDI et WSDL

La description de l’implémentation du service
−
Correspond aux informations relatives à l’endroit
où est publié le service
−
Elle regroupe

Documentation, import, service, port
Relation entre UDDI et WSDL
Sécurité
Introduction
Problèmes de sécurité

Authentification

Autorisation

Confidentialité

Intégrité
Techniques de sécurité

Chiffrement et déchiffrement
−

Conversion des données en une forme
inintelligible.
Signatures
−
Pour trouver l’auteur d’un message.

Certificats

Couche physique
Clients SOAP
Avec les produits Axis et Axis2
Deux implémentations

Ancienne manière
−
Le client doit entièrement créer l'enveloppe SOAP


Header et Body
Nouvelle manière
−
Masque la complexité
−
Avec Axis2 il y a le modèle AXIOM
Ressemble à l'API DOM XML

C'est Axis2 qui construit l'enveloppe SOAP

Exemple ancienne manière
public class SendSOAP {
public static void main(String args[]) {
try {
MessageFactory messageFactory = MessageFactory.newInstance();
SOAPMessage message = messageFactory.createMessage();
//Create objects for the message parts
SOAPPart SOAPPart = message.getSOAPPart();
SOAPEnvelope envelope = SOAPPart.getEnvelope();
SOAPBody body = envelope.getBody();
SOAPElement bodyElement =
body.addChildElement(envelope.createName("echo",
"req", "http://localhost:8080/axis2/services/MyService/"));
bodyElement.addChildElement("category").addTextNode("classifieds");
message.saveChanges();
SOAPPart SOAPpartbefore = message.getSOAPPart();
SOAPEnvelope reqenv = SOAPpartbefore.getEnvelope();
System.out.println("REQUEST:");
System.out.println(reqenv.toString());
Exemple (suite)
//Now create the connection
SOAPConnectionFactory SOAPConnFactory =
SOAPConnectionFactory.newInstance();
SOAPConnection connection =
SOAPConnFactory.createConnection();
SOAPMessage reply = connection.call(message,"
http://localhost:8080/axis2/services/MyService");
SOAPPart SOAPpart = reply.getSOAPPart();
SOAPEnvelope replyenv = SOAPpart.getEnvelope();
System.out.println("\nRESPONSE:");
System.out.println(replyenv.toString());
connection.close();
} catch (Exception e){ System.out.println(e.getMessage()); }
}
}
Compilation et exécution

Il faut compiler ce client avec les librairies de
l'ancienne version d'Axis
−
Le produit Axis fait partie du groupe apache
Exemple nouvelle manière
public class ClassifiedClient {
private static EndpointReference targetEPR =
new EndpointReference("http://localhost:8080/axis2/services/MyService");
public static OMElement getEchoOMElement() {
SOAPFactory fac = OMAbstractFactory.getSOAP12Factory();
OMNamespace omNs = fac.createOMNamespace( "http://example1.org/example1",
"example1");
OMElement method = fac.createOMElement("echo", omNs);
OMElement value = fac.createOMElement("category", omNs);
value.addChild(fac.createOMText(value, "classifieds"));
method.addChild(value);
return method;
}
...
Création du « payload »
Exemple (compléments)
...
public class ClassifiedClient {
private static EndpointReference targetEPR = new EndpointReference(
"http://localhost:8080/axis2/services/MyService");
public static OMElement getEchoOMElement() {
...
}
public static void main(String[] args) {
try {
OMElement payload = ClassifiedClient.getEchoOMElement();
Options options = new Options();
options.setTo(targetEPR);
options.setTransportInProtocol(Constants.TRANSPORT_HTTP);
} catch (Exception e) { System.out.println(e.toString());
}
}
}
Création de la requête
Exemple (compléments)
...
public static void main(String[] args) {
try {
OMElement payload = ClassifiedClient.getEchoOMElement();
Options options = new Options();
options.setTo(targetEPR);
options.setTransportInProtocol(Constants.TRANSPORT_HTTP);
ServiceClient sender = new ServiceClient();
sender.setOptions(options);
OMElement result = sender.sendReceive(payload);
}
}
} catch (Exception e) { System.out.println(e.toString());
}
Envoi de la requête
Exemple (compléments)
...
sender.setOptions(options);
OMElement result = sender.sendReceive(payload);
System.out.println(result.toString());
}
}
} catch (Exception e) { System.out.println(e.toString());
}
Réception de la réponse
Service SOAP
Avec le produit Axis2
Méthodologie
1. Création du manifest du service
•
Fichier services.xml
2. Création de la classe du service
3. Création du paquetage Axis
4. Déploiement de l'archive
Création du manifest
<service name="CMSService">
<description>
This is a sample Web Service for the newspaper's
Content Managment System.
</description>
<parameter name="ServiceClass" locked="false">CMSService</parameter>
<operation name="getNumberOfArticles">
<messageReceiver class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
</operation>
</service>
Fichier services.xml
Création du service
public class CMSService {
public OMElement getNumberOfArticles(OMElement element) throws XMLStreamException {
element.build();
element.detach();
return element;
}
}
Création du service (suite)
...
public OMElement getNumberOfArticles(OMElement element) throws XMLStreamException {
element.build();
element.detach();
String rootName = element.getLocalName();
OMElement categoryElement = element.getFirstElement();
String categoryElementName = categoryElement.getLocalName();
String categoryValue = childElement.getText();
return element;
}
}
Extraction du « payload »
Création du service (suite)
...
SOAPFactory factory = OMAbstractFactory.getSOAP12Factory();
OMNamespace namespace = factory.createOMNamespace("http://daily-moon.com/cms/",
"resp");
OMElement resultElem = factory.createOMElement("numberOfArticles",namespace);
String actualValue = (articleCount(categoryValue)).toString();
resultElem.setText(actualValue);
return resultElem;
}
private Integer articleCount(String catId){
return new Integer(42);
}
}
Création et retour de la réponse
Déploiement du service
<?xml version="1.0"?>
<project name="project" default="default">
<description>
description
</description>
<target name="default" depends="depends" description="--> description">
<jar destfile="${basedir}/build/CMSService.aar" basedir="${basedir}">
<include name="META-INF/**"/>
<include name="service/**"/>
</jar>
</target>
<target name="depends">
<mkdir dir="${basedir}/build"/>
</target>
</project>
Fichier build.xml
Création d'un client
public class CMSClient {
private static EndpointReference targetEPR =
new EndpointReference("http://localhost:8080/axis2/services/CMSService");
public static OMElement getEchoOMElement() {
SOAPFactory fac = OMAbstractFactory.getSOAP12Factory();
OMNamespace omNs =
fac.createOMNamespace( "http://example1.org/example1", "example1");
}
...
OMElement method = fac.createOMElement("getNumberOfArticles", omNs);
OMElement value = fac.createOMElement("category", omNs);
value.addChild(fac.createOMText(value, "classifieds"));
method.addChild(value);
return method;
Création d'un client (suite)
public class CMSClient {
...
public static void main(String[] args) {
try {
OMElement payload = CMSClient.getEchoOMElement();
Options options = new Options();
options.setTo(targetEPR);
options.setTransportInProtocol(Constants.TRANSPORT_HTTP);
ServiceClient sender = new ServiceClient();
sender.setOptions(options);
OMElement result = sender.sendReceive(payload);
String response = result.getText();
System.out.println("Il y a "+response+" classées pour le moment.");
}
}
} catch (Exception e) { System.out.println(e.toString());}
Service one-way
Introduction
Création du service
...
private Integer articleCount(String catId){
...
}
}
public void addArticle(OMElement element) throws XMLStreamException{
element.build();
System.out.println(element);
}
Modification de la classe service
Création du manifest
<service name="CMSService">
<description>
This is a sample Web Service for the newspaper's
Content Managment System.
</description>
<parameter name="ServiceClass" locked="false">CMSService</parameter>
<operation name="getNumberOfArticles">
<messageReceiver class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
</operation>
<operation name="addArticle">
<messageReceiver class="org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver"/>
</operation>
</service>
Création du client
public class AddArticleClient {
private static EndpointReference targetEPR =
new EndpointReference("http://localhost:8080/axis2/services/CMSService");
private static OMElement getOMElement(){
SOAPFactory fac = OMAbstractFactory.getSOAP12Factory();
OMNamespace omNs = fac.createOMNamespace("http://daily-moon.com", "cms");
OMElement method = fac.createOMElement("addArticle", omNs);
OMElement category = fac.createOMElement("category", omNs);
category.setText("classifieds");
OMElement subcategory = fac.createOMElement("subcategory", omNs);
category.setText("wantads");
OMElement adtext = fac.createOMElement("article", omNs);
adtext.setText("Bonjour Le Monde");
method.addChild(category);
method.addChild(subcategory);
method.addChild(adtext);
return method;
}
Création du client (suite)
...
public static void main(String[] args) {
try {
OMElement payload = AddArticleClient.getOMElement();
ServiceClient serviceClient = new ServiceClient();
Options options = new Options();
serviceClient.setOptions(options);
options.setTo(targetEPR);
serviceClient.fireAndForget(payload);
} catch (AxisFault axisFault) { axisFault.printStackTrace();
}
}
Accès au service via GET HTTP
Introduction
La méthode GET

Ouvrir un navigateur

Entrer l'URL suivante :
http://localhost:8080/axis2/services/CMSService/getNumberOfArticles?category=classifieds

Documents pareils