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>

Antworten auf die Frage(1)

Ihre Antwort auf die Frage