Wildfly 23/24部署Jakarta JWS 3.0 SOAP服务时webservices子系统禁用问题
你对Wildfly自动识别JWS注解完成部署的理解是正确的,符合Jakarta EE规范的应用服务器默认支持该能力,无需手动配置WSServlet。你遇到的问题由webservices子系统未启用、依赖配置冲突两个核心原因导致,可按以下步骤解决:
1. 启用webservices子系统
Wildfly默认的最简启动配置standalone.xml未预装webservices子系统,有两种启用方式:
- 方式1:使用完整版配置启动,启动命令改为
standalone.sh -c standalone-full.xml(Windows为standalone.bat -c standalone-full.xml),该配置默认已启用webservices子系统。 - 方式2:手动给默认配置添加子系统:
- 启动Wildfly后执行命令行工具:
./jboss-cli.sh --connect(Windows为jboss-cli.bat --connect) - 依次执行以下两条命令:
/extension=org.jboss.as.webservices:add() /subsystem=webservices:add()- 重启Wildfly即可生效。
- 启动Wildfly后执行命令行工具:
2. 调整项目依赖配置,避免冲突
Jakarta JWS 3.0相关的API和实现已经内置在Wildfly服务中,项目打包时不需要将这类依赖打入WAR包,否则会出现类冲突导致注解无法被识别。
如果你使用Maven构建项目,需要将JWS相关依赖的scope设置为provided,示例配置如下:
<dependency> <groupId>jakarta.jws</groupId> <artifactId>jakarta.jws-api</artifactId> <version>3.0.0</version> <scope>provided</scope> </dependency>
请检查WAR包的WEB-INF/lib目录,确认不存在jaxws-rt、jaxws-api这类重复的JWS相关依赖包。
3. 验证服务部署
完成上述配置后重新打包部署WAR包,你可以在管理控制台的webservices子系统下看到已部署的服务,也可以直接访问WSDL地址验证服务可用性,默认的WSDL地址格式为:http://<你的服务地址>:8080/<WAR包上下文根>/HelloWorldServerImpl?wsdl。
如果需要自定义上下文根,可以在项目的WEB-INF目录下添加jboss-web.xml文件,配置示例:
<?xml version="1.0" encoding="UTF-8"?> <jboss-web> <context-root>my-ws</context-root> </jboss-web>
配置后WSDL地址对应调整为http://<你的服务地址>:8080/my-ws/HelloWorldServerImpl?wsdl。
内容的提问来源于stack exchange,提问作者Faliorn
相关产品推荐
相关产品推荐

