XML RPC - Technologie de le...

Preview:

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

Recommended