OVH Cloud OVH Cloud

Javamail et Tomcat : probleme avec la classe SharedByteArrayInputStream

4 réponses
Avatar
cfranco
Bonjour à tous,

J'ai un soucis dans l'utilisation de Javamail dans une servlet Tomcat
(avec Tapestry, le but étant que l'application web que je développe
envoie automatiquement un email à l'utilisateur à certaines occasions).

J'ai le problème suivant : tout se passe comme si la classe
com.sun.mail.util.SharedByteArrayInputStream est introuvable. Tomcat me
renvoie l'erreur : "java.lang.NoClassDefFoundError
com/sun/mail/util/SharedByteArrayInputStream" lorsqu'il exécute
l'instruction suivante :

MimeMessage message = new MimeMessage(session);

J'ai repris mot pour mot un exemple d'envoi d'email de la doc de
javamail.

Bien sûr, j'ai vérifié mon Classpath, et la classe
com.sun.mail.util.SharedByteArrayInputStream est bien dedans, elle est
dans le fichier mail.jar qui est avec tous mes autres JARs que
j'utilise. D'ailleurs, le reste des classes de ce fichier est bon.

Ce qui m'inquiète, c'est qu'en cherchant sur le web, je me rend compte
que je ne suis pas le seul à avoir ce problème... Pas mal de gens ont
exactement la même erreur dans la même configuration que moi (c'est à
dire avec Tomcat), mais constatent que le même code hors d'une servlet
fonctionne parfaitement ! Et jusqu'à présent je n'ai vu personne arriver
à comprendre la raison du problème, ni à en trouver une solution.

Quelqu'un a une idée de ce que je peux faire ?

--
Christophe Franco

4 réponses

Avatar
Symon
On utilise la même configuration ici (javamail / tomcat) et on n'a pas
eu ce problème.

Vérifie bien que tu as bien une seule version de
SharedByteArrayInputStream (la mienne est dans mail.jar)... Peut être
que tu en as deux et que la "mauvaise" version est placée avant
l'autre dans ton Classpath... Ca expliquerait tout.

Bon courage !

Symon
Avatar
cfranco
Symon wrote:

On utilise la même configuration ici (javamail / tomcat) et on n'a pas
eu ce problème.


Les dernières versions de l'un comme de l'autre ? Les JAR sont
d'origine, pas de recompilation ou de décompression ?

Vérifie bien que tu as bien une seule version de
SharedByteArrayInputStream (la mienne est dans mail.jar)... Peut être
que tu en as deux et que la "mauvaise" version est placée avant
l'autre dans ton Classpath... Ca expliquerait tout.


J'ai un peu fouillé aussi, j'ai pensé à ça, mais j'ai pas trouvé. Je
vais rechercher encore une fois pour être bien sûr.

--
Christophe Franco

Avatar
jerome moliere
Christophe Franco wrote:

Symon wrote:


On utilise la même configuration ici (javamail / tomcat) et on n'a pas
eu ce problème.



Les dernières versions de l'un comme de l'autre ? Les JAR sont
d'origine, pas de recompilation ou de décompression ?


Vérifie bien que tu as bien une seule version de
SharedByteArrayInputStream (la mienne est dans mail.jar)... Peut être
que tu en as deux et que la "mauvaise" version est placée avant
l'autre dans ton Classpath... Ca expliquerait tout.



J'ai un peu fouillé aussi, j'ai pensé à ça, mais j'ai pas trouvé. Je
vais rechercher encore une fois pour être bien sûr.

bonjour christophe,

peux tu faire quelques tests:
- lancer tomcat en verbose de maniere a tracer les chargements de
classes ? (cf options de java)
- prendre ton meme code et le tester soous un jboss/tomcat je ne serai
pas etonne qu'il fonctionne
- si t'en arrives a ce point, il faudra faire dans le crade car tu auras
un porbleme subtil de classloader avec tomcat:
* repackager l'appli
* distribuer ton mail.jar dans jre/common/endorsed ou dans celui de tomcat

HTH
Jerome

--
Auteur cahier du programmeur Java tome 2 - Eyrolles 10/2003
http://www.eyrolles.com/php.informatique/Ouvrages/ouvrage.php3?ouv_ean13—82212111941


Avatar
cfranco
jerome moliere wrote:

bonjour christophe,
peux tu faire quelques tests:
- lancer tomcat en verbose de maniere a tracer les chargements de
classes ? (cf options de java)
- prendre ton meme code et le tester soous un jboss/tomcat je ne serai
pas etonne qu'il fonctionne
- si t'en arrives a ce point, il faudra faire dans le crade car tu auras
un porbleme subtil de classloader avec tomcat:
* repackager l'appli
* distribuer ton mail.jar dans jre/common/endorsed ou dans celui de tomcat


J'avais trouvé entre temps, c'est ce dernier point, mail.jar dans
tomcat/common/lib plutôt qu'avec les autres JARs...

--
Christophe Franco