You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JSF+Hibernate项目升级JBoss6到WildFly15及Java6到Java8时部署失败

JBoss6→WildFly15 + Java6→Java8升级部署错误解决指南(Hibernate+JSF项目)

咱们把基于Hibernate ORM的JSF项目从JBoss6、Java6升级到WildFly15、Java8后,已经搞定了一些问题,但现在碰到了部署失败的情况,具体错误日志如下:

14:34:43,718 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-4) MSC000001: 启动服务jboss.deployment.unit."nts.war".POST_MODULE失败:org.jboss.msc.service.StartException in service jboss.deployment.unit."nts.war".POST_MODULE: WFLYSRV0153: 处理部署"nts.war"的POST_MODULE阶段失败
	at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:151)
	at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1738)
	at org.jboss.msc.service.ServiceControllerImpl$StartTask.execute(ServiceControllerImpl.java:1700)
	at org.jboss.msc.service.ServiceControllerImpl$ControllerTask.run(ServiceControllerImpl.java:1558)
	at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
	at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1985)
	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1487)
	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1364)
	at java.lang.Thread.run(Thread.java:745)
Caused by: org.jboss.as.server.deployment.DeploymentUnitProcessingException: java.lang.ClassNotFoundException: com.sun.xml.ws.transport.http.servlet.WSServlet from [Module "deployment.nts.war" from Service Module Loader]
	at org.jboss.as.jaxrs.deployment.JaxrsScanningProcessor.checkDeclaredApplicationClassAsServlet(JaxrsScanningProcessor.java:437)
	at org.jboss.as.jaxrs.deployment.JaxrsScanningProcessor.scanWebDeployment(JaxrsScanningProcessor.java:278)
	at org.jboss.as.jaxrs.deployment.JaxrsScanningProcessor.deploy(JaxrsScanningProcessor.java:109)
	at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:144)
	... 8 more
Caused by: java.lang.ClassNotFoundException: com.sun.xml.ws.transport.http.servlet.WSServlet from [Module "deployment.nts.war" from Service Module Loader]
	at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:255)
	at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:410)
	at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:398)
	at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:116)
	at org.jboss.as.jaxrs.deployment.JaxrsScanningProcessor.checkDeclaredApplicationClassAsServlet(JaxrsScanningProcessor.java:435)
	... 11 more
14:35:07,319 ERROR [org.jboss.as.controller.management-operation] (Controller Boot Thread) WFLYCTL0013: 操作("deploy")失败 - 地址: ([("deployment" => "nts.war")]) - 失败描述: {"WFLYCTL0080: 失败的服务" => {"jboss.deployment.unit.\"nts.war\".POST_MODULE" => "WFLYSRV0153: 处理部署\"nts.war\"的POST_MODULE阶段失败 Caused by: org.jboss.as.server.deployment.DeploymentUnitProcessingException: java.lang.ClassNotFoundException: com.sun.xml.ws.transport.http.servlet.WSServlet from [Module \"deployment.nts.war\" from Service Module Loader] Caused by: java.lang.ClassNotFoundException: com.sun.xml.ws.transport.http.servlet.WSServlet from [Module \"deployment.nts.war\" from Service Module Loader]"}}
14:35:07,361 INFO [org.jboss.as.server] (ServerService Thread Pool -- 43) WFLYSRV0010: 已部署"nts.war" (运行时名称: "nts.war")
14:35:07,373 INFO [org.jboss.as.controller] (Controller Boot Thread) WFLYCTL0183: 服务状态报告
WFLYCTL0186: 启动失败的服务: service jboss.deployment.unit."nts.war".POST_MODULE: WFLYSRV0153: 处理部署"nts.war"的POST_MODULE阶段失败
14:35:07,483 INFO [org.jboss.as.server] (Controller Boot Thread) WFLYSRV0212: 恢复服务器
14:35:07,488 INFO [org.jboss.as] (Controller Boot Thread) WFLYSRV0060: HTTP管理接口监听于http://127.0.0.1:9990/management
14:35:07,489 INFO [org.jboss.as] (Controller Boot Thread) WFLYSRV0051: 管理控制台监听于http://127.0.0.1:9990
14:35:07,490 ERROR [org.jboss.as] (Controller Boot Thread) WFLYSRV0026: WildFly Full 15.0.1.Final (WildFly Core 7.0.0.Final) 已启动(存在错误),耗时70466ms - 已启动583个服务中的372个(1个服务启动失败或依赖缺失,324个服务为懒加载、被动或按需启动)
14:35:08,034 INFO [org.jboss.as.protocol] (management I/O-1) WFLYPRT0057: 通过中断线程Thread[management-handler-thread - 1,5,management-handler-thread]取消任务的内容

问题核心分析

这个错误的根源是找不到com.sun.xml.ws.transport.http.servlet.WSServlet类,背后的原因很明确:

  • JBoss6默认自带了Sun/Oracle的JAX-WS实现,所以这个类在旧环境中是现成可用的;
  • WildFly从版本8开始就切换到了Apache CXF作为JAX-WS的默认实现,不再包含Sun的JAX-WS类库;
  • 同时Java8中JAX-WS的API虽然还保留,但具体实现已经从JDK中剥离(Java9及之后完全移除),升级后自然找不到这个类。

可行解决方案

根据项目的实际需求,可以选择以下方案之一:

方案一:引入Sun JAX-WS实现依赖

如果项目必须使用Sun的JAX-WS实现,需要把对应的依赖jar包(比如jaxws-rt.jar)添加到项目的WEB-INF/lib目录下,确保部署时类加载器能找到这个类。

方案二:切换到WildFly自带的Apache CXF实现

这是更推荐的方案,因为WildFly对CXF有原生支持,步骤如下:

  • 检查项目的web.xml,如果配置了WSServlet,将其替换为CXF对应的Servlet:org.apache.cxf.transport.servlet.CXFServlet;
  • 项目中使用的标准JAX-WS注解(比如@WebService、@WebMethod等)基本都和CXF兼容,不需要大幅修改代码,只需调整少量与特定实现相关的配置即可。

方案三:移除无用的JAX-WS相关配置

如果项目根本不需要JAX-WS功能,那可以检查:

  • web.xml中是否有多余的JAX-WS Servlet配置,直接删除;
  • 项目依赖中是否有JAX-WS相关的jar包,移除这些依赖;
  • 这样就能避免WildFly的JAXRS扫描器触发对WSServlet的检查,从而解决错误。

内容的提问来源于stack exchange,提问作者Nourhan Mahmoud Zaki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:22:04