当前位置: 首页 > 知识库问答 >
问题:

构建Liferay 7.0 OSGI模块

柴英光
2023-03-14

我已经研究这个错误好几天了。虽然我尝试了几种不同的方法,但仍然没有在Liferay论坛上做出回应,我无法找出错误的真正原因。如果我能找到原因,我可能会解决它。错误是:

原因:java。lang.VerifyError:操作数堆栈上的类型错误\u异常详细信息:\u位置:\uufInternational/api/core/service/impl/EmailLocalServiceImpl。sendEmail(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V@930:调用虚拟_

原因:_类型'com/sun/mail/smtp/SMTPMessage'(当前帧,堆栈[1])不能分配给'javax/mail/Message'_

当前帧:\uBCI:@930\uFlags:{}\uLocals:{“org/bsfinternational/api/core/service/impl/EmailLocalServiceImpl”、“java/lang/String”、“java/lang/String”、“java/lang/String”、“java/lang/String”、“java/lang/String”、“java/lang/String”、“java/lang/String”、“整数”、“javax/mail/Session”、“org/apache/commons/validator/routines/EmailValidator”、“de/agitos/dkim/DKIMSigner”、“java/lang/String”、“com/sun/mail”/smtp/SMTPMessage',integer',java/lang/String',org/bsfinternational/api/core/model/Email',“[Ljavax/mail/internet/InternetAddress;”、“java/lang/String”、“整型”、“javax/mail/Transport”、“java/util/List”、“Ljavax/mail/internet/InternetAddress;”、“java/lang/String”、“java/lang/String”、“java/lang/String”、“java/lang/String”、“整数”、“javax/mail/Transport”}堆栈:{“javax/mail/Transport”、“com/sun/mail/smtp/SMTPMessage”、“Ljavax/mail/Address;”;}_

所以,我知道SMTPMessage不可分配给消息有一个问题,但我不知道为什么。我所做的研究似乎指出了JVM的差异,但据我所知,所有内容都是在相同的环境中编译的。

实际的代码段是:

    // construct the JavaMail message using the DKIM message type from DKIM for JavaMail
        SMTPMessage msg = new SMTPDKIMMessage(session, dkimSigner);

如果我尝试将SMTPDKIMMessage分配给代码中的相同类型,如下所示:

// construct the JavaMail message using the DKIM message type from DKIM for JavaMail
        SMTPDKIMMessage msg = new SMTPDKIMMessage(session, dkimSigner);

然后,兼容的是SMTPDKimessage不可分配给消息。如果我将其更改为Message,那么它会抱怨SMTPDKIMMessage不可分配。看起来像一个圆。

所以,这里的第一个问题是:真正的原因是什么?我应该寻找产生错误的什么?我使用相同的IDE和编译环境编译了DKIMforJavaMail.jar。但是有人对这些分配不满意。是什么?

共有2个答案

史朗
2023-03-14

我继续采取不同的方法,但进展不大。是的,堆栈中的某个地方存在问题。我只使用JavaMail从我的portlet创建和发送电子邮件。是的,我知道Liferay有一个JavaMail的实现,但它不支持DKIM。我正在移植6.0.6中的所有代码,这是我唯一无法解析的代码。据我所知,是邮件。Tomcat home/lib/ext文件夹中的jar是我所需要的,由于缺乏任何其他方法,我将其复制到模块的lib文件夹中,并将其与其他非maven jar一起包含。我已经注释掉了我的DKIM代码,只是想让一个普通、简单的Javamail发送例程正常工作。。。但运气不好。。。然而仍在尝试。。。

夏法
2023-03-14

这里最大的问题是:你如何构建,你是否在类路径上有重复的类。例如。你是否在插件的某个地方捆绑了javax.mail类?

通常,如果一个类不是合法超类的有效后代,则该超类将有两种不同的版本。这就是为什么错误消息没有立即意义,因为它只包含名称,而不包含实际类实例之间的差异。

检查你的插件-它(或它所依赖的jar)包含哪些类?这取决于什么-您提到了Liferay 7,因此很有可能有多个版本的底层API可用,从而导致此类问题。

 类似资料:
  • 模块标记 coolie-cli 的模块构建方式应该是比较特殊的一类,与 webpack 一样,都是另辟蹊径。 webpack:依赖模块放到数组里,数组索引值就是模块 ID。 coolie-cli:依赖模块全局标记 ID(三十六进制)。 coolie-cli 可以将长长的物理路径压缩成最短的字符,达到压缩率最大化,而不是将模块直接合并。 // module1.js define(function(r

  • 公共模块 在介绍分块模块之前,来说些公共模块。 当一个项目逐渐壮大的时候,势必会出现一些公共模块。 如何分配和处理这些公共模块,需要全局考虑,是一个不小的利弊权衡。 如工程里共有 20 个入口模块, 5 个入口模块引用了同一个模块 a, 10 个入口模块引用了同一个模块 b, 15 个入口模块引用了同一个模块 c, 20 个入口模块引用了同一个模块 d。 如何分配这 4 个公共模块呢? 全部打包在

  • 异步模块 异步模块与同步模块相反,指的是模块是在运行时才去异步加载然后再运行。 setTimeout(function(){ // 异步模块`async.js`在 1000ms 后加载,然后再运行 require.async('async.js', function(exports){ // 模块加载完成后,返回模块的导出 // exports

  • 资源模块 资源模块指的是图片、样式、html片段等非脚本模块(在 coolie 的世界里,一切皆是模块)。 使用方法: require('style.css', 'css'); 详细阅读点这里。 demo 初始化目录结构 新建coolie-demo6目录: . └── src 1 directory, 0 files 初始化文件 准备一张图片coolie.png,放在 src 目录下。 然后

  • 同步模块 这里的同步模块指的是运行时,该模块是同步载入的(类似 NodeJS 里的 require)。 require('module1'); // 运行到这里,module1 载入 require('module2'); // 运行到这里,module2 载入 demo 初始化目录 新建coolie-demo5,目录结构为: coolie-demo5 └── src 1 directo

  • 我需要在没有静态嵌套类的情况下实现Builder模式。如果我有遗传,最好的方法是什么?让我们想象一下我有下面的课。 是创建一个Builder类来负责设置PassengerCar和Truck的值更好,还是我们需要另外三个类,CarBuilder,PassengerCarBuilder extends CarBuilder和TruckBuilder extends CarBuilder?