Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

java.lang.LinkageError: loader constraint violation:previously initiated loading for a different type with name "javax/mail/Session"

I am getting the following error when I try to send email using javax.mail-api:

Caused by: java.lang.LinkageError: loader constraint violation: loader (instance of org/apache/felix/framework/BundleWiringImpl$BundleClassLoaderJava5) previously initiated loading for a different type with name "javax/mail/Session"
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
        at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.findClass(BundleWiringImpl.java:2279)
        at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1501)
        at org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:75)
        at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1955)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
        at com.sun.mail.util.PropUtil.getBooleanSessionProperty(PropUtil.java:86)
        at javax.mail.internet.MimeMessage.initStrict(MimeMessage.java:320)
        at javax.mail.internet.MimeMessage.<init>(MimeMessage.java:195)
        at sendEmail(manage.java:216)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at org.apache.camel.component.bean.MethodInfo.invoke(MethodInfo.java:408)
        at org.apache.camel.component.bean.MethodInfo$1.doProceed(MethodInfo.java:279)
        at org.apache.camel.component.bean.MethodInfo$1.proceed(MethodInfo.java:252)

Code:

Public void sendEmail() {
    String to = "[email protected]";
    String from = "[email protected]";
    final String username = "[email protected]";
    final String password = "password";
    Properties properties = new Properties();
    properties.put("mail.smtp.auth", "true");
    properties.put("mail.smtp.starttls.enable", "true");
    properties.put("mail.smtp.host", "smtp.office365.com");
    properties.put("mail.smtp.port", "587");
    Session session = Session.getInstance(properties, new javax.mail.Authenticator() {
        protected PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication(username, password);
        }
    });
    try {
        System.out.println("Inside test");
        Message message = new MimeMessage(session);
        message.setFrom(new InternetAddress(from));
        message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
        message.setSubject("Testing Subject");
        message.setText("This is message body");
        Transport.send(message);
        System.out.println("Sent message successfully....");
     } catch (MessagingException e) {
         throw new RuntimeException(e);
     }
}

My maven dependency:

<dependency>
    <groupId>javax.mail</groupId>
    <artifactId>javax.mail-api</artifactId>
    <version>1.5.5</version>
</dependency>

Please help.

like image 749
user2782405 Avatar asked Dec 31 '15 06:12

user2782405


1 Answers

As suggested in comments, add your dependency to javamail as provided dependency:

<dependency>
        <groupId>com.sun.mail</groupId>
        <artifactId>javax.mail</artifactId>
        <version>1.5.1</version>
        <scope>provided</scope>
</dependency>

This will skip adding duplicate jars which would then be loaded by different classloaders.

If not somehow forced to use old version of javamail you should update to latest which is currently

<dependency>
        <groupId>com.sun.mail</groupId>
        <artifactId>javax.mail</artifactId>
        <version>1.5.5</version>
        <scope>provided</scope>
</dependency>
like image 131
Jan Avatar answered Oct 21 '22 18:10

Jan