Axis2 dans servlet
Le
1 connu

Bonjour,
J'ai fait une servlet qui accède à un WebService utilisant Axis2. En dev. ca ce passe bien.
Je l'ai mis sur un serveur Tomcat et j'ai l'erreur suivante :
java.lang.Error: Unresolved compilation problem:
The type org.apache.axis2.AxisFault cannot be resolved. It is indirectly referenced from required .class files
Pourtant la classe se trouve bien dans axis2-kernel-1.5.jar qui est bien présent dans /context/WEB-INF/lib.
Merci pour toute aide
J'ai fait une servlet qui accède à un WebService utilisant Axis2. En dev. ca ce passe bien.
Je l'ai mis sur un serveur Tomcat et j'ai l'erreur suivante :
java.lang.Error: Unresolved compilation problem:
The type org.apache.axis2.AxisFault cannot be resolved. It is indirectly referenced from required .class files
Pourtant la classe se trouve bien dans axis2-kernel-1.5.jar qui est bien présent dans /context/WEB-INF/lib.
Merci pour toute aide
"1 connu"
Je ne sais pas si ça va aider, mais a priori le message signale une
erreur de *compilation*. Ca voudrait dire qu'il n'a pas pu compiler
ton code parce qu'il ne trouvait pas la classe au moment de la
compilation (et non dans l'appli déployée). Donc normalement tu
devrais avoir une erreur de compilation signalée par ton EDI dans la
classe concernée, revérifie.
Et sinon je sais pas désolé. Mais ça ne ressemble pas à un message de
classe/jar manquant lors de l'exécution (ClassNotFoundException ou
quelque chose du genre).
Euh... tout ça si je ne dis pas de bêtise et qu'il n'est pas en train
d'essayer de compiler quelque chose dans l'appli déployée. Je ne
connais pas Axis, est-ce qu'il est censé compiler quelque chose la
première fois que tu utilises la classe fautive (celle qui indique
une erreur) ? Dans la pile d'appel, est-ce bien un de tes classes qui
signale l'erreur ou est-ce une classe d'Axis, qui pourrait se trouver
dans un autre jar ?
J'ai pas d'erreur de compilation sur ma machine de dev.
Je ne connais rien à Axis (sacré usine à gaz) mais je suis une API fourni par le fournisseur du WebService
http://eutils.ncbi.nlm.nih.gov/entrez/query/static/esoap_java_help.html
c'est la ligne EFetchPubmedServiceStub service = new EFetchPubmedServiceStub();
qui plante dans l'exemple "Using WebEnv & QueryKey example"
J'ai placé l'équivalent de ce code dans le doGet de ma servlet.
Pierre
"Yliur" Le Tue, 3 Nov 2009 17:10:17 +0100
"1 connu"
Je ne sais pas si ça va aider, mais a priori le message signale une
erreur de *compilation*. Ca voudrait dire qu'il n'a pas pu compiler
ton code parce qu'il ne trouvait pas la classe au moment de la
compilation (et non dans l'appli déployée). Donc normalement tu
devrais avoir une erreur de compilation signalée par ton EDI dans la
classe concernée, revérifie.
Et sinon je sais pas désolé. Mais ça ne ressemble pas à un message de
classe/jar manquant lors de l'exécution (ClassNotFoundException ou
quelque chose du genre).
Euh... tout ça si je ne dis pas de bêtise et qu'il n'est pas en train
d'essayer de compiler quelque chose dans l'appli déployée. Je ne
connais pas Axis, est-ce qu'il est censé compiler quelque chose la
première fois que tu utilises la classe fautive (celle qui indique
une erreur) ? Dans la pile d'appel, est-ce bien un de tes classes qui
signale l'erreur ou est-ce une classe d'Axis, qui pourrait se trouver
dans un autre jar ?
"1 connu"
As-tu la pile complète (au moins le dessus de la pile, jusqu'à la
ligne que tu cites) ?
"1 connu"
Si PubMedServlet est ta Servlet, effectivement on n'apprend pas grand
chose...
Tu as bien regardé s'il n'y avait pas des problèmes de compilation au
niveau du projet (des bibliothèques non trouvées, ...) ? Par exemple
dans Eclipse ça apparaît dans le fenêtre des "Problèmes", sans
affecter de classes particulières. Parfois ça empêche la
recompilation de certaines classes me semble-t-il...
Le jar d'Axis que tu as mis dans ton appli, c'est la version officielle
non modifiée ? Est-ce que toutes tes bibliothèques Axis sont dans
l'appli et rien au niveau du serveur Tomcat ? Et le jar que tu
déploies, c'est exactement le même que celui que tu as en
développement ? Tu poses l'appli telle quelle dans le Tomcat de
"production" et ça ne marche plus ou tu utilises une procédure de
déploiement plus compliquée ?
Et en mettant les bibliothèques d'Axis au niveau de Tomcat plutôt que
dans les bibliothèques de l'appli ?
D'après le message on dirait que c'est la classe que tu utilises qui
est mal compilée (si ce n'est pas ton projet ; tu n'utilises ni ne
références jamais le classe org.apache.axis2.AxisFault dans ta
Servlet ?).
Ou alors Axis compile des trucs la première fois qu'il en a besoin et
quelque chose s'est mal passé parce qu'il n'a pas trouvé les
bibliothèques nécessaires. Et il n'y a rien dans les journaux de
Tomcat (ou d'Axis, s'il écrit dans ses propres journaux) ?
A vérifier dans la doc de Tomcat ou en faisant un essai, mais
justement je crois que les bibliothèques partagées sont prioritaires.
Tu dis que tu ne peux rien modifier en prod, mais tu peux peut-être
récupérer le répertoire common qui se trouve là-bas et le mettre chez
toi ? Ca te permettra de voir si le problème apparaît à ce moment et
de faire des tests plus proches de la réalité chez toi (ça peut ê tre
dans un deuxième Tomcat, séparé de celui que tu utilises pour le
développement).
"1 connu"
Et tu ne peux pas récupérer tout le Tomcat de production chez toi
pour un test, histoire d'être sûr ? Ca pourrait être un autre jar ?
Il faudrait être certain d'avoir la même version de Tomcat, la même
configuration ($TOMCAT/conf) et les mêmes bibliothèques
($TOMCAT/common, je crois que c'est tout mais pas certain...). Et
d'utiliser la même procédure de déploiement.
Pour le "1er qui tire" je ne pense pas, il me semble qu'il y a un ordre
précis pour rechercher les classes et que chaque appli peut utiliser
des classes différentes (un chargeur de classe différent pour chaque
appli web)
Tu as essayé de recopier tout ça dans ton Tomcat de développement ? Il
se peut que ça soit là-dedans et que tu l'aies manqué quand tu as
simplement recopié deux jars.