簡體   English   中英

java.lang.NoClassDefFoundError:無法初始化類javax.mail.internet.InternetAddress

[英]java.lang.NoClassDefFoundError: Could not initialize class javax.mail.internet.InternetAddress

我正在嘗試使用JavaMail API發送電子郵件。 這是我關於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);
    }
}
}

在我檢查用戶地址的行中:

javax.mail.internet.InternetAddress ia = new javax.mail.internet.InternetAddress(customerEmail);
ia.validate();

我有一個例外。 java.lang.NoClassDefFoundError:無法初始化類javax.mail.internet.InternetAddress

在pom.xml中,我添加了以下幾行:

<!--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>

我正在使用Tomcat。 有人可以告訴我為什么會發生這種情況以及如何解決該問題。

謝謝。

您將得到一個java.lang.NoClassDefFoundError,這意味着JVM無法初始化該類,而不是它找不到將為ClassNotFoundException的類。 NoClassDefFoundError可以由ClassNotFoundException引起,但不必如此。

為了找到原因,請停止服務器,刪除日志,然后重新啟動。 然后重現該錯誤,並嘗試在日志文件中找到第一個異常及其原因。 如果幸運的話,這就是NoClassDefFoundError的原因。

您還可以在問題中指出您正在使用哪個服務器。 如何解決錯誤可能有所不同。

在構建時添加依賴項並不能使依賴項在運行時可用於Tomcat。 您需要將javax.mail.jar文件添加到應用程序的WEB-INF / lib目錄或Tomcat的lib目錄中。

當然,如果您使用完整的Java EE應用程序服務器而不是Tomcat,就不會有此問題... :-)

請參閱: https : //stackoverflow.com/a/28935760/1128668您已在項目中包含mail-api.jar 只是 API規范。 解決方法是替換此:

<!-- DO NOT USE - it's just the API, not an implementation -->
<groupId>javax.mail</groupId>
<artifactId>javax.mail-api</artifactId>

與該api的參考實現:

<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>

我知道程序包名稱中包含sun,但這是最新版本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM