Ubuntu18.04下运行schemagen生成XML Schema时报SEVERE: null错误如何解决
问题根因
你遇到的类转换异常是系统apt安装的schemagen 2.3.0.1版本和OpenJDK 11内置的javac模块版本不兼容导致的,Java 11起JAXB相关组件从JDK核心模块中移除,系统源中的旧版schemagen没有适配JDK 11的模块机制,所以解析JAXB注解时会抛出错误。
可行解决方案
方案1:切换到OpenJDK 8运行schemagen
Java 8原生内置兼容的JAXB和schemagen工具,无需额外调整依赖,操作步骤:- 执行命令安装OpenJDK 8:
sudo apt install openjdk-8-jdk - 切换当前环境的Java和javac版本:
在弹出的选项中选择OpenJDK 8对应的编号即可sudo update-alternatives --config java sudo update-alternatives --config javac - 重新执行
schemagen Moon.java即可正常生成schema,操作完成后可通过上述同样命令切回Java 11环境
- 执行命令安装OpenJDK 8:
方案2:使用适配JDK 11的高版本JAXB schemagen
不用系统apt安装的schemagen,手动下载高版本JAXB发行包:- 下载JAXB 2.3.3及以上版本的二进制发行包
- 解压后将发行包的bin目录加入当前终端PATH,或直接使用绝对路径调用bin下的schemagen
- 执行命令时指定jaxb相关依赖的classpath:
schemagen -cp /path/to/jaxb/lib/* Moon.java
方案3:通过构建工具插件生成schema
如果是Maven/Gradle管理的项目,直接使用官方jaxb插件生成schema,插件会自动处理版本兼容问题,无需调整本地环境配置。比如Maven可使用jaxb2-maven-plugin,配置待处理的类后执行插件的schemagen目标即可。
内容的提问来源于stack exchange,提问作者yihijes925
相关产品推荐
相关产品推荐

