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.
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>