2017-06-27 45 views
0

我一直在研究这个错误几天。在Liferay论坛上还没有回应(尽管我已经尝试了几种不同的方法),但我无法弄清楚错误的真正原因。如果我能找到原因,我可以修复它。错误是:验证错误构建Liferay 7.0 OSGI模块

产生的原因:java.lang.VerifyError的:坏类型的操作数stack_Exception详情:_ 地点:_
组织/ bsfinternational/API /核心/服务/ IMPL/EmailLocalServiceImpl.sendEmail(Ljava /朗/ String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String;)V @ 930:invokevirtual_

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

当前帧:_ bci:@ 930_ flags: } _ locals:{'org/bsfinternational/api/core/service/impl/Ema java/lang/String','java/lang/String','java/lang/String','java/lang/String','java/lang/String' ,'java/lang/String',integer,'javax/mail/Session','org/apache/commons/validator/routines/EmailValidator','de/agitos/dkim/DKIMSigner','java/lang/,java/lang/String','java/lang/String','com/sun/mail/smtp/SMTPMessage',整数,'java/lang/String','org/bsfinternational/api/core/Email','[Ljavax/mail/internet/InternetAddress;','java/lang/String','[Ljava/lang/String;','java/util/List','[Ljavax/mail/internet/InternetAddress ;','java/lang/String','java/lang/String','java/lang/String','java/lang/String',integer,'javax/mail/Transport'} _ stack:{' 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); 

那么顺从是SMTPDKIMMessage是不能分配给信息。如果我将其更改为消息,那么它会抱怨SMTPDKIMMessage不可分配。看起来像一个圆圈。

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

回答

0

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

通常,如果一个类不是合法超类的有效后代,则超类将有两种不同的风格可用。这就是为什么错误信息没有直接意义,因为它只包含名称,而不是实际的类实例之间的差异。

检查你的插件 - 它包含哪些类(或它所依赖的罐)?这是依赖于 - 你提到Liferay 7,所以很有可能多个版本的底层API可用,导致这样的问题。

0

我继续采取不同的方法,但我没有取得多大进展。是的,在堆栈的某个地方存在问题。我只使用JavaMail从我的portlet创建和发送电子邮件。是的,我知道Liferay具有JavaMail的实现,但不支持DKIM。我从6.0.6移植所有这些代码,这是我无法解决的唯一代码。据我所知,Tomcat的home/lib/ext文件夹中的mail.jar是我需要的,并且缺少其他方法,我将它复制到我的模块的lib文件夹中,并将其与其他非Maven jar包含在一起。我已经注释掉了我的DKIM代码,只是试图获得一个正常的,简单的Javamail发送例程来工作......但没有运气...呢。仍在尝试...