java.lang.NoClassDefFoundError: could not initialize class javax.E-mail.internet.InternetAddress
Ich bin versucht, senden Sie eine E-Mail mit der JavaMail API. Hier ist mein code auf der servlet:
package com.lsp.web;
import com.lsp.service.Mailer;
import javax.ejb.EJB;
import javax.mail.MessagingException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet(name = "contact", urlPatterns = {"/contact"})
public class ContactServlet extends SpringInjectedServlet {
@EJB
private Mailer emailBean;
@Override
public void init() throws ServletException {
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String customerEmail = req.getParameter("email");
String subject = req.getParameter("subject");
String body = req.getParameter("message");
String error = null;
String succMess = null;
try {
javax.mail.internet.InternetAddress ia = new javax.mail.internet.InternetAddress(customerEmail);
ia.validate();
emailBean.send(customerEmail, subject, body);
req.setAttribute("succMessage", succMess);
req.getRequestDispatcher("sent.jsp").forward(req, resp);
} catch (javax.mail.internet.AddressException ae) {
error = "您指出的邮箱地址不存在";
req.setAttribute("errorMessage", error);
req.getRequestDispatcher("contact.jsp").forward(req, resp);
}
catch (MessagingException mex) {
error = "发送失败";
req.setAttribute("errorMessage", error);
req.getRequestDispatcher("contact.jsp").forward(req, resp);
}
}
}
In der Zeile, wo ich prüfen, ob der Benutzer die Adresse wo:
javax.mail.internet.InternetAddress ia = new javax.mail.internet.InternetAddress(customerEmail);
ia.validate();
Bekam ich eine Ausnahme.
java.lang.NoClassDefFoundError: could not initialize class javax.E-mail.internet.InternetAddress
In pom.xml ich fügte diese Zeilen:
<!--JavaMail API-->
<dependency>
<groupId>javax.mail</groupId>
<artifactId>javax.mail-api</artifactId>
<version>1.5.1</version>
</dependency>
<!--EJB-->
<dependency>
<groupId>javax.ejb</groupId>
<artifactId>ejb-api</artifactId>
<version>3.0</version>
</dependency>
Ich bin mit Tomcat.
Könnte mir jemand sagen, warum dies passiert und wie kann ich das Problem lösen.
Danke.
- Sie scheinen zu fehlen die entsprechenden Java-EE-Bibliotheken.
- Wie sind Sie mit der Kompilierung und Ausführung von code? Sie müssen sicherstellen, dass Sie alle notwendigen Bibliotheken in den classpath, nicht nur bei der Erstellung, aber auch wenn der code ausgeführt wird.
- Wie werden Sie den Aufbau und die Ausführung Ihrer Anwendung? Sind Sie mit Maven? Wenn dem so ist, würde es wahrscheinlich helfen, wenn Sie zeigen Sie uns Ihre pom.xml Datei.
- Ja, und ich bin mit maven zu.
- Ist javamail auf Ihrem classpath?
- Ja, ich habe C:\Users\Weiqian Wu\Desktop\javax.mail.jar zum Klassenpfad in der Klima-Variablen.
- Nicht auf die Klima-Variablen, es sollte auf den classpath des Containers
- Ich habe soeben meine container.
- Also, wenn Sie wählen Sie Ihr Projekt aus -> Rechte Maustaste ->Build-Pfad -> klicken Sie auf " Configure Build Path , sehen Sie mail.jar in Ihren Bibliotheken?wenn ja, dann sollten Sie vielleicht überprüfen Sie den Wert der customerEmail der Sie immer von request-Parametern. (vorausgesetzt, Sie sind mit Eclipse)
- Ich bin mit IntelliJ obwohl. Ich Hinzugefügt activation.jar und setzen Sie in Abhängigkeit von pom.xml. Es gibt mir immer noch java.lang.NoClassDefFoundError: could not initialize class javax.E-mail.internet.InternetAddress. Kann mir jemand sagen, was falsch gelaufen ist?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erhalten Sie einen java.lang.NoClassDefFoundError, was bedeutet, dass die JVM kann nicht initialisieren die Klasse, nicht, dass es nicht die Klasse zu finden, das wäre eine ClassNotFoundException. Ein NoClassDefFoundError kann verursacht werden durch eine ClassNotFoundException das muss aber nicht der Fall.
In Ordnung, die Ursache zu finden, stoppen Sie den server, löschen Sie das Protokoll, und starten Sie erneut. Dann den Fehler reproduzieren und versuchen, finden die erste Ausnahme und Ihre Ursachen in deiner log-Datei. Wenn Sie Glück haben, ist die Ursache für den NoClassDefFoundError.
Könnten Sie auch angeben, in Ihrer Frage, welche server Sie verwenden. Es könnte einen Unterschied machen wie, den Fehler zu lösen.
Hinzufügen der Abhängigkeit zur build-time tut nichts, um die Abhängigkeit zur Verfügung Tomcat zur Laufzeit. Müssen Sie den javax.mail.jar Datei in das WEB-INF/lib-Verzeichnis Ihrer Anwendung oder auf dem Tomcat-lib-Verzeichnis.
Natürlich, Sie würden nicht dieses problem haben, wenn Sie mit einer vollständigen Java-EE-application-server anstelle von Tomcat... 🙂
Finden Sie unter: https://stackoverflow.com/a/28935760/1128668 Sie haben enthalten die
mail-api.jar
in Ihrem Projekt. Das ist die API-Spezifikation nur. Die Lösung ist, ersetzen Sie diese:mit der Referenz-Implementierung der api:
Ich weiß, es hat Sonne in den Paket-Namen, aber das ist die neueste version.