为什么在本地工作但不在服务器上工作?

时间:2013-04-24 14:52:58

标签: java tomcat imap javamail

这是一个特定的问题,但我使用javamail连接到IMAP服务器来提取一些消息,当我在命令行中本地运行我的程序时,它运行得很好,但是当它上传到tomcat要运行,我得到这个转换错误:

java.lang.ClassCastException: javax.mail.internet.MimeMultipart cannot be cast to javax.mail.internet.MimeMultipart

代码行是:

MimeMultipart mp;
mp = ((MimeMultipart)message.getContent());

消息定义为:

Message message = null;
message = folder.getMessageByUID(14299);

我不确定为什么我可以在本地运行时进行转换,但它在服务器上崩溃了。我两次使用相同的消息,它是硬编码的,所以我没有机会拉出不是MimeMultipart的消息。有任何想法吗?如果你需要我发布任何其他内容,我会,只是问。谢谢!

3 个答案:

答案 0 :(得分:0)

这可能是一个类加载器问题,有关几种可能的解决方案,请参阅this question

答案 1 :(得分:0)

根据我们在当前问题状态下可获得的信息,获得解决方案的最佳方法是验证加载MimeMultipart的ClassLoader:

ClassLoader myClassLoader = new MyClass().getClass().getClassLoader();

但是,沿着这条路走下去的时间可能比预期的要长。

很有可能这是Tomcat安装上的本地化错误。如果您能够在 GlassFish 等其他服务器上尝试,或者可能是全新安装Tomcat ,则可能会发现问题已解决。您已经通过命令行确认您的程序正常。

答案 2 :(得分:0)

类型错误消息:

java.lang.ClassCastException: CLASS cannot be cast to CLASS

经常表示类加载器问题。您正在尝试从一个ClassLoader转换为驻留在另一个ClassLoader中的实例。

我猜javamail jar在你的webapp的/ WEB-INF / lib文件夹中。在这种情况下,如果它们也在tomcat的lib文件夹中,那么您将拥有该确切的消息。

See this link for more information on tomcat ClassLoading.

解决此问题的一种方法是从tomcat安装中删除javamail库并将其保留在webapp中,或者不包括在战争中。