WildFly27+JakartaEE10部署WebService成功,但JUnit测试失败求助
排查RuntimeModelerException:接口已加@WebService但测试时提示不存在
以下是几个大概率的排查方向:
1. 依赖包版本/冲突问题
- 确保测试依赖使用Jakarta EE 10版本的JAX-WS相关包,而非旧的javax前缀包。比如pom.xml中应引入:
<dependency> <groupId>jakarta.xml.ws</groupId> <artifactId>jakarta.xml.ws-api</artifactId> <version>3.0.0</version> <scope>test</scope> </dependency> - 执行
mvn dependency:tree查看依赖树,排查是否混入了旧版本的javax.xml.ws:jaxws-api(1.x/2.x版本),如果有,通过<exclusions>标签排除冲突依赖。 - 优先使用Jakarta EE BOM统一管理版本,避免版本不一致:
<dependencyManagement> <dependencies> <dependency> <groupId>jakarta.platform</groupId> <artifactId>jakarta.jakartaee-bom</artifactId> <version>10.0.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
2. 注解导入错误
- 检查
AccountWSItf接口中的@WebService注解,必须是jakarta包下的版本,而非旧的javax包:
旧的// 正确导入 import jakarta.jws.WebService; @WebService public interface AccountWSItf { // 接口方法 }javax.jws.WebService在Jakarta EE 10环境下不会被测试客户端识别。
3. 测试客户端API版本不匹配
- 测试代码中使用的JAX-WS客户端类必须对应Jakarta版本,比如:
不要使用旧的import jakarta.xml.ws.Service; import java.net.URL; import org.junit.Test; public class AccountWSTest { @Test public void testServiceInvocation() throws Exception { URL wsdlUrl = new URL("http://localhost:8080/accountws/AccountWSItf?wsdl"); QName serviceQName = new QName("http://jaxws.appserver.edu.cs/", "AccountWSItfService"); // 使用Jakarta版本的Service类 Service service = Service.create(wsdlUrl, serviceQName); AccountWSItf servicePort = service.getPort(AccountWSItf.class); // 调用服务方法 servicePort.someMethod(); } }javax.xml.ws.Service类,否则会无法识别Jakarta注解。
4. 类加载器/IDE配置问题
- 检查IDE项目结构,确认没有引入Java EE的旧库(比如javax.jws-api),所有依赖均为Jakarta EE 10相关。
- 如果使用Arquillian测试WildFly,确保Arquillian容器适配器版本支持WildFly 27和Jakarta EE 10,避免类加载冲突。
内容的提问来源于stack exchange,提问作者ranxero
相关产品推荐
相关产品推荐

