2

I have this XSD: (fragment)

    <xs:complexType name="complexA">
        <xs:sequence>
            <xs:element ref="abstractA" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>

    <xs:element name="abstractA" abstract="true"/>

    <xs:element name="concreteA" type="concreteComplexA" substitutionGroup="abstractA"/>

    <xs:complexType name="concreteComplexA">
        <xs:attribute name="class" type="classId" use="required"/>
        <xs:attribute name="property" type="namingId" use="required"/>
        <xs:attribute name="value" type="xs:string" use="required"/>
    </xs:complexType>

JAXB outputs a Class called concreteComplexA can I make it to output concreteA name instead?

The XSD is third party so it can't be modified.

Thank you!

Udo.

ssedano
  • 7,943
  • 8
  • 56
  • 95

1 Answers1

5

You can use an external bindings file to control the names of the generated classes. For an example see my answer to a similar question:

The reason why JAXB maps the Java object to the type instead of the element is that for global complex types (as in your example) there may be many global elements referencing it:

<xs:element name="concreteA" type="concreteComplexA" substitutionGroup="abstractA"/>
<xs:element name="anotherConcreteA" type="concreteComplexA" substitutionGroup="abstractA"/>

<xs:complexType name="concreteComplexA">
    <xs:attribute name="class" type="classId" use="required"/>
    <xs:attribute name="property" type="namingId" use="required"/>
    <xs:attribute name="value" type="xs:string" use="required"/>
</xs:complexType>
Community
  • 1
  • 1
bdoughan
  • 142,244
  • 22
  • 280
  • 377