Recherche sur le blog

jeudi 2 mai 2013

[Java] Axis2 et Web Service, les plus…

Nous avons déjà abordé avec vous la création de web services en Java en utilisant le module Axis2 qui s’installe sur un serveur Apache Tomcat. Dans la première partie, nous vous expliquions en bref comment déployer le module sur le serveur, comment le configurer et comment définir le mot de passe de l’administrateur. Nous vous donnions également l’astuce pour installer le plugin dans NetBeans, dont le support n’est plus assuré officiellement. Dans la seconde partie, nous avions créé un projet dans l’EDI et nous l’avions testé dans un navigateur Web. Un autre billet, paru un peu plus tard, indiquait la marche à suivre pour l’intégrer facilement dans WinDev. Aujourd’hui, nous allons voir ensemble quelques “astuces” pour aider au développement.

Impossible d’ouvrir la page depuis NetBeans

Lorsque vous utilisez l’option “Test operation in browser”, un message d’erreur s’affiche, indiquant '”Unable to open web service tester page”. Or, en indiquant vous-même l’URL dans un navigateur, vous obtenez une réponse inattendue du service, à savoir le message “unknown”.

Afin de comprendre cette erreur, nous avons voulu aller plus loin en nous rendant dans les journaux de Tomcat. Ceux-ci sont stockés dans le répertoire “logs” du répertoire d’installation du serveur en question. Le fichier qui nous intéresse est nommé de la manière suivante : tomcat7-stdout.AAAA-MM-JJ.log. On y trouve l’erreur suivante, liée à la tentative d’exécution depuis le navigateur internet.

java.lang.IllegalArgumentException
at sun.reflect.NativeMethodAccessorImpl.invoke0()
at sun.reflect.NativeMethodAccessorImpl.invoke()
at sun.reflect.DelegatingMethodAccessorImpl.invoke()
at java.lang.reflect.Method.invoke()
at …

Dans notre exemple, nous avions redéployé le service en ajoutant un paramètre à l’une des fonctions. Cependant, la modification du WSDL n’a pas lieu si l’option “Generate WSDL File” a été cochée lors de la création. Dans ce cas, effectuez un clic droit sur le service dans l’arborescence du projet puis dans le menu contextuel, choisissez “Generate WSDL…”. Confirmez par “Oui” pour écraser la version précédente. Notez que le fichier est directement éditable à la main.

Intégrez vos librairies .jar lors du déploiement

Plutôt que de jouer avec le classloader du serveur, le plugin Axis2 de NetBeans vous permet de directement intégrer les librairies nécessaires pour l’exécution du service. C’est bien plus pratique. Ainsi, dans la vue “Projects”, effectuez les opérations suivantes.

  • Clic droit sur le nom de votre projet, puis “Properties”.
  • Dans l’arborescence de gauche, cliquez sur “Libraries”.
  • Dans l’onglet “Compile” à droite, ajoutez les archives .JAR grâce au bouton “Add JAR / Folder”.
  • Cliquez sur “OK” pour confirmer.
  • Toujours depuis la même vue, effectuez un clic droit sur “Axis2 Web Services” puis choisissez “Configure…”. Cela devrait ouvrir une nouvelle fenêtre.

NetBeans_ConfigureAxis

  • Dans cette nouvelle fenêtre, sélectionnez les librairies que vous voulez intégrer lors du déploiement de votre service. Lors de son exécution, il n’y aura donc plus besoin de rechercher dans les divers répertoires prédéfinis.
  • Cliquez sur le bouton “OK” pour confirmer.
  • Déployez le service : les librairies seront intégrées à l’archive .AAR.
       

Problème de Timeout avec WinDev

En Java, définir le timeout du client n’est pas bien compliqué. Le blog de Singaram propose un exemple concret où il détermine un timeout au niveau du client (stub). L’image ci-dessous provient directement de son blog. Cliquez sur celle-ci afin de l’agrandir…

axis2 _stub

Pour notre client WinDev, nous avons essayé les autres méthodes qui consistent à éditer les délais directement dans le fichier “axis2.xml”, malheureusement cela n’a eu aucune influence. Pour remédier à ce problème, il suffit d’utiliser la fonction “HTTPRequête” qui reçoit en paramètre une URL Web. Nous appelons donc le Web Service de la même manière que dans un navigateur web, et la réponse obtenue est au format XML.

