java.lang.LinkageError: loader-constraint-Verletzung:zuvor eingeleiteten Belastung für eine andere Art mit dem Namen "javax/mail/Session"

Ich erhalte die folgende Fehlermeldung, wenn ich versuche zu senden E-Mail mit 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);
     }
}

Mein maven-dependency:

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

Bitte helfen.

  • Überprüfen Sie alle Ihre Gläser. Sie haben wahrscheinlich eine andere mail.jar (nicht -api) herum sitzt. Wenn das ist der Fall, markieren Sie E-mail-api-jar "vorgesehen" zu überspringen Verpackungen
  • Sind Sie mit plain-vanilla-Felix, da die Laufzeit? Oder einen container wie Karaf? Dein code funktioniert bei mir in Karaf 4, mit javax.mail statt javax.mail-api als bundle-Abhängigkeit. Wie Jan schon erwähnt, irgendwie hat man am Ende zwei Versionen auf Ihrem bundle-classpath.
  • Ich habe versucht, hinzufügen "zur Verfügung gestellt", aber ich erhalte die gleiche Fehlermeldung.
  • Überprüfen Sie Ihre classpath - für alles E-mail - * und stellen Sie sicher, es ist in allen server-libs oder die Anwendung libs, aber nicht gemischt
  • Ich bin mit karaf sowie (version 3.0.4). Können Sie bitte teilen Sie Ihre Abhängigkeit-code. Ich habe versucht, aber mein Projekt nicht zu bauen, ohne javax.mail-api.
  • Dann sollten Sie Ihre Lösung in eine Antwort und es akzeptieren.
  • Wie beschrieben auf der JavaMail-Projekt Seite, die javax.mail-api-Artefakt ist nur für das kompilieren vor und enthält nur die standard javax.mail-API-Definitionen. Die javax.E-mail-Artefakt umfasst die gesamte Laufzeit-Bibliothek.

InformationsquelleAutor user2782405 | 2015-12-31
Schreibe einen Kommentar