Upload
others
View
6
Download
0
Embed Size (px)
Citation preview
XML RPCTechnologie de le programmation
Olivier Flauzac
URCA
LPRO CMSII
Olivier Flauzac (URCA) XML RPC CMSII 1 / 30
1 Introduction
2 Requetes et reponses
3 Mapping
4 XML RPC et java
5 Caracteristique et specificites
Olivier Flauzac (URCA) XML RPC CMSII 2 / 30
Introduction
Plan
1 Introduction
2 Requetes et reponses
3 Mapping
4 XML RPC et java
5 Caracteristique et specificites
Olivier Flauzac (URCA) XML RPC CMSII 3 / 30
Introduction
Executions distantes
Appel de procedures a distance (RPC)
Sun RPC
RMI
Corba
DCOM ORPC
Limites des solutions
coherence des donnees
coherence des langages
lourdeur des solutions
securite
Olivier Flauzac (URCA) XML RPC CMSII 4 / 30
Introduction
XML-RPC
Motivation
gestion des executions distantes
gestion de l’heterogeneite
systemelangageserveur
gestion de la securite
Solution proposee
protocole HTTP
transport : methode POST
encodage XML
HTTP/SSL pour la securite
Olivier Flauzac (URCA) XML RPC CMSII 5 / 30
Introduction
Implemantations
Langages
C
C++
ObjectiveC
Delphi/Kylix
Java
Perl
PHP
Python
TCL
Ruby
Rebol
Scheme
Lisp
Lingo
AppleScript
JavaScript
ASP
Cold Fusion
WebObjects
Flash
Zope
Olivier Flauzac (URCA) XML RPC CMSII 6 / 30
Requetes et reponses
Plan
1 Introduction
2 Requetes et reponses
3 Mapping
4 XML RPC et java
5 Caracteristique et specificites
Olivier Flauzac (URCA) XML RPC CMSII 7 / 30
Requetes et reponses
Requete XML-RPC
POST /RPC2 HTTP/ 1 . 0User−Agent : F r o n t i e r / 5 . 1 . 2 (WinNT)H o s t : b e t t y . u s e r l a n d . comContent−Type: t e x t / xmlContent− l e n g t h : 181
<?xml ver s ion=” 1 . 0 ”?><methodCa l l>
<methodName>examples . getStateName</methodName><params>
<param><v a l u e>< i 4>41</ i 4></ v a l u e>
</param></ params>
</ methodCa l l>
Olivier Flauzac (URCA) XML RPC CMSII 8 / 30
Requetes et reponses
Reponse
HTTP/ 1 . 1 200 OKC o n n e c t i o n : c l o s eContent−L e n g t h : 158Content−Type: t e x t / xmlDate : F r i , 17 J u l 1998 19 : 5 5 : 0 8 GMTS e r v e r : UserLand F r o n t i e r /5.1.2−WinNT
<?xml ver s ion=” 1 . 0 ”?><methodResponse>
<params><param>
<v a l u e>< s t r i n g>South Dakota</ s t r i n g></ v a l u e></param>
</ params></ methodResponse>
Olivier Flauzac (URCA) XML RPC CMSII 9 / 30
Requetes et reponses
Reponse avec erreur
HTTP/ 1 . 1 200 OKC o n n e c t i o n : c l o s eContent−L e n g t h : 426Content−Type: t e x t / xmlDa te : F r i , 17 J u l 1998 19 : 5 5 : 0 2 GMTS e r v e r : UserLand F r o n t i e r /5.1.2−WinNT
<?xml v e r s i o n=” 1 . 0 ”?><methodResponse>
< f a u l t><v a l u e>
<s t r u c t><member>
<name>f a u l t C o d e</name><v a l u e>< i n t>4</ i n t></ v a l u e>
</member>
Olivier Flauzac (URCA) XML RPC CMSII 10 / 30
Requetes et reponses
<member><name> f a u l t S t r i n g</name><v a l u e>< s t r i n g>Too many p a r a m e t e r s .</ s t r i n g> </ v a l u e>
</member></ s t r u c t>
</ v a l u e></ f a u l t>
</ methodResponse>
Olivier Flauzac (URCA) XML RPC CMSII 11 / 30
Mapping
Plan
1 Introduction
2 Requetes et reponses
3 Mapping
4 XML RPC et java
5 Caracteristique et specificites
Olivier Flauzac (URCA) XML RPC CMSII 12 / 30
Mapping
Types de donnees
Donnees et formats
type donnee representee
<int> <i4> entier 32 bits signes
<string> chaıne de caracteres ASCII
<boolean> booleen
<double> virgule flotante double precision
<dateTime.iso8601> date et heure
<base64> flux binaire
<array> tableaux
<struct> structure complexes
par defaut string
Olivier Flauzac (URCA) XML RPC CMSII 13 / 30
Mapping
Types de donnees : Exemple 1
Structures
<s t r u c t><member>
<name>lowerBound</name><v a l u e>< i 4>18</ i 4></ v a l u e>
</member><member>
<name>upperBound</name><v a l u e>< i 4>139</ i 4></ v a l u e>
</member></ s t r u c t>
Olivier Flauzac (URCA) XML RPC CMSII 14 / 30
Mapping
Types de donnees : Exemple 2
Tableaux
<a r r a y><data>
<v a l u e>< i 4>12</ i 4></ v a l u e><v a l u e>< s t r i n g>Egypt</ s t r i n g></ v a l u e><v a l u e><b o o l e a n>0</ b o o l e a n></ v a l u e><v a l u e>< i 4>−31</ i 4></ v a l u e>
</ data></ a r r a y>
Olivier Flauzac (URCA) XML RPC CMSII 15 / 30
XML RPC et java
Plan
1 Introduction
2 Requetes et reponses
3 Mapping
4 XML RPC et java
5 Caracteristique et specificites
Olivier Flauzac (URCA) XML RPC CMSII 16 / 30
XML RPC et java
Implementation en Java
Bibliotheques
plusieurs implementations
utilisation de l’implementation Apache
version 2version 3
http://ws.apache.org/implementation client
org.apache.xmlrpc.XmlRpcClient : utilisation dejava.net.URLConnection
org.apache.xmlrpc.XmlRpcClientLite : protocole HTTP legergestion des appels synchronesgestion des appels asynchrones
implementation serveur
modulestandalone serveur
Olivier Flauzac (URCA) XML RPC CMSII 17 / 30
XML RPC et java
Mapping
type XML-RPC Type genere Type manipule
<i4> ou <int> java.lang.Integer int
<boolean> java.lang.Boolean boolean
<string> java.lang.String java.lang.String
<double> java.lang.Double double
<dateTime.iso8601> java.util.Date java.util.Date
<struct> java.util.Hashtable java.util.Hashtable
<array> java.util.Vector java.util.Vector
<base64> byte[ ] byte[ ]
Olivier Flauzac (URCA) XML RPC CMSII 18 / 30
XML RPC et java
API cote client
Constructeur
XmlRpcCl ient ( j a v a . l a n g . S t r i n g hostname , i n t p o r t )XmlRpcCl ient ( j a v a . n et . URL u r l )
Execution
j a v a . l a n g . Object e x e c u t e ( j a v a . l a n g . S t r i n g method ,j a v a . u t i l . V e c t o r params )
void e x e c u t e A s y n c ( j a v a . l a n g . S t r i n g method ,j a v a . u t i l . V e c t o r params ,A s y n c C a l l b a c k c a l l b a c k )
Recuperation de l’URL
j a v a . n et . URL getURL ( )
Olivier Flauzac (URCA) XML RPC CMSII 19 / 30
XML RPC et java
API cote serveur
Le serveur
classe : org.apache.xmlrpc.WebServer
constructeur
WebServer ( i n t p o r t )
Methodes
enregistrement des services
vo id addHandler ( j a v a . l a n g . S t r i n g name , j a v a . l a n g . Object t a r g e t )
mise en place
vo id s t a r t ( )
gestion des acces
vo id s e t P a r a n o i d ( boolean p )vo id a c c e p t C l i e n t ( j a v a . l a n g . S t r i n g a d d r e s s )vo id d e n y C l i e n t ( j a v a . l a n g . S t r i n g a d d r e s s )
Olivier Flauzac (URCA) XML RPC CMSII 20 / 30
XML RPC et java
Exemple
Serveur
import org . apache . xml rpc . ∗ ;
pub l i c c l a s s S e r v e r S i m p l e {pub l i c S e r v e r S i m p l e ( ) {}pub l i c S t r i n g b o n j o u r ( S t r i n g s ) {
S t r i n g r e s u l t = new S t r i n g ( ” Bonjour ” + s ) ;return r e s u l t ;
}}
Olivier Flauzac (URCA) XML RPC CMSII 21 / 30
XML RPC et java
Mise en service
import org . apache . xml rpc . ∗ ;
pub l i c c l a s s S t a r t S e r v {pub l i c s t a t i c void main ( S t r i n g [ ] a r g s ) {
t ry {
WebServer s e r v e r = new WebServer ( 8 0 8 0 ) ;s e r v e r . addHandler ( ” t e s t ” , new S e r v e r S i m p l e ( ) ) ;s e r v e r . s t a r t ( ) ;
} catch ( E x c e p t i o n e x c e p t i o n ) {System . e r r . p r i n t l n ( ” J a v a S e r v e r : ” +
e x c e p t i o n . t o S t r i n g ( ) ) ;}
}}
Olivier Flauzac (URCA) XML RPC CMSII 22 / 30
XML RPC et java
Un client
import j a v a . u t i l . V e c t o r ;import org . apache . xml rpc . ∗ ;import j a v a . u t i l . ∗ ;
pub l i c c l a s s C l i e n t S i m p l e {p r i v a t e f i n a l s t a t i c S t r i n g s e r v e r U r l =
” h t t p : / / l o c a l h o s t :8080/RPC2” ;pub l i c s t a t i c vo id main ( S t r i n g [ ] a r g s ) {
t r y {XmlRpcCl ient t o S e r v e r = new XmlRpcCl ient ( s e r v e r U r l ) ;V e c t o r params = new V e c t o r ( ) ;params . addElement (new S t r i n g ( ” O l i v i e r ” ) ) ;S t r i n g r e s u l t =
( S t r i n g ) t o S e r v e r . e x e c u t e ( ” t e s t . b o n j o u r ” , params ) ;System . out . p r i n t l n ( r e s u l t ) ;
} catch ( XmlRpcExcept ion e x c e p t i o n ) {System . e r r . p r i n t l n ( ” J a v a C l i e n t : XML−RPC F a u l t #” +
I n t e g e r . t o S t r i n g ( e x c e p t i o n . code ) + ” : ” +e x c e p t i o n . t o S t r i n g ( ) ) ;
} catch ( E x c e p t i o n e x c e p t i o n ) {System . e r r . p r i n t l n ( ” J a v a C l i e n t : ” + e x c e p t i o n . t o S t r i n g ( ) ) ;
}}
}Olivier Flauzac (URCA) XML RPC CMSII 23 / 30
Caracteristique et specificites
Plan
1 Introduction
2 Requetes et reponses
3 Mapping
4 XML RPC et java
5 Caracteristique et specificites
Olivier Flauzac (URCA) XML RPC CMSII 24 / 30
Caracteristique et specificites
Persistance des donnees du serveur
Persistance
utilisation de la persistance des objets
import org . apache . xml rpc . ∗ ;
pub l i c c l a s s S e r v e r P e r s i s t {pr i va te i n t i ;pub l i c S e r v e r P e r s i s t ( ) {
i = 0 ;}pub l i c i n t v a l I ( ) {
i ++;return i ;
}}
Olivier Flauzac (URCA) XML RPC CMSII 25 / 30
Caracteristique et specificites
Transmission d’objets en Java
Transmission
transmission des etats serialises des objets
utilisation du type base64
utilisation des classe Java :
java.io.ByteArrayInputStreamjava.io.ByteArrayOutputStreamjava.io.ObjectOutputStreamjava.io.ObjectInputStream
perte de la compatibilite translangage ! ! !
Olivier Flauzac (URCA) XML RPC CMSII 26 / 30
Caracteristique et specificites
Le serveur
import org . apache . xml rpc . ∗ ;import j a v a . i o . ∗ ;
pub l i c c l a s s S e r v S e r {pub l i c S e r v S e r ( ) {}pub l i c byte [ ] s e r i a ( ) {
Pers p = new Pers ( ” t o t o ” , ” t i t i ” ) ;byte [ ] r e s = n u l l ;t r y {
ByteArrayOutputStream o = new ByteArrayOutputStream ( ) ;ObjectOutputStream out = new ObjectOutputStream ( o ) ;out . w r i t e O b j e c t ( p ) ;out . f l u s h ( ) ;r e s = o . t o B y t e A r r a y ( ) ;
} catch ( E x c e p t i o n e ){System . out . p r i n t l n ( ” E r r e u r s u r l e s e r v e u r ” ) ;
}r e t u r n r e s ;
}}
Olivier Flauzac (URCA) XML RPC CMSII 27 / 30
Caracteristique et specificites
Le client
import org . apache . xml rpc . ∗ ;import j a v a . u t i l . ∗ ;import j a v a . i o . ∗ ;pub l i c c l a s s C l i S e r v {
p r i v a t e f i n a l s t a t i c S t r i n g s e r v e r U r l =” h t t p : / / l o c a l h o s t :8080/RPC2” ;
pub l i c s t a t i c vo id main ( S t r i n g [ ] a r g s ) {t r y {
XmlRpcCl ient t o S e r v e r = new XmlRpcCl ient ( s e r v e r U r l ) ;V e c t o r params = new V e c t o r ( ) ;byte [ ] r e s u l t = ( byte [ ] )
t o S e r v e r . e x e c u t e ( ” t e s t 3 . s e r i a ” , params ) ;B y t e A r r a y I n p u t S t r e a m i = new B y t e A r r a y I n p u t S t r e a m ( r e s u l t ) ;O b j e c t I n p u t S t r e a m i n = new O b j e c t I n p u t S t r e a m ( i ) ;Pers p = ( Pers ) i n . r e a d O b j e c t ( ) ;System . out . p r i n t l n ( p ) ;
} catch ( XmlRpcExcept ion e x c e p t i o n ) {System . e r r . p r i n t l n ( ” J a v a C l i e n t : XML−RPC F a u l t #” +
I n t e g e r . t o S t r i n g ( e x c e p t i o n . code ) + ” : ” + e x c e p t i o n ) ;} catch ( E x c e p t i o n e ) {
System . e r r . p r i n t l n ( ” J a v a C l i e n t : ” + e ) ; }}
}
Olivier Flauzac (URCA) XML RPC CMSII 28 / 30
Caracteristique et specificites
Exemple de service accessible
Date et Heure
service libre et gratuit
time.xmlrpc.com
port : 80
path : /RPC2
methode : currentTime.getCurrentTime
Olivier Flauzac (URCA) XML RPC CMSII 29 / 30
Caracteristique et specificites
Le client
import org . apache . xml rpc . ∗ ;import j a v a . u t i l . ∗ ;pub l i c c l a s s C l i e n t T i m e {
p r i v a t e f i n a l s t a t i c S t r i n g s e r v e r U r l =” h t t p : / / t ime . xmlrpc . com : 8 0 / RPC2” ;
pub l i c s t a t i c vo id main ( S t r i n g [ ] a r g s ) {t r y {
XmlRpcCl ient t o S e r v e r = new XmlRpcCl ient ( s e r v e r U r l ) ;V e c t o r params = new V e c t o r ( ) ;Object r e s u l t = t o S e r v e r . e x e c u t e ( ” c u r r e n t T i m e . getCur rentT ime ” ,
params ) ;System . out . p r i n t l n ( r e s u l t ) ;
} catch ( E x c e p t i o n e x c e p t i o n ) {System . e r r . p r i n t l n ( ” J a v a C l i e n t : ” + e x c e p t i o n . t o S t r i n g ( ) ) ;
}}
}
Olivier Flauzac (URCA) XML RPC CMSII 30 / 30