Схема JAXB для Java Различное имя XmlRootElement и имя класса
У меня есть схема xsd, из которой я генерирую некоторые классы Java. Я использую Jaxb для поколения.
Я хочу иметь возможность создавать класс с пометкой@XmlRootElement
, но я хочу, чтобы свойство имени @XmlRootElement отличалось от имени сгенерированного класса.
В моем xsd я определяю следующее:
<xs:element name="customer">
<xs:complexType>
<xs:sequence>
....
</xs:sequence>
</xs:complexType>
</xs:element>
Этот кусок кода генерирует следующий класс Java:
@XmlRootElement(name = "customer")
public class Customer {
...
}
Имя свойства@XmlRootElement
совпадает с именем сгенерированного класса. Я хочу, чтобы сгенерированное имя класса былоCustomerReques
т.
Я пытался использоватьjaxb:class
определение, чтобы изменить имя класса. Действительно, эта опция изменяет имя класса, но удаляет@XmlRootElement
аннотации, и мне нужно, чтобы она присутствовала.
Следующий 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>
Создает этот класс:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "customer", propOrder = {
})
public class CustomerRequest {
}
Как я могу сделать имя свойства@XmlRootElement
аннотация отличается от сгенерированного имени класса без потери аннотации?
Обновление решения: Пользователь Xstian предложил правильное решение с использованием внешних привязок. Просто для дальнейшего ознакомления я обновлю свой собственный пост решением, преобразованным для использования встроенных привязок:
<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>