Spring Boot WebService服務發布失敗:如何解決Jar包缺失導致的java.lang.NoClassDefFoundError異常?

Spring Boot WebService服務發布失敗:如何解決Jar包缺失導致的java.lang.NoClassDefFoundError異常?

spring Boot WebService部署失敗:排查Jar包缺失問題

spring boot中構建WebService服務時,部署和運行問題時有發生。本文分析一個常見的案例:“Spring Boot構建的WebService服務發布測試失敗,提示找不到Jar包”。

問題描述:

運行程序時拋出Java.lang.NoClassDefFoundError: org/eclipse/jetty/server/SessionManager異常,表明找不到org.eclipse.jetty.server.SessionManager類。該錯誤出現在使用CXF框架發布WebService服務時。錯誤信息片段如下:

立即學習Java免費學習筆記(深入)”;

20:45:16.837 [main] DEBUG org.apache.cxf.resource.DefaultResourceManager - resolving resource <org.apache.cxf.wsdl11.WSDLManagerImpl> type <interface org.apache.cxf.Bus> 20:45:16.837 [main] DEBUG org.apache.cxf.resource.DefaultResourceManager - resolving resource <null> type <interface org.apache.cxf.Bus> 20:45:16.932 [main] DEBUG org.apache.cxf.transport.http_jetty.JettyHttpServerEngineFactory - creating jetty http server engine for port 8000. Exception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/jetty/server/SessionManager     at org.apache.cxf.transport.http_jetty.JettyHttpServerEngineFactory.getOrCreate(JettyHttpServerEngineFactory.java:116)     ... Caused by: java.lang.ClassNotFoundException: org.eclipse.jetty.server.SessionManager     at java.net.URLClassLoader.findClass(URLClassLoader.java:382)     ...

錯誤提示缺少Jetty相關的Jar包,而Jetty是CXF默認使用的HTTP服務器之一。代碼使用了JaxWsServerFactoryBean發布服務,說明這是一個基于CXF的WebService項目。

問題分析與解決:

根本原因是項目缺少必要的Jetty依賴。雖然可能已添加部分依賴,但這些依賴可能不適用于Spring Boot環境。 Spring Boot推薦使用cxf-spring-boot-starter-jaxws簡化CXF集成。此外,還需要添加cxf-rt-transports-http-jetty和cxf-rt-transports-websocket (如果需要Websocket支持)來支持Jetty HTTP傳輸和Websocket傳輸。

正確的依賴配置如下:

<dependency>     <groupId>org.apache.cxf</groupId>     <artifactId>cxf-spring-boot-starter-jaxws</artifactId>     <version>3.5.5</version> </dependency> <dependency>     <groupId>org.apache.cxf</groupId>     <artifactId>cxf-rt-transports-websocket</artifactId>     <version>3.5.5</version> </dependency> <dependency>     <groupId>org.apache.cxf</groupId>     <artifactId>cxf-rt-transports-http-jetty</artifactId>     <version>3.5.5</version> </dependency>

添加這些依賴后,項目將包含Jetty相關的類,解決java.lang.NoClassDefFoundError: org/eclipse/jetty/server/SessionManager異常,成功發布WebService服務。 請根據實際情況選擇合適的版本號,例如替換3.5.5為最新穩定版本。

? 版權聲明
THE END
喜歡就支持一下吧
點贊6 分享