Frage java.lang.ClassCastException: javax.mail.Session kann nicht in javax.mail.Session umgewandelt werden


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.

        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 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, dass dies daran liegen kann, dass ich die selbe Bibliothek für die javax.mail.Session in meinem Ordner der Anwendungsserver-Bibliothek (tomcat) und in meinem Anwendungsbibliotheksordner habe, so viele doppelte Bibliotheksdateien aus meinem Ordner der Anwendungsbibliothek (z mail.jar), die ich sehen kann, habe die javax.mail.Session als Teil der Bibliothek, jetzt bin ich an einem Punkt, an dem ich immer noch diesen Fehler bekomme und nicht sicher bin, welche anderen Bibliotheken die Quelle dieses Problems sein könnten, oder Ist es ein anderes Problem, das mir nicht bewusst ist?

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

Vielen Dank.


10
2017-08-12 11:00


Ursprung


Antworten:


Dieses Problem tritt auf dem Server auf, weil die Lib von Tomcat und Ihre Anwendung beide eine eigene Kopie haben mail.jar (in WEB-INF / lib), damit die Klassenlader zwei verschiedene Sessions laden können mail.jarVon Ihrer Anwendung wird dieses Problem gelöst.


17
2017-12-27 04:20



Sie haben dieses Problem wahrscheinlich nicht mehr, aber für die nächste Person, die hierher kommt:

Wenn Sie maven verwenden, fügen Sie hinzu <scope>provided</scope> zu Ihrer javax.mail-Abhängigkeit in pom.xml.

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>

Das hat das Problem für mich gelöst.


4
2018-05-27 20:12



Verwenden Sie bereitgestellten Umfang in Maven                      javax.mail                 mail                 1.4                 unter der Voraussetzung             


1
2018-05-23 21:51



Wenn Sie bereits die mail.jar in der lib Ihres Servers haben, löschen Sie diese aus Ihrer Anwendung / Pom-Datei, dieses Problem wird gelöst.


1
2018-03-22 06:27