JAXB - 属性“值";已经定义了.使用 <jaxb:property>解决这个冲突

使用 JAXB 生成 XML 绑定类.

架构基于一组旧版 XML 文件,并包含以下代码段:

<xs:complexType name="MetaType">
    <xs:simpleContent>
        <xs:extension base="xs:string">
            <xs:attribute type="xs:string" name="Name" />
            <xs:attribute type="xs:string" name="Scheme" />
            <xs:attribute type="xs:string" name="Value" />
        </xs:extension>
    </xs:simpleContent>
</xs:complexType>

'Value'属性与xs:string的'value'属性冲突,代码生成失败,报错:

com.sun.istack.SAXParseException2: Property "Value" is already defined. Use &lt;jaxb:property> to resolve this conflict. 
wuyunlong_ 回答:JAXB - 属性“值";已经定义了.使用 &lt;jaxb:property&gt;解决这个冲突

答案在于利用 JAXB 绑定(site-template.xjb):

<bindings xmlns="http://java.sun.com/xml/ns/jaxb"
          xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance"
          xmlns:xs="http://www.w3.org/2001/XMLSchema"
          version="2.1">
    <bindings schemaLocation="site-template.xsd" version="1.0">
        <!-- Customise the package name -->
        <schemaBindings>
            <package name="com.example.schema"/>
        </schemaBindings>

        <!-- rename the value element -->
        <bindings node="//xs:complexType[@name='MetaType']">
            <bindings node=".//xs:attribute[@name='Value']">
                <property name="ValueAttribute"/>
            </bindings>
        </bindings>
    </bindings>
</bindings>

XPath 表达式定位节点并对其进行重命名,从而避免命名冲突.

使用此绑定 XML 文件,生成的 Java 类最终具有所需的 getValueAttribute()(以及 getValue()).

这篇关于JAXB - 属性“值";已经定义了.使用 &lt;jaxb:property&gt;解决这个冲突的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持前端之家!

本文链接:https://www.f2er.com/3178856.html

大家都在问