2017-06-27 8 views
0

J'ai recherché cette erreur pendant quelques jours. Aucune réponse sur le forum de Liferay (encore) et même si j'ai essayé plusieurs approches différentes, je n'arrive pas à comprendre la vraie cause de l'erreur. Si je peux trouver la cause, je pourrais probablement le réparer. L'erreur est:VerifyError building Liferay 7.0 Module OSGI

Causée par: java.lang.VerifyError: Bad Type sur opérande stack_Exception Détails: _ Lieu: _
org/bsfinternational/api/core/Service/impl/EmailLocalServiceImpl.sendEmail (Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String;) V @ 930: invokevirtual

Raison : _ Tapez 'com/sun/mail/smtp/SMTPMessage' (frame actuelle, pile [1]) n'est pas assignable à 'javax/mail/message'

Current frame: _ bci: @ 930_ flags: { } _ locaux: {'org/bsfinternational/api/noyau/service/impl/Ema ilLocalServiceImpl ',' java/lang/String ',' java/lang/String ',' java/lang/String ',' java/lang/String ',' java/lang/String ',' java/lang/String ' , 'java/lang/String', entier, 'javax/mail/session', 'org/apache/commons/validateur/routines/EmailValidator', 'de/agitos/dkim/DKIMSigner', 'java/lang/String' , 'java/lang/String', 'java/lang/String', 'com/dim/mail/smtp/SMTPMessage', entier, 'java/lang/String', 'org/bsfinternational/api/core/model/Email ',' [Ljavax/mail/internet/InternetAdresse; ',' java/lang/String ',' [Ljava/lang/String; ',' java/util/Liste ',' [Ljavax/mail/internet/InternetAddress ; ',' java/lang/String ',' java/lang/String ',' java/lang/String ',' java/lang/String ', un entier,' javax/mail/Transport '} _ stack: {' javax/mail/Transport ',' com/dim/mail/smtp/SMTPMessage ',' [Ljavax/mail/adresse; ' } _

Donc, je comprends qu'il y a un problème avec SMTPMessage n'étant pas assignable à Message mais je ne sais pas pourquoi. La recherche que j'ai faite semble pointer vers les différences de la JVM mais tout a été compilé dans le même environnement, autant que je sache.

L'extrait de code actuel est:

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

Si j'essayez d'affecter SMTPDKIMMessage au même type dans le code comme ceci:

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

Ensuite, la conformité est que SMTPDKIMMessage est incessible à Message. Si je le change en message, il se plaint que SMTPDKIMMessage n'est pas assignable. On dirait un cercle. Donc, la première question ici est: Quelle est la vraie cause? Que dois-je rechercher qui génère l'erreur? J'ai compilé le fichier DKIMforJavaMail.jar en utilisant le même environnement IDE et de compilation. Mais quelqu'un est mécontent de ces affectations. Qu'Est-ce que c'est?

Répondre

0

La grande question ici est: Comment construisez-vous, et avez-vous des classes en double sur le chemin de classe. Par exemple. est-ce que vous regroupez les classes javax.mail quelque part dans votre plugin?

Typiquement, si une classe n'est pas un descendant valide d'une superclasse légitime, la superclasse sera disponible en deux versions différentes. C'est pourquoi le message d'erreur n'a pas de sens immédiat, car il ne contient que le nom, pas la différence entre les instances de la classe réelle.

Inspectez votre plugin - de quelles classes est-il (ou de quels pots dépend-il)? De quoi dépend-il - vous mentionnez Liferay 7, donc il y a de fortes chances que plusieurs versions de l'API sous-jacente soient disponibles, ce qui entraîne de tels problèmes.

0

Je continue à prendre des approches différentes mais je n'ai pas fait beaucoup de progrès.Oui, quelque part dans la pile il y a un problème. J'utilise JavaMail uniquement pour créer et envoyer un e-mail à partir de mon portlet. Oui, je sais que Liferay a une implémentation de JavaMail mais ne supporte pas DKIM. Je porte tout ce code de 6.0.6 et c'est le seul code que je n'ai pas pu résoudre. Pour autant que je sache, le mail.jar dans le dossier Tomcat home/lib/ext est ce dont j'ai besoin et sans aucune autre approche je l'ai copié dans le dossier lib de mon module et l'ai inclus avec mes autres jars non-maven. J'ai commenté mon code DKIM et juste essayé d'obtenir une routine d'envoi Javamail normale et simple pour travailler ... mais pas de chance ... pour l'instant. Toujours en train d'essayer ...