accéder à un webservice

accéder à un webservice - Java - Programmation

Marsh Posté le 29-04-2009 à 16:20:35    

bonjour à tous !
 
Je programme gentiment mes pages JSP depuis un moment et tout roule.
Mais là, je rencontre une difficulté technique.
 
Je collabore avec une autre équipe qui doit me mettre à disposition des données que j'aurai à afficher. Cette équipe me les propose sous forme d'un accès à un webservice développé par leurs soins en .NET.
 
Dans mon souvenir, je suis certaine d'avoir à intégrer un package (framework ?) à mon code pour pouvoir utiliser les fonctions du WS, non ?
Mais ils n'ont aucun package à me proposer (l'intégration d'un WS avec Java c'est pas leur domaine).
Alors si vous pouviez m'éclaircir le concept de la connexion à un WS à partir d'une appli web java... ça m'aiderait...
(y'a pas un truc avec axis ? mais j'veux pas dire de conneries, je maitrise pas assez...)
Pour info, je bosse avec Tomcat.
 
merci de votre aide.

Reply

Marsh Posté le 29-04-2009 à 16:20:35   

Reply

Marsh Posté le 29-04-2009 à 16:48:41    

Oui il te faut une bibliothèque capable de "causer" en WS, Axis en est une très répandue. Tu as aussi JAX-WS.
 
Il suffit de te faire fournir le fichier WSDL correspondant au WS qu'on t'expose pour pouvoir générer automatiquement les classes et méthodes nécessaires à l'appel du WS. Ces outils de génération sont fournis avec les bibliothèques (et disponibles directement dans certains IDE comme Eclipse) : WSDL2java pour Axis par exemple...


Message édité par frabill le 29-04-2009 à 16:49:35
Reply

Marsh Posté le 29-04-2009 à 17:17:05    

ok, alors je récapitule...
 
j'ai bien un wsdl correspondant au WS, si j'utilise l'outil d'Eclipse "WSDL2java" ça va me générer un jar à inclure dans mon projet pour que je puisse appeler les méthodes de mon collègue ?

Reply

Marsh Posté le 29-04-2009 à 17:22:54    

cannelline a écrit :

ok, alors je récapitule...
 
j'ai bien un wsdl correspondant au WS, si j'utilise l'outil d'Eclipse "WSDL2java" ça va me générer un jar à inclure dans mon projet pour que je puisse appeler les méthodes de mon collègue ?


 
Oui et après ça sera transparent pour toi quand tu vas appeler les méthodes en java. il faut bien sûr inclure dans ton projet la bibliothèque WS (et ses dépendances) et ces squelettes générés par WSDL2java.
 
Et modifier à la main dans le squelette le "endpoint" (l'URL du WS) ou régénérer automatiquement les squelettes si le WS change d'adresse.


Message édité par frabill le 29-04-2009 à 17:24:24
Reply

Marsh Posté le 29-04-2009 à 17:25:07    

merciiii ;)
 
faut que je teste tout ça.

Reply

Marsh Posté le 29-04-2009 à 17:50:25    

alors, je n'ai pas trouvé de "wsdl2java" dans ma version d'eclipse (Europa) mais j'ai fait import/webservice. Il me demande le lien vers un wsil et vers le wsdl. J'ai crée un wsil vide en local et j'ai linké mon wsdl (avec l'adresse du webservice.asmx?WSDL) et j'obtiens l'erreur : IWAB0453E Error writing WSIL (il reconnait pas le path local). Donc il doit vouloir un vrai wsil que je n'ai pas  :heink:  ?

Reply

Marsh Posté le 29-04-2009 à 18:00:00    

Passe en Eclipse 3.4 si tu n'as pas de contraintes, il me semble que c'est mieux au niveau de la génération automatique de code client WS.
 
Sinon avec Axis, tu as ça en ligne de commande : http://ws.apache.org/axis2/1_4_1/u [...] ateclients


Message édité par frabill le 29-04-2009 à 18:02:07
Reply

Marsh Posté le 29-04-2009 à 21:47:10    

ok, j'ai essayé de passer par Axis et j'ai bien généré 2 fichiers java :
org/monpackage/ServiceCallBackHandler.java
org/monpackage/ServiceStub.java
 
mais en voulant les compiler, J'ai une erreur (plein en fait) sur le second parce que "org.apache.axis2.*****" n'est pas reconnu.
J'ai regardé dans ce que j'ai téléchargé d'axis et je n'ai aucune structure qui ressemble à ça (au cas où il faudrait la mettre dans le classpath).
 
une idée ?

Reply

Marsh Posté le 29-04-2009 à 23:19:03    

Regarde bien si tu as Axis 2 et non Axis tout court...  
 
