这是一个特定的问题,但我使用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的消息。有任何想法吗?如果你需要我发布任何其他内容,我会,只是问。谢谢!
答案 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中,或者不包括在战争中。