gpt4 book ai didi

java - 使用 javax 在 RCP Java 应用程序中发送带有附件的电子邮件

转载 作者:行者123 更新时间:2023-12-01 11:15:10 25 4
gpt4 key购买 nike

我需要发送一封带有附件的电子邮件,但遇到以下错误。

!ENTRY org.eclipse.rap.ui 4 0 2015-08-10 11:45:25.505
!MESSAGE Unhandled event loop exception
!STACK 0

java.lang.LinkageError:加载器约束冲突:解析方法“javax.mail.internet.MimeMessage.setDataHandler(Ljavax/activation/DataHandler;)V”时,类加载器(org/eclipse/osgi 的实例)当前类的/internal/baseadaptor/DefaultClassLoader),com/fotgroup/tecas/ui/dialog/EmailSender,以及已解析类的类加载器(org/jboss/modules/ModuleClassLoader 的实例),javax/mail/internet/MimeMessage ,对于签名中使用的类型 setDataHandler 有不同的 Class 对象

at com.fotgroup.tecas.ui.dialog.EmailSender.sendMail(EmailSender.java:67)

我无法获取图像的路径,因为它是 RCP,并且当我尝试使用 DataHandler 时也会发生这种情况。

最佳答案

如果没有所涉及的 bundle 的 list ,很难判断,但这看起来像是一个框架设置错误。

我可以看到这里混合了一个 JBoss 模块类加载器和一个 Equinox 类加载器,我猜测您正在 JBoss 模块框架内部启动一个 Equinox OSGi 框架。本答案的其余部分假设这就是您正在做的事情。

为了完成这项工作,您需要将“JBoss 提供的包”(例如 Java EE API)的加载委托(delegate)给父 JBoss 模块框架,否则您将遇到不一致的类空间问题(例如您的 LinkageError当您调用 JBoss 服务器组件时。

您需要做的就是添加到框架系统包(Equinox 框架中的系统包提供的包)。您可以通过在启动时指定 org.osgi.framework.system.packages.extra 属性来执行此操作。

该属性的值需要包含您想要添加的任何软件包及其版本并使用约束(如果您希望事情正常工作)。

例如,在这种情况下,您至少需要(可能超过):

javax.mail;version=1.4;uses:="javax.activation,
javax.mail.event,javax.mail.search",
javax.mail.event;version=1.4;uses:="javax.mail"
javax.mail.internet;version=1.4;uses:="javax.activation,
javax.mail,javax.mail.util"
javax.mail.search;version=1.4;uses:="javax.mail,javax.mail.internet"
javax.mail.util;version=1.4;uses:="javax.activation,javax.mail.internet"

请注意,您需要这样做的原因实际上并不是 OSGi 的错。您正在尝试从框架内部访问框架外部存在的非标准(即非 JRE)包。 OSGi 的工作是强制执行代码的运行时依赖性,这通常意味着“您已部署的 bundle ”,在这种情况下,您正在访问并非来自 bundle 的包,因此您需要告诉 OSGi 它们是什么。

关于java - 使用 javax 在 RCP Java 应用程序中发送带有附件的电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31916534/

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