Java 为什么强制转换可以在本地工作而不能在服务器上工作?
这是一个有点特殊的问题,但我使用javamail连接到IMAP服务器以获取一些消息,当我在命令行中本地运行我的程序时,它运行得很好,但当它上载到tomcat以运行时,我得到了这个强制转换错误:Java 为什么强制转换可以在本地工作而不能在服务器上工作?,java,tomcat,imap,jakarta-mail,Java,Tomcat,Imap,Jakarta Mail,这是一个有点特殊的问题,但我使用javamail连接到IMAP服务器以获取一些消息,当我在命令行中本地运行我的程序时,它运行得很好,但当它上载到tomcat以运行时,我得到了这个强制转换错误: java.lang.ClassCastException: javax.mail.internet.MimeMultipart cannot be cast to javax.mail.internet.MimeMultipart 代码行是: MimeMultipart mp; mp = ((MimeM
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);
我不知道为什么我可以在本地运行时强制转换它,但是它在服务器上崩溃了。我两次都在使用同一条消息,它是硬编码的,所以我不可能提取一条不是mimultipart的消息。有什么想法吗?如果你还需要我发布什么,我会的,尽管问。谢谢 这可能是一个类加载器问题,有关几种可能的解决方案,请参阅:根据当前问题状态下提供给我们的信息,得出解决方案的最佳方法是验证加载MiMemMultiPart的类加载器:
ClassLoader myClassLoader = new MyClass().getClass().getClassLoader();
然而,沿着这条路走下去可能需要比预期更长的时间
这很可能是Tomcat安装中的局部错误。如果您能够在另一台服务器(如GlassFish)上尝试,或者可以在新安装的Tomcat上尝试,您可能会发现问题已经解决。您已经通过命令行确认程序正常。以下类型的错误消息:
java.lang.ClassCastException: CLASS cannot be cast to CLASS
通常表示类加载器问题。您正在尝试从一个类加载器转换到驻留在另一个类加载器中的实例
我猜javamail jar在您的webapp的/WEB-INF/lib文件夹中。在这种情况下,如果它们也在tomcat的lib文件夹中,那么您将得到确切的消息
解决此问题的一种方法是从tomcat安装中删除javamail LIB并将其保留在webapp中,或者不将其包含在war中。客户端和服务器是否使用不同的JVM?是的,客户端和服务器使用不同的JVM。这似乎是一个类加载器问题。当它崩溃时,这就是我得到的全部。。。java.lang.ClassCastException:javax.mail.internet.MimeMultipart无法在com.wingdom.connect.IMAP_connect.map(IMAP_connect.java:72)上转换为javax.mail.internet.MimeMultipart。。。这听起来像是发生了什么,让我玩一下,看看我能得到什么。