-1

这是一个特定的问题,但我使用 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 的消息。有任何想法吗?如果您需要我发布其他内容,我会的,只是问。谢谢!

4

3 回答 3

0

这可能是一个 Classloader 问题,请参阅此问题以了解几种可能的解决方案:

于 2013-04-24T15:02:19.097 回答
0

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

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

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

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

于 2013-04-24T15:02:46.837 回答
0

类型的错误消息:

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

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

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

有关 tomcat 类加载的更多信息,请参阅此链接。

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

于 2013-04-24T15:03:23.943 回答