Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2712 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Consommer un webservice en Java

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Consommer un webservice en Java

n°2033746
stoicism
Not quite my tempo.
Posté le 03-11-2010 à 11:01:01  profilanswer
 

Hello,
 
Voilà, j'ai une appli qui tourne déjà en Java, que je reprends, et je débute. Bon, faire des évolutions dans l'existant (sous Eclipse), ça va encore. Par contre, là, je dois consommer un webservice (j'ai donc un wsdl à une URL) et je galère...
Je me tape depuis 2 jours des docs sur Metro, Jax-WS, Axis, CXF, etc... Mais j'hallucine, j'entrave que dalle. J'ai juste besoin de consommer ce webservice, et j'ai des packages selon que ce soit Metro ou Axis qui sont énormes.
 
De quoi ai-je besoin à minima pour consommer ce webservice ? Je me vois mal déployer 5+ Mo de packages pour 5 méthodes appelées...

mood
Publicité
Posté le 03-11-2010 à 11:01:01  profilanswer
 

n°2033851
stoicism
Not quite my tempo.
Posté le 03-11-2010 à 17:12:40  profilanswer
 

Toujours dans la recherche, j'en conclus surtout que pour l'instant c'est un peu la jungle. Déjà que j'étais pas très chaud pour cette techno (Java), c'est, dans cette aventure d'un client webservice, un pas de plus dans mes convictions. Bref.
 
J'ai donc creusé un peu plus, et essayé plusieurs "outils" comme wsimport ou wsdl2java qu'on trouve dans les distribs de Jax-WS ou encore Axis2.
 
Pour wsimport, deux choses :
- suivant que j'utilise celui de Metro ou celui d'Axis, je n'ai pas les mêmes erreurs ou messages d'info (mais bon, c'est tellement "carré" Java...).
- à priori, le webservice que j'attaque a des noms redondants, genre TrucBidule et TrucBIDULE, hors sous windows, impossible de générer quoique ce soit avec des noms similaires. Il existe bien à priori une option -B-XautoChaisPlusQuoi, mais elle ne fait rien (super !).
 
J'ai donc tenté le wsdl2java d'Axis2. Je télécharge le zip, j'unzip, en ligne de commande je fais mon wsd2java... Ok il me génère deux fichiers Java, dont un Stub de plus d'un Mo. Soit... Je les inclus dans mon projet sous Eclipse, et forcément j'ai plein d'erreurs. En cherchant avec jarfinder.com les références aux jar qu'il me manque, je fini par ne plus avoir d'erreurs, par contre le Stub java est imbitable, c'est juste goret de générer un truc pareil; alors je pourrais m'en contenter, mais je pense à ceux qui passeront derrière moi : donc c'est niet.
 
Là, en tripatouillant un peu (oui, je débute et sur Java et sur Eclipse), je m'aperçois que via un File > New > Other > Web Service Client, je peux générer quelque chose. Je tente donc l'affaire mais sans plus de résultats, j'ai une belle erreur du genre

Code :
  1. IWAB0399E Error in generating Java from WSDL:  java.io.IOException: <input ..>, <output ..> or <fault ..> in <portType> with undefined message found. message name is '{http://mon_url}UneEntree'
  2.     java.io.IOException: <input ..>, <output ..> or <fault ..> in <portType> with undefined message found. message name is '{http://mon_url/}UneEntree'
  3.     at org.apache.axis.wsdl.symbolTable.SymbolTable.ensureOperationMessageValid(SymbolTable.java:504)
  4.     at org.apache.axis.wsdl.symbolTable.SymbolTable.ensureOperationValid(SymbolTable.java:520)
  5.     at org.apache.axis.wsdl.symbolTable.SymbolTable.ensureOperationsOfPortTypeValid(SymbolTable.java:610)
  6.     at org.apache.axis.wsdl.symbolTable.SymbolTable.populatePortTypes(SymbolTable.java:630)
  7.     at org.apache.axis.wsdl.symbolTable.SymbolTable.populate(SymbolTable.java:783)
  8.     at org.apache.axis.wsdl.symbolTable.SymbolTable.add(SymbolTable.java:583)
  9.     at org.apache.axis.wsdl.symbolTable.SymbolTable.populate(SymbolTable.java:538)
  10.     at org.apache.axis.wsdl.symbolTable.SymbolTable.populate(SymbolTable.java:595)
  11.     at org.apache.axis.wsdl.gen.Parser$WSDLRunnable.run(Parser.java:367)
  12.     at java.lang.Thread.run(Unknown Source)


D'enfer !
Bref, toujours pas de solution. Je n'abandonne pas.
Merci si certains ont quelque info que ce soit.

Message cité 1 fois
Message édité par stoicism le 03-11-2010 à 17:13:48
n°2033893
el muchach​o
Comfortably Numb
Posté le 03-11-2010 à 20:12:19  profilanswer
 

Je ne suis pas un grand fan des générateurs de code, mais le code généré n'est pas fait pour être lu. Il est fait pour être généré et exécuté. Autrement dit, les gens qui passeront derrière toi iront modifier le WSDL et regénéreront s'il le faut, et en aucuns cas n'iront modifier le code généré.


---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
n°2033942
stoicism
Not quite my tempo.
Posté le 04-11-2010 à 09:21:34  profilanswer
 

Après essai via l'outil de génération d'Eclipse, mais cette fois sur un autre webservice, dont le wsdl semble plus "carré", ça marche. Et mieux, le code généré est "lisible".
Bon, reste à voir avec ceux qui fournissent l'autre, celui qui m'intéresse...

n°2034309
sircam
I Like Trains
Posté le 05-11-2010 à 17:19:14  profilanswer
 

stoicism a écrit :

Déjà que j'étais pas très chaud pour cette techno (Java), c'est, dans cette aventure d'un client webservice, un pas de plus dans mes convictions.


[:delarue5]
 

stoicism a écrit :

suivant que j'utilise celui de Metro ou celui d'Axis, je n'ai pas les mêmes erreurs ou messages d'info (mais bon, c'est tellement "carré" Java...).


Tu confonds un peu tout. Ce sont les webservices qui peut-être puent encore en 2010, comme si on n'avait rien appris depuis 2000. Tu trouveras les mêmes divergences avec des librairies en dehors de Java (.NET, ...). Les webservices sont supposés être indépendants du langage justement, mais chacun y va avec son idée d'implémentation pas forcément compatible avec les autres. Ce n'est pas la faute du langage sous-jacent.
 
Je n'ai utilisé que IntelliJ pour les webservices, pas Eclipse, et je dois dire que ça fonctionne out-of-ze-boite, comme une lettre à la poste pour consommer du WS sur base d'un WSDL.
 
Je te dirais de te méfier de JAX-WS si tu dois commencer à créer un WS et que tu comptes le customiser : autant j'ai été surpris par la facilité à mettre en oeuvre un WS, autant sa customization s'est révélée affreusement piégeuse. Mais ici, tu ne fais que consommer.
 

stoicism a écrit :

Je les inclus dans mon projet sous Eclipse, et forcément j'ai plein d'erreurs. En cherchant avec jarfinder.com les références aux jar qu'il me manque, je fini par ne plus avoir d'erreurs, par contre le Stub java est imbitable, c'est juste goret de générer un truc pareil; alors je pourrais m'en contenter, mais je pense à ceux qui passeront derrière moi : donc c'est niet


"forcément j'ai plein d'erreurs" -> attitude hautement négative :)
 
Et ne t'inquiète pas pour le code auto-généré. Tout le monde s'en fiche. Le but est de gagner en productivité, de générer et de ne plus le regarder. Le suivant utilisera son IDE / GUI pour générer un autre stub en cas de mise à jour et tout se passera pour le mieux. Franchement, se farcir ce genre de code à la main, c'était parfois une fatalité il y a dix ans mais en 2010, je perdrais pas mon temps.
 
Fais peut-être voir le WSDL. Il a peut-être une sale gueule de FUBAR ce qui pourrait expliquer en partie le peu d'entrain de ton IDE pour pauvres qui ne veulent pas mettre 200 misérables euros pour se payer IntelliJ.
 

Spoiler :

Fraïdaÿ troll  [:cmshadow]


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°2034328
stoicism
Not quite my tempo.
Posté le 05-11-2010 à 18:53:06  profilanswer
 


Ouais ok, j'avoue j'suis de mauvaise fois quand ça m'agace  [:stoicism]  

sircam a écrit :


Tu confonds un peu tout. Ce sont les webservices qui peut-être puent encore en 2010, comme si on n'avait rien appris depuis 2000. Tu trouveras les mêmes divergences avec des librairies en dehors de Java (.NET, ...). Les webservices sont supposés être indépendants du langage justement, mais chacun y va avec son idée d'implémentation pas forcément compatible avec les autres. Ce n'est pas la faute du langage sous-jacent.
 
Je n'ai utilisé que IntelliJ pour les webservices, pas Eclipse, et je dois dire que ça fonctionne out-of-ze-boite, comme une lettre à la poste pour consommer du WS sur base d'un WSDL.
 
Je te dirais de te méfier de JAX-WS si tu dois commencer à créer un WS et que tu comptes le customiser : autant j'ai été surpris par la facilité à mettre en oeuvre un WS, autant sa customization s'est révélée affreusement piégeuse. Mais ici, tu ne fais que consommer.
 


Passé mon énervement, avec un webservice de la boite qui semble être correct, avec l'outil de génération d'un client sous Eclipse (en fait c'est Axis derrière si j'en crois les jar qui s'ajoutent au projet), ça fonctionne et ça génère des trucs lisibles. Pour celui que je dois vraiment attaquer, je ne l'ai plus sous la main (il est par terre quoi...) et donc j'ai tenté de le faire en "local" mais Eclipse (3.3.3) plante. Ok j'essaierais donc de voir pourquoi le plugin (WTP?) déconne et le monter de version, ou alors carrément upgrade le client Eclipse. Mais j'ai peur des noms des éléments, cf une remarque dans un de mes posts au dessus concernant trucBidule et trucBIDULE où un wsimport ralait.

sircam a écrit :


"forcément j'ai plein d'erreurs" -> attitude hautement négative :)
 
Et ne t'inquiète pas pour le code auto-généré. Tout le monde s'en fiche. Le but est de gagner en productivité, de générer et de ne plus le regarder. Le suivant utilisera son IDE / GUI pour générer un autre stub en cas de mise à jour et tout se passera pour le mieux. Franchement, se farcir ce genre de code à la main, c'était parfois une fatalité il y a dix ans mais en 2010, je perdrais pas mon temps.
 
Fais peut-être voir le WSDL. Il a peut-être une sale gueule de FUBAR ce qui pourrait expliquer en partie le peu d'entrain de ton IDE pour pauvres qui ne veulent pas mettre 200 misérables euros pour se payer IntelliJ.
 

Spoiler :

Fraïdaÿ troll  [:cmshadow]



Je sens qu'effectivement le WSDL va être moche, même si je débute, je sens le truc foirax. Mais c'est pas grave, quitte à le modifier moi meme en local et déjà pouvoir bidouiller...
Après on verra...

n°2034416
chdams1976
Posté le 06-11-2010 à 15:28:51  profilanswer
 

Bonjour,
 
J'ai pour ma part utilisé le plugin maven de generation de code  
http://cxf.apache.org/docs/maven-c [...] -java.html, qui marche très bien.
J'ai eu également un conflit sur la casse d'un des elements générés , mais  pour cà  il y a possibilité de compléter le wsdl par des extensions xml , je crois que ca s'appele  "WSDL Binding" et permet ainsi de renommer un des elements lors de la generation par exemple . Je posterai le detail de ce binding si je le retrouve.
J'avoue que j'ai un peu galéré également pour trouver une solution simple, et pourtant j'ai une longue expérience en java.

n°2034662
stoicism
Not quite my tempo.
Posté le 08-11-2010 à 14:07:01  profilanswer
 

Oui voilà, j'avais également aperçu la possibilité de faire du binding, mais j'avoue que déjà pour le xml simple, j'en suis au stade "décorticage d'infos".
D'ailleurs pour illustrer le problème, voilà ce que j'ai dans ce fichier (wsdl2java ou la génération au travers d'Eclipse - qui s'avérerait être aussi wsdl2java par Axis ?), en gras ce qu'il me ressort comme chaîne posant un problème, je pense particulièrement à ce qui est en gras rouge, vu que l'erreur est à priori qu'il ne peut pas créer 2 fichiers du même nom, ne gérant pas la casse... :

Code :
  1. <xs:complexType name="retourF1">
  2.   <xs:sequence>
  3.    <xs:element minOccurs="0" name="chaine1" type="xs:string" />
  4.    <xs:element minOccurs="0" name="testMAX" type="tns:testMAX" />
  5.    <xs:element minOccurs="0" name="testMIN" type="tns:testMin" />
  6.   </xs:sequence>
  7.   </xs:complexType>
  8.  
  9.   <xs:complexType name="testMin">
  10.   <xs:sequence>
  11.    <xs:element minOccurs="0" name="chaine2" type="tns:schaine2" />
  12.    <xs:element minOccurs="0" name="chaine3" type="tns:schaine3" />
  13.    <xs:element minOccurs="0" name="testMin" type="tns:testMIN" />
  14.   </xs:sequence>
  15.   </xs:complexType>
  16.  
  17.   <xs:simpleType name="testMIN">
  18.   <xs:restriction base="xs:string">
  19.    <xs:enumeration value="ERREUR" />
  20.   </xs:restriction>
  21.   </xs:simpleType>


Ce qui m'amène à une question : n'y a-t-il pas de conventions de nommage ? Je cherche en ce moment sur w3schools, mais pas d'info pour l'instant.

n°2034728
stoicism
Not quite my tempo.
Posté le 08-11-2010 à 15:47:36  profilanswer
 

sircam a écrit :


Tu confonds un peu tout. Ce sont les webservices qui peut-être puent encore en 2010, comme si on n'avait rien appris depuis 2000.


Juste pour ma culture gé, pourquoi tu dis que ça pue en 2010 ?

n°2035155
stoicism
Not quite my tempo.
Posté le 10-11-2010 à 09:28:45  profilanswer
 

A défaut d'avoir trouvé quelque chose sur le binding qui va dans le sens de ma demande, j'ai simplement renommé testMIN en testMIN_ dans le WSDL, généré au travers d'Eclipse, puis re-changé la chaîne à l'inverse dans les méthodes qui font appel à cet élément du WSDL.

mood
Publicité
Posté le 10-11-2010 à 09:28:45  profilanswer
 

n°2035482
sircam
I Like Trains
Posté le 11-11-2010 à 20:15:31  profilanswer
 

stoicism a écrit :


Juste pour ma culture gé, pourquoi tu dis que ça pue en 2010 ?


Parce que je trouve les webservices encore peu commodes à utiliser aujourd'hui.
 
Il y a dix ans, bon, on y allait sans être hyper productif, les outils n'étaient pas intégrés, pas matures, c'était parfois fragile, et on faisait avec. Là j'ai l'impression qu'on s'emmerde un peu avec les mêmes âneries et j'attends mieux que ça à l'heure actuelle. C'est moins pire, il y a pas mal de choses qui fonctionnent d'un click dans l'IDE mais dès qu'on sort un peu de l'exemple simple, ça devient vite pénible et on retombe dans les même travers qu'avant.
 
Mais c'est juste mon impression. [:pingouino]


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Consommer un webservice en Java

 

Sujets relatifs
Compter le nombre de fois ou le meme mot apparait ?Faire le calcul de moyenne en Java
Applet Java de tranfert de fichiers via sshCompiler et exécuter HelloWorld.java
SAX pour Java - écriture d'un fichier HTML[Apprentissage] Passage de Java à C#
premiers pas sur javaexp reguliere java
Comment associer une action à un bouton en java? 
Plus de sujets relatifs à : Consommer un webservice en Java


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR