xjc与jaxws-maven-plugin新版中accessExternalSchema是否仍适用?
Spring Boot 3升级中JAX-WS Maven插件参数问题解答
我们在将Spring Boot项目升级至Spring Boot 3时,同步将JAX-WS Maven Plugin依赖更新为Eclipse基金会托管的版本,当前使用的插件配置如下:
<plugin> <groupId>com.sun.xml.ws</groupId> <artifactId>jaxws-maven-plugin</artifactId> <version>4.0.1</version> <configuration> <xjcArgs> <xjcArg>-mark-generated</xjcArg> </xjcArgs> <encoding>UTF-8</encoding> <extension>true</extension> <!-- Needed with JAXP 1.5 --> <vmArgs> <vmArg>-Djavax.xml.accessExternalSchema=all</vmArg> </vmArgs> </configuration> </plugin>
针对以下两个问题解答如下:
1. -Djavax.xml.accessExternalSchema=all是否仍具有相关性?
是的,该参数目前仍有相关性:
- Spring Boot 3基于Jakarta EE 9+,虽然API命名空间从
javax迁移到jakarta,但当前使用的jaxws-maven-plugin 4.0.1(Eclipse托管版本)仍兼容旧的javax前缀系统参数。 - JAXP的安全限制默认会阻止外部Schema文件的访问,若你的项目XSD包含外部引用,构建过程中xjc工具加载这些外部XSD时必须通过该参数放宽限制,否则会抛出权限异常。
- 即使项目已切换到Jakarta API,只要xjc工具在处理Schema时依赖的底层JAXP实现仍遵循旧的安全配置逻辑,该参数就依然需要。
2. 该参数是否会在未来迁移/重命名为-Djakarta.xml.accessExternalSchema=all?
是的,该参数必然会完成迁移:
- 随着Jakarta EE生态的全面演进,所有原
javax前缀的系统参数都会逐步迁移到jakarta命名空间下。 - 目前Eclipse托管的JAX-WS/JAXB工具已经开始支持
jakarta前缀的该参数,建议现在就切换使用-Djakarta.xml.accessExternalSchema=all,避免后续插件版本升级时出现兼容性问题,同时也符合Jakarta EE的规范方向。
内容的提问来源于stack exchange,提问作者wra
相关产品推荐
相关产品推荐

