Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
com.sun.mail.handlers.text\u无法强制转换为javax.activation.DataContentHandler_Java_Coldfusion - Fatal编程技术网

com.sun.mail.handlers.text\u无法强制转换为javax.activation.DataContentHandler

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

我正在从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函数:

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版本和/jre/lib/annowed中的另一个版本,或者类似的东西

  • 我不熟悉ColdFusion,所以这只是一个猜测,但升级是否也涉及jdk升级
  • 类加载器层次结构中有什么变化吗?可能是webapps的父级优先与父级最后策略(如Weblogic和WebSphere中支持的)
  • 哪里有JavaMail和Activa
    <exclusions>
    <exclusion>
        <artifactId>geronimo-javamail_1.4_spec</artifactId>
        <groupId>org.apache.geronimo.specs</groupId>
    </exclusion>
    </exclusions>