I have a xsd schema from which I'm generating some java classes. I'm using jaxb for the generation.
I want to be able to generate a class annotated with @XmlRootElement
, but I want the @XmlRootElement name property to be different than the name of the generated class.
In my xsd I'm defining the following:
<xs:element name="customer">
<xs:complexType>
<xs:sequence>
....
</xs:sequence>
</xs:complexType>
</xs:element>
This piece of code generates the following java class:
@XmlRootElement(name = "customer")
public class Customer {
...
}
The name property of the @XmlRootElement
is the same as the name of the generated Class. I want the generated class name to be CustomerReques
t.
I've tryed to use the jaxb:class
definition to change the classe name. Indeed this option changes the class name but removes the @XmlRootElement
annotation, and I need it to be present.
The following xsd:
<xs:element name="customer">
<xs:complexType>
<xs:annotation>
<xs:appinfo>
<jaxb:class name="CustomerRequest"/>
</xs:appinfo>
</xs:annotation>
<xs:sequence>
</xs:sequence>
</xs:complexType>
</xs:element>
Generates this class:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "customer", propOrder = {
})
public class CustomerRequest {
}
How can I make the property name of the @XmlRootElement
annotation different from the generated class name without loosing the annotation?
Solution update: User Xstian proposed the correct solution using external bindings. Just for further reference, I'll update my own post with the solution converted for using inline bindings:
<xs:element name="customer">
<xs:complexType>
<xs:annotation>
<xs:documentation>Request object for the operation that checks if a customer profile exists.</xs:documentation>
<xs:appinfo>
<annox:annotate>
<annox:annotate annox:class="javax.xml.bind.annotation.XmlRootElement" name="customer"/>
</annox:annotate>
<jaxb:class name="CustomerRequest"/>
</xs:appinfo>
</xs:annotation>
<xs:sequence>
</xs:sequece>
</xs:complexType>
</xs:element>
@javax.xml.bind.annotation.XmlRootElement( name="customer", namespace="yourNamespaceIfYouWant"
) should work instead of the innerannox:annotate
element. (I'm the author.) – Ooze