Accueil

Créer, déployer et consommer un Web service avec un client java et J2ME

 Notes :

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

Page HTML 4.01 valideFeuille de style CSS valide

Dernière MAJ : 16/09/2006