首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

CXF WebService 客戶端 ClassNotFoundException: javax.mail.MessagingException 解決方案

     編輯:程式設計綜合問答

CXF 內部攔截器鏈(AttachmentInInterceptor)處理 MIME 附件時依賴 JavaMail API,若專案缺少 javax.mail 相關 JAR,啟動 Servlet 時會拋出 ClassNotFoundException: javax.mail.MessagingException。此為經典依賴缺漏問題,非配置錯誤。

錯誤堆疊關鍵片段


java.lang.ClassNotFoundException: javax.mail.MessagingException
    at org.apache.cxf.interceptor.AttachmentInInterceptor.handleMessage(AttachmentInInterceptor.java:62)
    ...
    at org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:129)

解決方案:補全 Maven 依賴


<!-- JavaMail API (JDK 9+ 模組化後需額外引入) -->
<dependency>
    <groupId>com.sun.mail</groupId>
    <artifactId>jakarta.mail</artifactId>
    <version>2.0.1</version>
</dependency>

<!-- 或舊版群組 ID (Java EE 時代) -->
<dependency>
    <groupId>javax.mail</groupId>
    <artifactId>mail</artifactId>
    <version>1.4.7</version>
</dependency>

補充檢查項目

  • Servlet 映射路徑:原配置 <url-pattern>rvices/*</url-pattern> 缺少前導斜線,建議改為 /services/* 或 /*。
  • WebService 介面註解:確認 @WebService、@SOAPBinding 正確,且參數類別可序列化。
  • 類別載入隔離:若部署於應用伺服器(Tomcat、WildFly),確認 JavaMail JAR 放置於共享庫或 WAR WEB-INF/lib,避免雙親委派模型導致找不到類別。

驗證步驟

  1. 加入依賴並重新建構專案。
  2. 啟動伺服器,觀察控制台無 ClassNotFoundException。
  3. 使用 SOAP UI 或自製客戶端發送請求,確認服務正常回應。

CXF 作為成熟 Web Service 框架,核心功能依賴極少,但進階特性(附件、WS-Security、MTOM)常需額外庫,建立完整依賴管理習慣可避免此類低級錯誤。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved