尝试运行以下代码以使用tomcat上下文文件获取javax.mail.Session对象时,我一直收到此错误.
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
Session session = (javax.mail.Session) envCtx.lookup("mail/session");
Run Code Online (Sandbox Code Playgroud)
这是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"/>
Run Code Online (Sandbox Code Playgroud)
我理解这可能是因为我在我的应用程序服务器库(tomcat)文件夹中的javax.mail.Session具有相同的库,并且在我的应用程序库文件夹中,我从我的应用程序库文件夹中删除了尽可能多的重复库文件(例如, mail.jar)我可以看到将javax.mail.Session作为库的一部分,现在我处于这样的程度,我仍然遇到此错误并且不确定其他库可能是此问题的根源,或者这是我不知道的其他问题吗?
人们建议我做些什么来找到这个问题的根源?
谢谢.
小智 18
这个问题发生在服务器上,因为Tomcat的lib和你的应用程序都有自己的副本mail.jar
(在WEB-INF/lib中),所以类加载器可以加载两个不同的Session.If你mail.jar
从你的应用程序中删除,这个问题将是解决了.
你可能不再有这个问题了,但对于下一个来这里的人来说:
如果您正在使用maven,<scope>provided</scope>
请在pom.xml中添加到javax.mail依赖项.
例如,在我的情况下:
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>YOUR_VERSION</version>
<scope>provided</scope> <!-- This line is new -->
</dependency>
Run Code Online (Sandbox Code Playgroud)
这解决了我的问题.
归档时间: |
|
查看次数: |
7652 次 |
最近记录: |