wsreturn

Dans ce cas, il faudra trouver une méthode pour laisser tomber les balises superflues. La première consiste à insérer vos propres balises dans la réponse et donc, à toujours renvoyer du texte. Il vous suffira alors d’extraire la partie de chaine qui vous intéresse avec un simple appel à “ExtraitChaine”. La seconde consisterait à utiliser les fonctions WLangage disponibles pour parcourir les documents XML. Nous n’avons pas encore testé cette deuxième solution.

Fonctions inaccessibles depuis l’extérieur

Dans la classe de votre Web Service, rien ne vous empêche d’utiliser des fonctions inaccessibles depuis l’extérieur. Soit vous utilisez des fonctions déclarées dans vos classes, qui sont compilées dans une librairie externe, sous forme d’archive .JAR par exemple, soit vous créez des fonctions de type “private” dans la classe associée au service.

Tableau statique de chaines

Dans le code Java du service, nous avons retourné un tableau de type String[] contenant deux chaines en première et deuxième position. Ce tableau peut contenir 20 chaines. La réponse du Web Service est la suivante :

getStringArrayResponse

Ainsi, avec de l’imagination et un peu de savoir-faire, tout en utilisant les requêtes HTTP, nous pourrions analyser le retour XML et redéfinir une variable “tableau de chaines” en WLangage. Reste à savoir la manière dont cela est retourné lorsqu’on utilise le service directement importé dans l’environnement WinDev…

Bon développement !

mercredi 1 mai 2013

[Smartphones] Samsung Galaxy S4 GT-I9505

Ca y est, le Samsung Galaxy S4 est à la vente depuis déjà quelques jours. Il arbore un design similaire à celui de son prédécesseur, le S3. Du côté des caractéristiques techniques, il est équipé d’un processeur Qualcomm Snapdragon 600 quadri-cœur cadencé à 1,9Ghz, de 2 Go de mémoire vive, d’un capteur photo rétro-éclairé de 13 Mégapixels, d’un écran Super Amoled Full HD de 5” (1920x1080). Ce smartphone est plutôt fin – 7,9 mm – et mesure 136,6 mm en hauteur et 69,8 mm en largeur. Placez l’ancien et le nouveau côte à côte : difficile de voir la différence.

GalaxyS4

Pour la connectivité, on retrouve le support de la 3G et de la 4G, du HSPA+, du Wi-Fi 802.11a/b/g/n/ac, du Bluetooth 4.0, un port Micro USB 2.0,  et la prise en charge du NFC. Il dispose également d’un port microSD/SDHC pour étendre la mémoire disponible. Actuellement, Samsung ne mentionne pas l’existence des modèles 32 et 64 GB, mais cela devrait venir prochainement. Enfin, le smartphone est équipé d’une batterie de 2600 mAh (contre 1 440 mAh pour l’iPhone 5), qui visiblement, selon le test du Journal du Geek, lui permettrait de tenir facilement la journée entière.

Niveau logiciel, c’est Android 4.2.2. Jelly Bean qui est installé, avec la surcouche TouchWiz UI bien connue. Samsung nous propose des fonctionnalités plutôt sympathiques telles que Smart Pause, qui permet de mettre automatiquement une vidéo en pause lorsqu’on détourne le regarde l’écran ; Dual Camera, pour prendre des photos en utilisant les deux capteurs (avant et arrière) en même temps ; ChatOn, une nouvelle application de messagerie avec partage de l’écran ; un tout nouveau traducteur texte et voix, qui pourra se rendre utile pour les voyageurs ; et encore bien d’autres…

Petite remarque intéressante : Gizmodo nous signale que sur la version 16 GB, il n’en resterait environ que 9 restants. Cela est sans aucun doute dû aux nombreuses applications pré-installées sur le système. Il faudra peut-être investir dans une carte mémoire ; heureusement, ces dernières sont peu couteuses !

Sachez qu’il est d’ores et déjà disponible à 649 euros, nu, sur le site de vente en ligne “Amazon”. En Belgique, l’opérateur Proximus le propose en précommande à 699 euros sans abonnement – en noir ou en blanc – et offre un kit d’accessoires si on effectue l’achat sur le web. Sachez que Mobistar propose exactement la même chose, au même prix.

Sources

Android
Clubic

Gizmodo
Le Journal du Geek
Le Monde
Samsung Mobile