com.sun.mail.handlers.text\u无法强制转换为javax.activation.DataContentHandler
我正在从ColdFusion 8升级到ColdFusion 9。我有一个从CF调用的Java类,它读取和解析mbox邮箱文件的内容。该类在CF8中运行良好,但在CF9中抛出了一个错误。错误是: com.sun.mail.handlers.text\u无法强制转换为javax.activation.DataContentHandler 错误发生在Java代码从javax.mail.internet.mimessage调用getContent()函数的地方。根据消息的MIME类型,我将getContent()的返回值强制转换为String、MimeBodyPart或Part中的一个 有人知道如何解决这个问题吗 下面是我的Java函数:com.sun.mail.handlers.text\u无法强制转换为javax.activation.DataContentHandler,java,coldfusion,Java,Coldfusion,我正在从ColdFusion 8升级到ColdFusion 9。我有一个从CF调用的Java类,它读取和解析mbox邮箱文件的内容。该类在CF8中运行良好,但在CF9中抛出了一个错误。错误是: com.sun.mail.handlers.text\u无法强制转换为javax.activation.DataContentHandler 错误发生在Java代码从javax.mail.internet.mimessage调用getContent()函数的地方。根据消息的MIME类型,我将getCont
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();
}
公共字符串getHtmlContent(第p部分)抛出IOException、MessaginException{
StringBuffer szContent=新的StringBuffer();
if(p.isMimeType(“文本/普通”))
{
append(contentToHtml((String)p.getContent());
}
else if(p.isMimeType(“multipart/*”)
{
Multipart Multipart=(Multipart)p.getContent();
for(int i=0,n=multipart.getCount();i
下面是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)
在其.util.MBoxMessage.getHtmlContent(MBoxMessage.java:166)中
在其.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)
调用(StructBean.java:502)
在coldfusion.runtime.CfJspPage.\u调用(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.integral.fusionreactor.filter.fusionreactor.filter.B(未知来源)
位于com.integral.fusionreactor.filter.FusionReactorFilter.A(未知来源)
位于com.integral.fusionreactor.filter.fusionreactor.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.jruninvochercain.invokeNext(jruninvochercain.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版本和
- 我不熟悉ColdFusion,所以这只是一个猜测,但升级是否也涉及jdk升级
- 类加载器层次结构中有什么变化吗?可能是webapps的父级优先与父级最后策略(如Weblogic和WebSphere中支持的)
- 哪里有JavaMail和Activa
<exclusions> <exclusion> <artifactId>geronimo-javamail_1.4_spec</artifactId> <groupId>org.apache.geronimo.specs</groupId> </exclusion> </exclusions>