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
stattjavax.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.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als Vorschlag in den Kommentaren, fügen Sie Ihre Abhängigkeit von javamail als zur Verfügung gestellt Abhängigkeit:
Diese überspringen hinzufügen doppelte Gläser, welche dann geladen werden, die von verschiedenen classloadern.
Ob die nicht irgendwie gezwungen, die alten version von javamail sollten Sie aktualisieren, um die neueste der derzeit
Ich hatte ein sehr ähnliches problem (mit
org.keycloak.keycloak-saml-adapter-api-public
), und löste es, indem Sie meinestandalone.xml
, und entfernen diese Zeile:Müssen Sie Ihren server neu starten, nachdem Sie diese änderung. Viel Glück.