2013-08-12 16 views
9

Ich habe diesen Fehler erhalten, als ich versuchte, den folgenden Code auszuführen, um ein javax.mail.Session-Objekt mithilfe einer Tomcat-Kontextdatei zu erhalten .java.lang.ClassCastException: javax.mail.Session kann nicht in javax.mail.Session umgewandelt werden

 Context initCtx = new InitialContext(); 
     Context envCtx = (Context) initCtx.lookup("java:comp/env"); 
     Session session = (javax.mail.Session) envCtx.lookup("mail/session"); 

Dies ist die Ressourcendeklaration in der Datei context.xml.

<Resource name="mail/Session" auth="Container" 
     type="javax.mail.Session" 
     mail.smtp.host="host" 
     mail.smtp.user="user" 
     mail.smtp.password="password" 
     mail.smtp.auth="false"/> 

Ich verstehe dies zurückzuführen sein kann ich in meiner Anwendungsserver-Bibliothek (tomcat) Ordner und in meinen Anwendungen Bibliotheksordner die gleiche Bibliothek für die javax.mail.Session mit, ich habe so viele doppelten Bibliotheksdateien beseitigt Aus meinem Ordner der Anwendungsbibliothek (zB mail.jar), den ich sehen kann, habe ich die javax.mail.Session als Teil der Bibliothek, jetzt bin ich an einem Punkt, wo ich immer noch diesen Fehler bekomme und nicht sicher bin, was andere Bibliotheken sein könnten die Quelle dieses Problems, oder ist es ein anderes Problem, das mir nicht bekannt ist?

Was würden die Leute vorschlagen, um die Ursache dieses Problems zu finden?

Danke.

+0

Stellen Sie sicher, dass Sie Tomcat neu starten. Wenn die Ausnahme noch immer ausgelöst wird, haben Sie einen Ort verpasst, an dem sich javax.mail.Session noch befindet. – Henry

+7

Ich kenne die genaue Lösung für Ihr Problem nicht, aber einen weiteren Grund, warum es auftreten könnte (für Sie) - Die javax.mail.Session wird von 2 verschiedenen Klassenladern geladen – serejja

+0

Verwenden Sie Maven? –

Antwort

16

Dieses Problem tritt in dem Server, da die lib von Tomcat und sowohl Sie als Anwendung ihre eigene Kopie von mail.jar haben (in WEB-INF/lib), so dass die Klassenladeprogramme können zwei verschiedene Session.If laden Sie die mail.jar löschen von Ihrem Anwendung wird dieses Problem gelöst.

+0

Eine andere Situation: Bei Verwendung von Maven könnte die in Konflikt stehende mail.jar importiert werden, indem eine indirekte Abhängigkeit von einer der direkten Abhängigkeiten in der Pom verwendet wird. In diesem Fall müssen Sie die indirekte Abhängigkeit aufspüren und einen 'Ausschlüsse/Ausschluss' verwenden, um zu verhindern, dass die indirekte Abhängigkeit einbezogen wird. –

1

Gebrauch zur Verfügung gestellt Umfang in Maven javax.mail Mail 1.4 bereitgestellt

1

Wenn Sie bereits die mail.jar im lib Ihres Servers haben, die es aus Ihrer Anwendung/pom-Datei zu löschen, Dieses Problem wird gelöst.

+0

Dieser Kommentar hat mir geholfen, mein Problem zu lösen – Scott

4

Du bist wahrscheinlich nicht mit mehr dieses Problem, aber für die nächste Person, hierher zu kommen:

Wenn Sie Maven verwenden, <scope>provided</scope> auf Ihre javax.mail Abhängigkeit in pom.xml hinzufügen.

Zum Beispiel in meinem Fall:

<dependency> 
    <groupId>javax.mail</groupId> 
    <artifactId>mail</artifactId> 
    <version>YOUR_VERSION</version> 
    <scope>provided</scope> <!-- This line is new --> 
</dependency> 

Dies löste das Problem für mich.

+0

Ich musste Tomcat neu starten und meine Anwendung neu implementieren, damit sie wirksam wird. – svarog

Verwandte Themen