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

jaxb2-maven-plugin生成Eurofiling 2.0 Schema Java代码时的命名冲突与绑定定制失败问题

jaxb2-maven-plugin生成Eurofiling 2.0 Schema Java代码时的命名冲突与绑定定制失败问题

我来帮你分析并解决这个问题:

问题根源

Eurofiling 2.0的Schema里新增了<element name="NullDimension">,而原有的<element name="null-dimension">会被JAXB默认转换成驼峰式的NullDimension类名/工厂方法名,这就导致了ObjectFactory类里的命名冲突——两个元素最终生成了同名的创建方法和类,触发了Two declarations cause a collision错误。

你尝试用绑定定制来解决,但报错的原因是:你用了<property>标签,但它的适用场景不对。<property>是用来定制复杂类型(complexType)内部元素对应的JavaBean属性名,而不是全局元素的类名或工厂方法名。

正确的绑定定制方案

你需要针对全局元素,用<class>(修改生成的类名)或<factoryMethod>(修改ObjectFactory中的创建方法名)来规避冲突。以下是两种可行的绑定配置:

方案1:重命名新增的NullDimension元素对应的类和工厂方法

创建一个绑定文件(比如src/main/resources/eurofiling-bindings.xjb),内容如下:

<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
               xmlns:xs="http://www.w3.org/2001/XMLSchema"
               xmlns:model="http://www.eurofiling.info/eu/fr/xbrl/ext/model"
               version="2.1">

    <jaxb:bindings schemaLocation="http://www.eurofiling.info/eu/fr/xbrl/ext/model.xsd">
        <!-- 精准匹配2023年新增的NullDimension元素 -->
        <jaxb:bindings node="//xs:element[@name='NullDimension' and @model:fromDate='2023-01-01']">
            <!-- 修改生成的类名 -->
            <jaxb:class name="NullDimensionV2"/>
            <!-- 修改ObjectFactory中的创建方法名 -->
            <jaxb:factoryMethod name="createNullDimensionV2"/>
        </jaxb:bindings>
    </jaxb:bindings>
</jaxb:bindings>

方案2:重命名旧的null-dimension元素对应的类和工厂方法

如果你想保留新元素的名称,也可以修改旧元素的绑定:

<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
               xmlns:xs="http://www.w3.org/2001/XMLSchema"
               xmlns:model="http://www.eurofiling.info/eu/fr/xbrl/ext/model"
               version="2.1">

    <jaxb:bindings schemaLocation="http://www.eurofiling.info/eu/fr/xbrl/ext/model.xsd">
        <jaxb:bindings node="//xs:element[@name='null-dimension']">
            <jaxb:class name="NullDimensionOriginal"/>
            <jaxb:factoryMethod name="createNullDimensionOriginal"/>
        </jaxb:bindings>
    </jaxb:bindings>
</jaxb:bindings>

配置jaxb2-maven-plugin加载绑定文件

最后,你需要在maven插件的配置中指定绑定文件的路径,否则插件不会应用你的定制:

<configuration>
    <sources>
        <source>...</source>
    </sources>
    <locale>en</locale>
    <!-- 新增绑定文件配置 -->
    <bindingFiles>
        <bindingFile>src/main/resources/eurofiling-bindings.xjb</bindingFile>
    </bindingFiles>
</configuration>

这样重新运行插件,命名冲突应该就能解决了。

备注:内容来源于stack exchange,提问作者Prophet

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 07:00:32