Mais il faut bien mettre le jar d'Axis 2 (et ses dépendances). Sauf erreur de packaging (ou de l'outil) dans leur livraison, il doit bien y avoir du org.apache.axis2.* quelque part (de mémoire)

Reply

Marsh Posté le 05-05-2009 à 19:07:54    

merci beaucoup pour ton aide.
Alors comme j'utilise la version MyEclipse d'Eclipse, la v7 ne tourne pas sous Ubuntu 64bits (une NPE à chaque fois que je tape une lettre de code :pfff: )
 
Bref, j'ai réussi à générer mon client avec ma version actuelle (menu contextuel du wsdl dans l'arborescence  du projet). Maintenant, il faut que je réussisse à utiliser tout cela à bon escient.  
 
merci encore pour m'avoir bien éclairée sur le sujet.

Reply

Marsh Posté le 05-05-2009 à 19:07:54   

Reply

Marsh Posté le 11-05-2009 à 14:24:34    

bon, j'ai quelques erreurs à la génération... mais je ne pense pas que ça pose pb...
 
MyEclipse utilise JAX-WS pour générer le client, et voici les classes que j'obtiens :  
-HelloWorld.java (empty class)
-HelloWorldResponse.java
-ObjectFactory.java
-package-info.java
-Ws1.java
-Ws1HttpGet.java (interface)
-Ws1HttpPost.java (interface)
-Ws1Soap.java
-WsEcho.java
-WsEchoResponse.java  
 
Mais j'ai beau retourner le pb dans tous les sens, je ne vois pas quel objet instancier pour me connecter...
Je devrais avoir acces à 2 methodes :
-helloworld qui retourne la chaine "HelloWorld"
-echo qui retourne la chaine mise en parametre
 
tout ce que j'ai fait a l'ai de ne fonctionner qu'en local.
 

Code :
  1. HelloWorldResponse hw_obj = new HelloWorldResponse();
  2. hw_obj.setHelloWorldResult("test hello world" ); // if I don't set the
  3. result, I have "null"
  4. String testhw = hw_obj.getHelloWorldResult();
  5. out.println("TEST HW : " + testhw);
  6. //this one displays "test echo"
  7. WsEchoResponse echo_obj = new WsEchoResponse();
  8. echo_obj.setWsEchoResult("test echo" );
  9. String testecho = echo_obj.getWsEchoResult();
  10. out.println("TEST ECHO : " + testecho);


 
je dois instancier autre chose pour etre en mode "connecté" ?
 
Les gens qui ont fait ce webservice (en .NET) ne savent pas m'aiguiller là dessus (java c'est pas leur truc) mais me conseillent de ne pas utiliser SOAP... ça veut dire quoi ?
 
merci d'avance.

Reply

Marsh Posté le 11-05-2009 à 14:33:05    

Il faut regarder le contenu de toutes les classes java qui ont été générées, tu devrais pouvoir rapidement trouver ce que tu dois appeler/instancier (sauf si les erreurs sont importantes et indiquent que toutes les classes n'ont pas été générées). Il y a sûrement des trucs intéressants dans ton ObjectFactory.java qui te permettent d'instancier le bon objet.
Essaie de localiser la classe qui contient l'URL de ton WS, c'est elle qui utilisera les les objets et fera l'appel effectif en soap (Ws1Soap.java  ?)
 
Je ne vois pas comment tu pourrais éviter d'utiliser du SOAP en faisant du WS classique, c'est le format de message par défaut... Ou alors c'est du REST et là je ne maitrise pas...


Message édité par frabill le 11-05-2009 à 14:38:03
Reply

Marsh Posté le 11-05-2009 à 17:37:17    

selon eux...
en faisant https://lien.du.webservice.asmx/HelloWorld ça pointe vers une page XML contenant la string "hello world"
et https://lien.du.webservice.asmx/ws_echo?strEcho=blabla ça pointe vers une page XML contenant la string "blabla"
 
mais dans ce cas, pas besoin de client ?? c'est ça que je comprends pas.

Reply

Marsh Posté le 11-05-2009 à 17:45:16    

cannelline a écrit :

selon eux...
en faisant https://lien.du.webservice.asmx/HelloWorld ça pointe vers une page XML contenant la string "hello world"
et https://lien.du.webservice.asmx/ws_echo?strEcho=blabla ça pointe vers une page XML contenant la string "blabla"
 
mais dans ce cas, pas besoin de client ?? c'est ça que je comprends pas.


 
OK donc apparemment il ne faut pas interroger le WS en SOAP, ça serait du WS "REST"... Je n'ai pas d'expérience avec ce genre de WS, je ne sais pas quelles sont les bonnes pratiques et les bons outils pour ça
 
http://fr.wikipedia.org/wiki/REST
 
http://www.google.fr/search?q=java [...] =firefox-a

Reply

Marsh Posté le 11-05-2009 à 17:55:16    

ok merci  :bounce:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed