2013-08-12 20 views
9

Otrzymałem ten błąd podczas próby uruchomienia następującego kodu, aby uzyskać obiekt javax.mail.Session przy użyciu pliku kontekstowego tomcat .java.lang.ClassCastException: javax.mail.Session nie można przesłać do javax.mail.Session

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

To jest deklaracja zasobu w pliku 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"/> 

Rozumiem, może to być spowodowane mi o tej samej biblioteki dla javax.mail.Session w mojej bibliotece serwera aplikacji (Tomcat) i folderu w mojej aplikacji katalogu biblioteki, mam wyeliminować jak najwięcej duplikaty plików bibliotecznych z mojego folderu biblioteki aplikacji (np. mail.jar), który widzę, mam javax.mail.Session jako część biblioteki, teraz jestem w punkcie, w którym wciąż otrzymuję ten błąd i nie jestem pewien, jakie inne biblioteki mogą być źródłem tego problemu, czy jest to inny problem, którego nie znam?

Co ludzie sugerują zrobić, aby znaleźć źródło tego problemu?

Dzięki.

+0

Upewnij się, że uruchomiłeś ponownie tomcat. Jeśli wyjątek jest wciąż rzucany, przegapiłeś miejsce, w którym nadal znajduje się javax.mail.Session. – Henry

+7

Nie znam dokładnego rozwiązania twojego problemu, ale jeszcze jeden powód, dla którego może się zdarzyć (żebyś się zagłębił) - javax.mail.Session jest ładowany przez 2 różne programy ładujące klasy – serejja

+0

Czy używasz Mavena? –

Odpowiedz

16

Ten problem występuje na serwerze ponieważ lib Tomcat a ty zastosowanie zarówno mieć własną kopię mail.jar (w WEB-INF/lib), więc classloaders może ładować dwa różne Session.If usunąć ze swojego mail.jar aplikacja, ten problem zostanie rozwiązany.

+0

Inna sytuacja: podczas korzystania z Maven, konflikt pliku mail.jar może zostać zaimportowany przy użyciu pośredniej zależności od jednej z bezpośrednich zależności w pom. W takim przypadku musisz wyłapać pośrednią zależność i użyć "wykluczeń/wykluczeń", aby zapobiec włączeniu pośredniej zależności. –

1

zastosowanie pod warunkiem, zakres w Maven javax.mail elektronicznej 1,4 warunkiem

1

Jeśli masz już mail.jar w lib swojego serwera, należy usunąć go z pliku application/POM, ten problem zostanie rozwiązany.

+0

Ten komentarz pomógł mi rozwiązać mój problem. – Scott

4

Pewnie już nie posiadające ten problem, ale następna osoba przyjść tutaj:

Jeśli używasz Maven, dodać <scope>provided</scope> do uzależnienia javax.mail w pom.xml.

Na przykład w moim przypadku:

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

To rozwiązało problem dla mnie.

+0

Musiałem zrestartować Tomcat i ponownie wdrożyć moją aplikację, aby odniosła skutek. – svarog

Powiązane problemy