You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用JAXB XJC生成Java类时如何解决XSD属性冲突?

解决XSD生成Java类时的"Lang"属性冲突问题

问题原因

xhtml1-strict.xsd中同时定义了xml:lang属性和lang属性,JAXB默认会将这两个属性映射为同名的Java属性Lang,导致命名冲突,触发Property "Lang" is already defined错误。

修复方案

通过JAXB绑定文件(.xjb)给冲突的其中一个属性重命名,避免名称重复。具体操作如下:

1. 修改绑定文件

更新你的cwe-bindings.xjb文件,精准定位xhtml schema中的冲突属性,将其中一个重命名(比如把lang属性改为HtmlLang):

<!-- cti-domain/src/main/xjb/cwe-bindings.xjb -->
<jxb:bindings version="1.0"
              xmlns:jxb="https://jakarta.ee/xml/ns/jaxb"
              xmlns:xsd="http://www.w3.org/2001/XMLSchema">

    <!-- 绑定CWE schema到指定包 -->
    <jxb:bindings schemaLocation="../../../../_schema_/cwe/cwe_schema_v6.10.xsd" node="//xsd:schema">
        <jxb:schemaBindings>
            <jxb:package name="com.example.cwe"/>
        </jxb:schemaBindings>
    </jxb:bindings>

    <!-- 处理xhtml schema中的Lang属性冲突 -->
    <jxb:bindings schemaLocation="http://www.w3.org/2002/08/xhtml/xhtml1-strict.xsd" node="//xsd:schema">
        <!-- 定位到lang属性,重命名为HtmlLang -->
        <jxb:bindings node="//xsd:attribute[@name='lang']">
            <jxb:property name="HtmlLang"/>
        </jxb:bindings>
    </jxb:bindings>
</jxb:bindings>

2. 关键说明

  • 精准定位属性:用//xsd:attribute[@name='lang']找到xhtml schema中定义的lang属性,而非xml:lang(后者对应XML标准属性,默认映射为XmlLang)
  • 重命名属性:通过jxb:property将该属性的Java名称改为不冲突的名字(比如HtmlLang)

3. 验证配置

确保jaxb2-maven-plugin的xjbSources路径正确指向包含绑定文件的目录,插件会自动读取该目录下的所有.xjb文件。

4. 重新生成类

运行Maven命令重新生成Java类:

mvn jaxb2:xjc

额外提示

如果本地存储了xhtml1-strict.xsd文件,可将schemaLocation改为本地路径,避免构建时远程拉取,提升稳定性。

内容的提问来源于stack exchange,提问作者1Z10

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 11:46:02