升级至JDK17后部分.xsd文件未生成,求排查方向
结合你的升级场景(Java 11→17、Spring Boot 2.7→3.4,jaxws-maven-plugin 4.0.3),可以从以下几个方面入手排查:
检查JAX-WS版本的默认行为变化
Java 17移除了JDK自带的JAX-WS模块,你现在用的是基于Jakarta EE规范的com.sun.xml.ws插件,和旧版本(基于Java EE)的默认行为差异很大。新版本可能默认将部分XSD内联到WSDL中,而非生成单独文件。你可以打开生成的WSDL,查看是否包含<xs:schema>标签,里面是否有原本应该单独生成的XSD内容。调整wsgen插件的配置参数
当前配置里没有明确控制XSD生成的参数,可以尝试添加以下配置项:- 加入
<inlineSchemas>false</inlineSchemas>:强制不内联XSD,生成单独文件 - 加入
<schemaDirectory>${project.build.directory}/wsdl</schemaDirectory>:明确指定XSD生成目录(部分版本需要单独配置,而非仅依赖resourceDestDir)
另外确认<extension>设为false是否符合需求,扩展模式下XSD生成逻辑可能不同。
- 加入
检查代码中JAXB注解的迁移情况
Spring Boot 3.x使用Jakarta EE规范,所有JAXB相关注解已从javax.xml.bind.annotation.*迁移到jakarta.xml.bind.annotation.*。如果代码里还在使用旧的javax包下的注解(比如@XmlType、@XmlRootElement),新版本JAXB会无法识别这些类,导致对应XSD不生成。逐一检查SOAP接口相关的实体类和接口,确保注解包路径正确。分析wsgen的详细日志
你已经开启了<verbose>true</verbose>和<xdebug>true</xdebug>,运行mvn compile时仔细查看控制台输出。日志会显示哪些类被扫描、是否生成对应XSD,有没有跳过类的提示(比如“Class X is not annotated, skipping schema generation”或“Schema for class Y is inlined into WSDL”),这些信息能直接定位问题。排查依赖冲突或缺失
Spring Boot 3.x依赖的JAX-WS、JAXB都是Jakarta版本,确保pom.xml里没有混合javax.*和jakarta.*的相关依赖。如果还存在javax.xml.ws-api或javax.xml.bind-api,会和Jakarta版本依赖冲突,导致部分类无法被正确处理。可以用mvn dependency:tree查看依赖树排查冲突。对比新旧SEI及关联类的差异
检查iway.ws.QueryWS接口及其关联的参数、返回值类:- 是否有类新增了
@XmlTransient注解,导致不生成XSD - 类的访问修饰符是否从
public变为包私有(JAXB仅能处理public类) - 是否有类结构被简化,不再需要单独生成XSD
- 是否有类新增了
内容的提问来源于stack exchange,提问作者escee999

