【问题标题】:ClassCastException when sending email under servicemix using JavaMail API使用 JavaMail API 在 servicemix 下发送电子邮件时发生 ClassCastException
【发布时间】:2011-10-08 14:40:59
【问题描述】:

我正在使用 JavaMail API 在 servicemix 下发送带有附件的电子邮件。我正在使用独立运行的相同代码,但出现了一个奇怪的异常:

线程“pool-6-thread-5”java.lang.ClassCastException 中的异常: com.sun.mail.handlers.multipart_mixed 在 org.apache.servicemix.specs.activation.OsgiMailcapCommandMap.createDataContentHandler(Osg iMailcapCommandMap.java:60)

我尝试了很多技巧,包括在捆绑包定义中导入包 com.sun.mail.handlers 以及在in this thread 中描述的那些。

项目是JDK 1.5,FuseESB 4.2运行的java 1.5代码

-- 编辑--

问题是由加载到 servicemix 中的 weblogic.jar 引起的,它提供了自己的 mailcap 副本和来自 java 邮件 api 和激活的其他文件,通过 META_INF 公开。

【问题讨论】:

  • 你得到的类的类名是什么?
  • 我也尝试过解决这个问题,但无法在本地解决。无论出于何种原因,即使在 Java SE 6 中,我也无法让 MimeMultipart 工作。我什至尝试使用和不使用 Sun/Oracle 的 activation.jar。有兴趣了解其他人的说法。

标签: java jakarta-mail apache-servicemix


【解决方案1】:

这听起来像是一个有冲突的 Class 案例。

ab.jar 有 AB 类

cd.jar 也有 AB 类

然后您的应用程序将使用包含 ab.jar 和 cd.jar 的类路径运行。 Java从ab.jar加载Class AB,但实际上要加载的正确Class是CD.jar中的AB。

也许您可以尝试在 jar 文件中搜索冲突的类。如果您使用的是 Eclipse,则可以轻松完成。将所有 jars 包含到项目的构建路径中,然后按:CTRL+SHIFT+T(Open Type 的快捷方式),键入:multipart_mixed 并查看有多少 jars。

还可能与 java 运行时库中的 activation.jar 冲突。

【讨论】:

  • 在类路径上的两个 jar 中只有同一个类不会导致 ClassCastException。
  • 如果 ab.jar 中的 AB 和 cd.jar 中的 AB 具有完全相同的包名但代码版本不同,则可能会导致 ClassCastException。
  • 不,不能。如果这些类由不同的 ClassLoader 加载,则只能在两个同名类之间获得 CCE。
  • 部分情况是您描述的情况。问题是 weblogic.jar 在 META_INF 目录中暴露的 mailcap 和其他文件。解决方案是删除这些文件。
猜你喜欢
  • 2012-03-16
  • 2018-12-18
  • 1970-01-01
  • 1970-01-01
  • 2012-04-27
  • 2017-10-17
  • 1970-01-01
  • 2012-01-28
相关资源
最近更新 更多