elle intègre une complète programmation n'a pas de budget ou de temps à y consacrer. </params>
< /methodCall>
obiet et une gestion des erreurs baséesur les À ce jour nous disposonsde trois façons pour
exceptions.Alors que Javaest un langageob- pouvoir le faire: soit par I'intermédiaire d'un mià-
SuperPackT/2007(12)
les requêtesen format XML (Listing I ), in- tion utilisé. La réalisation de cette intégra- développer votre propre implémentation en
versementle serveurdécodeI'appel,invoque tion n'a pas besoin d'une mise en place par- vous basant sur les spécifications du proto-
la méthode, encodele résultat pour enfin le ticulière ou d'une installation au préalable, cole, si vous en avezle temps.
transmettre au client. Par ailleurs, I'utilisa- il suffit de téléchargerune implémentation Dans I'exemple suivant, nous montreront
teur n'a pas besoin de coder les mécanismes XML-RPC pour Javaparmi les cinq disponi- comment utiliser l'implémentation Apache
d'encodage ni les mécanismes d'échange, bles sur le site officiel et une implémentation pour PHP et Useful Inc pour Java. Premiè
puisqu'il doit utiliser une implémentation PHP parmi les neufs disponibles.Sachezque rement, vous allez voire comment mettre en
correspondanteau langagede programma- vous pouvezen trouver d'autres,ou même en placeun serveuren Java(Listing 2) qui aura la
chargede publier un servicedistant et un client
en PHP (Listing 3) capabled'invoquer les mê
thodesdu précédentservice.
Notez que le contraire est vrai il est possible
d'inverseret mettre en placeun serveuren PHP
et un client en Java.
PHPdansun environnement
de Servlet
Vous pouvez égalementintégrer PHP dans un
environnement de Servlet Javaen s'appuyant
sur le module SAPI (speechApplication Pro
gramminglnterface)qui s'interfaceavecun ser-
veur de Servlet.Cette interface est construite
Listlng 2. ServeurXML-RPC
enlavo sur un mécanismedéfini par I'extensionJava,
qui permet à PHP d'être exécutécomme une
/ /L' inplénentation XML-RPC servlet.
import org. apache.xmlrpc.WebServeri C'est une solution stableet efficacemais elle
publie class JavaService {
opère dans un sensunique (PHP => Java).Se'
// Méthode distante
lon PHP,I'avantageimmédiat de cette solution
public int sum(int a, inÈ b) {
System.out.println ("CIient request" ),'
est que les serveursweb, supportant les servlet
return a + b; gèrentrigoureusementles machinesvirtuelles.
) Or, nous estimons que cette gestion est du res-
pnblic static void main(String[] args) { sort du serveur.Si une aide lui est apportée il
// Instanciation d'un serveur HTTP sur le port 8090 serad'autant plus performant.
9 f , e b S e r v e rs e r v e r = new Webserver(8090);
La solution est très simple mais sa mise en
// Publication du service distant sous Je non JService
place n'est pas triviale pour les novicesen la
server.addHandler ("JServlce", ner rtavaServlce O );
pour qu'il accepte l.es connexlons
matière. Vous devez disposer de I'extension
// Lacenent du serveur
server. Etart O ;
phpjaua.d//, le module php\serulet.dll et I'ar-
) chive phpsruh.jar qu;i sont disponibles dans la
) collection desextensionsPECL (PHPExtension
CommunityLibrary) une bibliothèque regrou-
en PHP
Lfstlng 3. ClientXML-RPC pant plusieurs modules et extensionscomme
<?phP
ClibPDF (une extension qui vous permet de
//L' inpJénentatlon XML-RPC pour PHP
i n c l u d e ( " x m l r p c . 1 n c ") ;
créerdesdocumentsPDF), FTP (une extension
$server_port = 8090; // port du serveur HTTP
qui implémente un client FTP), GeolP(une ex-
$server_root = uftt; //le dosster du aerveur ht.tp tension permettant de localiserla ville, l'état, le
9server_hogt = 'rlocalhosL'i //h6ta du servear H?TP pays d'une adresseIP) et plein d'autres...No
//Inetanciatton dtun obJet ellent )ML-RPÇde Ia claçea xnlrpc_ellent tons que la version du PHP et PECL doit être
$cttent, = new xmlrpc_client ($eerver_rootr $gerver_host,$gerverSort) ; la même.
//Pour la débogaqe, très ut!Je pour obtentt daa lnfsrnaëlons rctaurnéaa par
La réalisation de cette solution nécessite
//Je aerveur,.,
une configuration au préalable. Au niveau
9 c 1 l e n t - > s e t D e b u(g1 ) ,
du PHP il faut ajouter ou dé<ommenter la li-
//Instanclatlon dtun obJat neasagede la eleaEe xnlrpenag danE le buE
//de le transnettta au sêrvêur, gne exÈension:php_java.d1ldans le fichier
//Le prenler paranêÊre eorreepondau nan da la néthode dtsten|â, php.iniportr que PHP puissechargerI'extension
//le deuxlène âux argunents, Java.Au niveau du moteur de servlet, Tomcat
//Les paranètrec aonï dea obJata de la elaasa xnlrpeval qul eonporïant par exemple, il faut copier I'archivephpsruh.jar
//dcux proprlétéar la typa at Ja valeur, dans le répertoire lib qui se trouve dans le ré
$ n e s s a g e= n e r x m l r p c m s g ( r r , J S e r v l c € . E u m t ' r a r r a y (xnnel r p c v a l ( f S i l r ( l n È i l ) '
pertoire I4ZEB-INFunsousrépertoire du projet
new xmlrpcval ('10'rr ttlnttt) ) ) ;
et ajouter la déclaration des Servlet (Listing 4)
/ftûéthoda du ellenE pour anvoyer la naEEagaau aetveuË
$reponae = $cllent->send($neggage); au fichier web.xmlle fichier descripteurde dé
//Exploltattan dçe réEul9atE ploiement de l'application.Pourterminer; ajou-
$valeur = 9reponse->value(); ter le chemin du répertoire PHP ou le répertoi-
echo $valeur->scalarval O t re où se trouve phpjaua.dll et phpîservlet.dll
//AfflehaEe du réEuItaE dans la variable d'environnement PATH et re
?>
démarrer le svstème.
www.phpsolmag.org
PHPet Java
(12)
SuperPackT/2007