解决IntelliJ IDEA中xjb文件jaxb:extensionBindingPrefixes属性不允许问题
解决JAXB 3.0绑定文件(xjb)中
jaxb:extensionBindingPrefixes属性不允许的错误 问题场景
在IntelliJ IDEA 2023.2.1中处理Maven项目的JAXB 3.0绑定文件时,遇到报错:Attribute jaxb:extensionBindingPrefixes is not allowed here,对应的xjb文件代码如下:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <jaxb:bindings version="3.0" xmlns:jaxb="https://jakarta.ee/xml/ns/jaxb" xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" xmlns:xs="http://www.w3.org/2001/XMLSchema" jaxb:extensionBindingPrefixes="xjc"> <jaxb:globalBindings> <xjc:simple /> <xjc:serializable uid="-1" /> <jaxb:javaType name="java.util.Calendar" xmlType="xs:dateTime" parseMethod="jakarta.xml.bind.DatatypeConverter.parseDateTime" printMethod="jakarta.xml.bind.DatatypeConverter.printDateTime" /> </jaxb:globalBindings> </jaxb:bindings>
原因
Jakarta JAXB 3.0(对应xjb中的version="3.0")调整了绑定文件的Schema规则:extensionBindingPrefixes属性不再允许出现在根<jaxb:bindings>元素上,必须移至<jaxb:globalBindings>元素中。
解决方案
修改xjb文件,将extensionBindingPrefixes="xjc"从根元素移到<jaxb:globalBindings>标签内,移除根元素上的该属性。修改后的完整代码如下:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <jaxb:bindings version="3.0" xmlns:jaxb="https://jakarta.ee/xml/ns/jaxb" xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <jaxb:globalBindings extensionBindingPrefixes="xjc"> <xjc:simple /> <xjc:serializable uid="-1" /> <jaxb:javaType name="java.util.Calendar" xmlType="xs:dateTime" parseMethod="jakarta.xml.bind.DatatypeConverter.parseDateTime" printMethod="jakarta.xml.bind.DatatypeConverter.printDateTime" /> </jaxb:globalBindings> </jaxb:bindings>
关键修改点
- 删除根
<jaxb:bindings>元素上的jaxb:extensionBindingPrefixes="xjc"属性 - 在
<jaxb:globalBindings>标签中添加extensionBindingPrefixes="xjc"属性(无需加jaxb:前缀) - 其余代码保持不变,xjc扩展的命名空间仍使用旧的Java EE命名空间是合法的,因为JAXB 3.0兼容该扩展的命名规则
内容的提问来源于stack exchange,提问作者SpywithJava
相关产品推荐
相关产品推荐

