JDK8迁移至JDK11时JAX-WS库报错无法实例化WS的问题咨询
问题根本原因
你遇到的报错核心是JAXB依赖版本不兼容:当前pom中jaxb-core使用3.0.2版本、jaxb-impl使用2.3.1版本,3.x版本属于Jakarta EE规范,包名和API结构已经重构,和2.x版本的javax命名空间实现完全不兼容,导致找不到com.sun.xml.bind.v2.model.nav.ReflectionNavigator.getInstance()方法。
修复方案
1. 统一替换JAX-WS/JAXB依赖
删除你当前pom中所有零散添加的JAX-WS、JAXB相关依赖,替换为以下统一版本的依赖组(保持javax命名空间兼容旧代码,适配JDK11):
<!-- JAXB 统一2.3.x版本组 --> <dependency> <groupId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactId> <version>2.3.1</version> </dependency> <dependency> <groupId>com.sun.xml.bind</groupId> <artifactId>jaxb-core</artifactId> <version>2.3.0.1</version> </dependency> <dependency> <groupId>com.sun.xml.bind</groupId> <artifactId>jaxb-impl</artifactId> <version>2.3.1</version> </dependency> <dependency> <groupId>org.glassfish.jaxb</groupId> <artifactId>jaxb-runtime</artifactId> <version>2.3.1</version> </dependency> <!-- JAX-WS 统一2.3.1版本组 --> <dependency> <groupId>javax.xml.ws</groupId> <artifactId>jaxws-api</artifactId> <version>2.3.1</version> </dependency> <dependency> <groupId>com.sun.xml.ws</groupId> <artifactId>jaxws-rt</artifactId> <version>2.3.1</version> <exclusions> <exclusion> <groupId>com.sun.xml.bind</groupId> <artifactId>*</artifactId> </exclusion> </exclusions> </dependency> <!-- SAAJ 依赖保留适配版本 --> <dependency> <groupId>com.sun.xml.messaging.saaj</groupId> <artifactId>saaj-impl</artifactId> <version>1.5.1</version> </dependency>
同时删除pom中原有以下冲突依赖:
- 版本为3.0.2的
jaxb-core - 版本为2.2.10的
com.sun.xml.ws:rt - 多余的
javax.jws:jsr181-api
2. 重新生成WSDL对应Java类
你之前手动复制的生成类可能存在JDK版本适配问题,调整插件配置后自动生成即可:
- 删除项目中手动复制的
com.ca.unicenterserviceplus.servicedesk包下所有类 - 更新jaxws-maven-plugin配置,添加版本适配:
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>jaxws-maven-plugin</artifactId> <version>2.6</version> <executions> <execution> <goals> <goal>wsimport</goal> </goals> <configuration> <wsdlUrl>http://defect.management.system/ServiceDefinition?wsdl</wsdlUrl> <packageName>com.ca.unicenterserviceplus.servicedesk</packageName> <sourceDestDir>${project.build.directory}/generated-sources/wsimport</sourceDestDir> <target>2.2</target> </configuration> </execution> </executions> <dependencies> <dependency> <groupId>com.sun.xml.ws</groupId> <artifactId>jaxws-tools</artifactId> <version>2.3.1</version> </dependency> </dependencies> </plugin>
- 插件会自动将生成的代码加入编译路径,不需要手动复制,避免版本不同步问题。
3. 清理缓存重新构建
执行以下命令强制更新依赖、重新构建:
mvn clean install -U
如果仍然存在依赖冲突,可以执行mvn dependency:tree检查其他第三方包是否间接引入了不同版本的JAXB/JAX-WS依赖,排除对应冲突包即可。
内容的提问来源于stack exchange,提问作者AlSteve
相关产品推荐
相关产品推荐

