JAXB – Property “Value” is already defined. Use to resolve this conflict

The answer lies in making use of JAXB bindings (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>

The XPath expressions locate the nodes and renames it, thereby avoiding the naming conflict.

Using this bindings XML file, the generated Java class ends up having the desired getValueAttribute() (as well as the getValue()).

Leave a Comment