java.lang.LinkageError: loader constraint violation: when resolving method "com.sun.mail.util.PropUtil.getBooleanSessionProperty(Ljavax/mail/Session;Ljava/lang/String;Z)Z" the class loader (instance of org/apache/felix/framework/BundleWiringImpl$BundleClassLoader) of the current class, javax/mail/internet/MimeMessage, and the class loader (instance of org/jboss/modules/ModuleClassLoader) for the method's defining class, com/sun/mail/util/PropUtil, have different Class objects for the type javax/mail/Session used in the signature
I have a custom email service that uses the JavaMail API. On a non-JBoss instance, it works fine. On JBoss, it runs into the LinkageError above.
I can't resolve the LinkageError through normal channels, because a critical class is not loading in the usual way:
!! com.sun.mail.util,version=1.5.0 -- Overwritten by Boot Delegation
The JavaMail bundle exports javax.mail and com.sun.mail.util, but the latter is being overwritten by boot delegation and picking up the JBoss module instead, which has its own class loader.
I am not the first to experience this -- see How to debug LinkageError? , Triggering Assets notifications on AEM Forms(JEE) environment -- but I have yet to find an answer for this. It seems that this issue is consistently triggered by using JavaMail (or GatewayMessageService, or any other JavaMail wrapper) on the JBoss turnkey installation.
How can I change the class loader handling to resolve the LinkageError?