Introduction
Cette page explique comment utiliser (on dit aussi consommer) un service web depuis une application Cocoa. Ceci fonctionne pour une application Mac OS X et pour une application iPhone
Pré-requis
Vous devez disposer d’un service web fonctionnel et de son descripteur WSDL associé. Personnellement, j’utilise un serveur Tomcat avec le framework Axis.
Service web de test
J’ai créé un petit service web tout simple qui effectue et retourne l’addition de deux nombres entiers. Voici mon fichier Calculator.jws que j’ai placé dans webapps/axis/ :
import org.apache.axis.AxisFault; import org.apache.axis.MessageContext; import org.apache.axis.transport.http.HTTPConstants; public class Calculator { /** * @param int a * @param int b * @return addition of a + b */ public int add(int a, int b) { return a + b; } } |
Pour tester le service, on accède à l’URL suivante (ceci peut dépendre de votre installation de Tomcat) : http://localhost:8080/axis/Calculator.jws?WSDL. Le code source XML doit être le descripteur WSDL.
Création du stub
Un stub est un objet qui fait abstraction du service web : il permet d’appeler un service web via un simple appel de méthode ; c’est cette méthode qui réalise l’appel au service web, attend la réponse et traduit le résultat en données directement exploitables (objets et types natifs du langage).
Pour créer un stub, il faut utiliser l’utilitaire WSMakeStubs en ligne de commande ou bien WSStubCreator (voir Xcode et InterfaceBuilder). Dans notre exemple, j’ai appelé les fichiers WSCalculator. Le résultat est est composé de 4 fichiers :
- WSCalculator.h
- WSCalculator.m
- WSGeneratedObj.h
- WSGeneratedObj.m
Utilisation du stub
Avant toute chose, vous devez ajouter le framework CoreServices à votre projet. Pour cela, dans Xcode, faites un clic droit sur le dossier Frameworks dans l’arborescence de gauche puis Add > Existing Frameworks…
Choisissez alors le framework /Système/Bibliothèque/Frameworks/CoreServices.framework.
Ajoutez votre stub à votre projet (les 4 fichiers générés). Clic droit sur le dossier Classes puis Add > Existing Files… Choisissez les fichiers générés par WSMakeStubs (ou WSStubCreator).
Dans votre code, vous pouvez alors directement appeler la méthode correspondant à votre service web ; il suffit pour cela d’ouvrir le fichier WSCalculator.h pour voir la signature de la méthode. Dans notre exemple, il s’agit de la méthode suivante de la classe CalculatorService :
+ (id) add:(SInt32) in_a in_b:(SInt32) in_b; |
Pour l’utiliser, il n’y a rien de plus simple : après avoir importé la déclaration de la classe (WSCalculator.h), il suffit d’appeler cette méthode statique, comme le montre l’exemple ci-dessous :
int a = 4, b = 5; NSNumber* resultat = [CalculatorService add:a in_b:b] ; |
Notez que le résultat d’un service web sera toujours retourné sous forme d’un objet. Ici, le résultat est un nombre entier : c’est donc un NSNumber qui est retourné, et non pas une simple valeur de type int.