JAXB-Schema zu Java Unterschiedlicher XmlRootElement-Name und Klassenname
Ich habe ein xsd-Schema, aus dem ich einige Java-Klassen generiere. Ich benutze Jaxb für die Generation.
Ich möchte in der Lage sein, eine Klasse zu generieren, die mit @ kommentiert is@XmlRootElement
, aber ich möchte, dass sich die Eigenschaft "@XmlRootElement name" vom Namen der generierten Klasse unterscheidet.
n meinem xsd definiere ich Folgendes:
<xs:element name="customer">
<xs:complexType>
<xs:sequence>
....
</xs:sequence>
</xs:complexType>
</xs:element>
Dieser Code generiert die folgende Java-Klasse:
@XmlRootElement(name = "customer")
public class Customer {
...
}
Die Namenseigenschaft des@XmlRootElement
ist derselbe wie der Name der generierten Klasse. Ich möchte, dass der generierte Klassenname @ iCustomerReques
t.
Ich habe versucht, das @ zu verwendjaxb:class
definition, um den Klassennamen zu ändern. Diese Option ändert zwar den Klassennamen, entfernt jedoch das@XmlRootElement
Anmerkung, und ich brauche es anwesend zu sein.
Das folgende 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>
Erzeugt diese Klasse:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "customer", propOrder = {
})
public class CustomerRequest {
}
Wie kann ich den Eigenschaftsnamen des @ erstelle@XmlRootElement
Annotation unterscheidet sich vom generierten Klassennamen, ohne die Annotation zu verlieren?
Lösungsupdate: Benutzer Xstian schlug die richtige Lösung mit externen Bindungen vor. Zur weiteren Bezugnahme aktualisiere ich meinen eigenen Beitrag mit der Lösung, die für die Verwendung von Inline-Bindungen konvertiert wurde:
<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>