Avant propos :
Les outils
utilisés dans ce tutorial sont :
La première
partie traitera la création et le déploiement du service web.
La deuxième
partie traitera la création de l’application mobile.
Dans la
troisième et la quatrième partie on traitera la consommation du service web
à partir de notre Midlet.
Dans ce
tutorial j’essaie d’être le plus bref possible, donc j’espère que les captures
d’écran font le rôle.
1-
Création et déploiement du Web service :
1.1-
Création du service web :
On commence
par la création de notre service web, on l’appellera « sommer.jws »,
on met dedans le code suivant :
public class sommer
{
public int getsomme(int a, int b) {
return a+b;
}
}
1.2-
Déploiement du service web :
On copie
ce fichier dans le dossier « axis » qui se trouvera normalement
dans le « webapps » votre serveur Tomcat :
Maintenant
on peut lancer le serveur Tomcat, et pour accéder au service web taper l’url
http://localhost:8080/axis/sommer.jws
(Je suppose là que vous avez déjà lancer axis, sinon lancer l’url http://localhost:8080/axis/ et cliquer
sur « Validation »).
Cliquer
sur le lien, et vous aurez le fichier de description de notre service web.
Le service
web est maintenant opérationnel, pour le tester taper l’url http://localhost:8080/axis/sommer.jws?method=getsomme&a=2&b=3
, et le service web nous retourne 5.
Si tout
s’est bien passé, on peut maintenant passer à la création de notre application
mobile.
2-
Création de l’application mobile :
On lance
d’abord NetBeans (le Pack Mobility doit être installé), on crée un nouveau
projet mobile par « File->New Projet ».
Nommer
l’application « clientmobile », et décocher « Create Hello
Midlet ».
Avant d’aller
plus loin, assurez-vous d’avoir installé le pack Java Web Service « jwsdp » dans le serveur Tomcat comme conteneur,
car c’est avec ce pack qu’on pourra créer un client du service web sous NetBeans.
Donc notre
application est prête et on pourra normalement aller faire un clique droit
sur l’application et choisir « J2ME Web Service Client », saisir
l’url du service web http://localhost:8080/axis/sommer.jws?wsdl
et cliquer sur « Retrieve WSDL », mais NetBeans nous indique que
le style de déploiement du service sous Axis n’est pas DOCUMENT/LITERAL, donc
pour résoudre ce problème de compatibilé, il faut passer par un client web
qui utilise JAXRPC pour générer le Stub.
3-
Création du client web:
Aller sur
le menu « File->New Projet », on crée une application web cliente
nommée « clientweb ».
Choisir
« Jakarta » pour l’option « Source Structure », et pour
le serveur vous pouvez travailler avec le serveur intégré « Bundled Tomcat »
ou choisir un autre serveur externe tel que Tomcat ou Sun AppServer.
Je préfère
travailler avec mon serveur externe Tomcat, mais dans les deux cas le serveur
doit contenir les packages du pack « Java Web
Service Developper Pack » comme illustré ci-dessus.
L’application
étant créée, on crée le client en faisant clique droit sur l’application web.
Après on
saisie l’url du service web http://localhost:8080/axis/sommer.jws?wsdl
, et on clique sur le bouton « Retrieve WSDL », il reste le nom
du package « ensias.ws » et avant de valider
il faut changer le « Client Type » de « J2EE Container-generated
static stub » par « IDE-generated static stub ».
Après la
validation les fichiers du stub seront créés et on peut consulter l’implémentation
du service web « sommer » dans le fichier « Sommer_Stub »
:
public
int getsomme(int a, int b)
throws java.rmi.RemoteException {
try { StreamingSenderState _state =
_start(_handlerChain); InternalSOAPMessage _request
= _state.getRequest(); _request.setOperationCode(getsomme_OPCODE); ensias.ws.Sommer_getsomme_RequestStruct
_mySommer_getsomme_RequestStruct = new ensias.ws.Sommer_getsomme_RequestStruct(); _mySommer_getsomme_RequestStruct.setA(a); _mySommer_getsomme_RequestStruct.setB(b); SOAPBlockInfo _bodyBlock = new
SOAPBlockInfo(ns1_getsomme_getsomme_QNAME); _bodyBlock.setValue(_mySommer_getsomme_RequestStruct); _bodyBlock.setSerializer(ns1_mySommer_getsomme_RequestStruct_SOAPSerializer); _request.setBody(_bodyBlock); _state.getMessageContext().setProperty(HttpClientTransport.HTTP_SOAPACTION_PROPERTY,
""); _send((java.lang.String) _getProperty(ENDPOINT_ADDRESS_PROPERTY),
_state); ensias.ws.Sommer_getsomme_ResponseStruct
_mySommer_getsomme_ResponseStruct = null; Object _responseObj = _state.getResponse().getBody().getValue(); if (_responseObj instanceof SOAPDeserializationState)
{ _mySommer_getsomme_ResponseStruct
= (ensias.ws.Sommer_getsomme_ResponseStruct)((SOAPDeserializationState)_responseObj).getInstance(); } else { _mySommer_getsomme_ResponseStruct
= (ensias.ws.Sommer_getsomme_ResponseStruct)_responseObj; } return _mySommer_getsomme_ResponseStruct.getGetsommeReturn();
} catch (RemoteException e) { //
let this one through unchanged throw e;
} catch (JAXRPCException e) { throw new RemoteException(e.getMessage(),
e);
} catch (Exception e) { if (e instanceof RuntimeException)
{ throw (RuntimeException)e; } else { throw new RemoteException(e.getMessage(),
e); } } }
4-
Appel du service web à partir de l’application mobile :
On revient
à notre application mobile, encore un clique droit et cette fois « Mobile
Client to Web Application ».
On choisit
notre application web « clientweb », on précise un nom pour la servlet
« WebToMobileServlet » et le package « ensias.mb », et
on coche « Web Service Client in Web Application ».
La même
chose pour le slide suivant, on remplit les différents champs comme indiqués
sur la figure.
Après on
sélectionne le service web.
NetBeans
crée une Midlet exemple pour consommer le service.
Et c’est
tout ce qu’il nous faut.
Avant d’exécuter
l’application mobile vous devez arrêter le serveur web Tomcat, faire un clique
droit sur l’application mobile et « Deploy Project », et de même
pour l’application web (clique droit et « Deploy Project »).
Tout est
maintenant près, Il suffit de faire un clique droit sur l’application mobile
et « Run Project », NetBeans exécute l’application à l’aide de l’émulateur
« J2ME Wireless Toolkit ».
![]()
Copyright © 2004-2006 Mohamed KARAMI
Dernière MAJ : 16/09/2006