gpt4 book ai didi

java - com.sun.mail.handlers.text_plain无法转换为javax.activation.DataContentHandler

转载 作者:行者123 更新时间:2023-11-29 04:01:51 27 4
gpt4 key购买 nike

我正在从ColdFusion 8升级到ColdFusion9。我有一个从CF调用的Java类,该类读取并解析mbox邮箱文件的内容。该类可以在CF 8上正常工作,但是会在CF 9中引发错误。该错误是:

com.sun.mail.handlers.text_plain无法转换为javax.activation.DataContentHandler

错误发生在Java代码从javax.mail.internet.MimeMessage调用getContent()函数的时刻。根据消息的MIME类型,我将getContent()的返回值强制转换为String,MimeBodyPart或Part之一。

有谁知道如何解决这个问题?

这是我的Java函数:

public String getHtmlContent(Part p) throws IOException, MessagingException {
StringBuffer szContent = new StringBuffer();
if ( p.isMimeType("text/plain") )
{
szContent.append( contentToHtml( (String) p.getContent() ) );
}
else if ( p.isMimeType("multipart/*") )
{
Multipart multipart = (Multipart) p.getContent();
for ( int i = 0, n = multipart.getCount(); i < n; i++ ) {
szContent.append( getHtmlContent((MimeBodyPart) multipart.getBodyPart( i )));
}
}
else if ( p.isMimeType("message/rfc822") )
{
szContent.append( getHtmlContent( (Part) p.getContent() ));
}
else
{
throw new RuntimeException( "Cannot determine message content." );
}
return szContent.toString();
}


这是Java堆栈跟踪:

javax.activation.MailcapCommandMap.getDataContentHandler(MailcapCommandMap.java:581)
在javax.activation.MailcapCommandMap.createDataContentHandler(MailcapCommandMap.java:535)
在javax.activation.CommandMap.createDataContentHandler(CommandMap.java:191)
在javax.activation.DataHandler.getDataContentHandler(DataHandler.java:594)
在javax.activation.DataHandler.getContent(DataHandler.java:522)
在javax.mail.internet.MimeMessage.getContent(MimeMessage.java:1395)
在its.util.MBoxMessage.getHtmlContent(MBoxMessage.java:166)
在its.util.MBoxMessage.getHtmlContent(MBoxMessage.java:159)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
在java.lang.reflect.Method.invoke(Method.java:597)
在coldfusion.runtime.StructBean.invoke(StructBean.java:502)
在coldfusion.runtime.CfJspPage._invoke(CfJspPage.java:2393)
在cfmessage2ecfm263917690.runPage(\ web.shares \ web \ goat \ cf \ courses \ classlist \ message.cfm:216)
在coldfusion.runtime.CfJspPage.invoke(CfJspPage.java:231)
在coldfusion.tagext.lang.IncludeTag.doStartTag(IncludeTag.java:416)
在coldfusion.filter.CfincludeFilter.invoke(CfincludeFilter.java:65)
在coldfusion.filter.ApplicationFilter.invoke(ApplicationFilter.java:363)
在coldfusion.filter.MonitoringFilter.invoke(MonitoringFilter.java:40)
在coldfusion.filter.PathFilter.invoke(PathFilter.java:87)
在coldfusion.filter.ExceptionFilter.invoke(ExceptionFilter.java:70)
在coldfusion.filter.ClientScopePersistenceFilter.invoke(ClientScopePersistenceFilter.java:28)
在coldfusion.filter.BrowserFilter.invoke(BrowserFilter.java:38)
在coldfusion.filter.NoCacheFilter.invoke(NoCacheFilter.java:46)
在coldfusion.filter.GlobalsFilter.invoke(GlobalsFilter.java:38)
在coldfusion.filter.DatasourceFilter.invoke(DatasourceFilter.java:22)
在coldfusion.filter.CachingFilter.invoke(CachingFilter.java:53)
在coldfusion.CfmServlet.service(CfmServlet.java:200)
在coldfusion.bootstrap.BootstrapServlet.service(BootstrapServlet.java:89)
在jrun.servlet.FilterChain.doFilter(FilterChain.java:86)
在com.intergral.fusionreactor.filter.FusionReactorFilter.B(未知来源)
在com.intergral.fusionreactor.filter.FusionReactorFilter.A(未知来源)
在com.intergral.fusionreactor.filter.FusionReactorFilter.doFilter(未知来源)
在jrun.servlet.FilterChain.doFilter(FilterChain.java:94)
在coldfusion.monitor.event.MonitoringServletFilter.doFilter(MonitoringServletFilter.java:42)
在coldfusion.bootstrap.BootstrapFilter.doFilter(BootstrapFilter.java:46)
在jrun.servlet.FilterChain.doFilter(FilterChain.java:94)
在jrun.servlet.FilterChain.service(FilterChain.java:101)
在jrun.servlet.ServletInvoker.invoke(ServletInvoker.java:106)
在jrun.servlet.JRunInvokerChain.invokeNext(JRunInvokerChain.java:42)
在jrun.servlet.JRunRequestDispatcher.invoke(JRunRequestDispatcher.java:286)
在jrun.servlet.ServletEngineService.dispatch(ServletEngineService.java:543)
在jrun.servlet.jrpp.JRunProxyService.invokeRunnable(JRunProxyService.java:203)
在jrunx.scheduler.ThreadPool $ DownstreamMetrics.invokeRunnable(ThreadPool.java:320)
在jrunx.scheduler.ThreadPool $ ThreadThrottle.invokeRunnable(ThreadPool.java:428)
在jrunx.scheduler.ThreadPool $ UpstreamMetrics.invokeRunnable(ThreadPool.java:266)
在jrunx.scheduler.WorkerThread.run(WorkerThread.java:66)

最佳答案

这听起来像是类加载器问题。有时,类似这样的ClassCastException是由于原始对象的类(com.sun.mail.handlers.text_plain)来自一个类加载器,而目标类(DataContentHandler)来自另一个类加载器。尽管类相同,但jvm会检测到它们来自不同的类加载器,因此拒绝进行转换。在这种情况下,错误消息不是很有用。

可能由于jar混合在一起而发生,可能是您的webapp文件夹中有一个JavaMail版本,而 / jre / lib / endorsed中有另一个版本。


我对ColdFusion不熟悉,所以这只是一个猜测,但是升级是否还涉及到jdk升级?
类加载器层次结构中的任何内容都发生了变化吗?也许是Webapp的父先策略与父后策略(例如Weblogic和WebSphere中支持的策略)?
您在哪里有JavaMail和Activation jar?您的webapp中有那些罐子吗?

关于java - com.sun.mail.handlers.text_plain无法转换为javax.activation.DataContentHandler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2976985/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com