Тип аннотации XmlType
@Retention(value=RUNTIME) @Target(value=TYPE) public @interface XmlType
Сопоставляет класс или тип перечисления с типом схемы XML.
Использование
Аннотация @XmlType может использоваться со следующими элементами программы:
- класс верхнего уровня
- тип перечисления
Дополнительную общую информацию см. в разделе "Спецификация пакета" в javadoc пакета javax.xml.bind.
Сопоставление класса
Класс сопоставляется с типом схемы XML. Класс является контейнером данных для значений, представленных свойствами и полями. Тип схемы является контейнером данных для значений, представленных компонентами схемы в модели содержимого типа схемы (например, группы моделей, атрибуты и т.д.).
Для сопоставления класс должен иметь либо публичный конструктор без аргументов, либо статический метод фабрики без аргументов. Статический метод фабрики может быть указан в элементах аннотации factoryMethod() и factoryClass(). Статический метод фабрики или конструктор без аргументов используются при размаршировании для создания экземпляра этого класса. Если оба присутствуют, статический метод фабрики переопределяет конструктор без аргументов.
Класс сопоставляется либо со сложным типом схемы XML, либо с простым типом схемы XML. Тип XML-схемы определяется на основе сопоставления свойств и полей JavaBean, содержащихся в классе. Тип схемы, к которому сопоставляется класс, может быть именованным или анонимным. Класс может быть сопоставлен с анонимным типом схемы путем аннотирования класса с помощью @XmlType(name="").
С анонимным типом может быть связан либо глобальный элемент, либо локальный элемент, либо локальный атрибут следующим образом:
-
глобальный элемент: Глобальный элемент анонимного типа может быть получен путем аннотирования класса с помощью @
XmlRootElement. См. пример 3 ниже. - локальный элемент: Свойство JavaBean, которое ссылается на класс, аннотированный @XmlType(name=""), и сопоставляется с элементом, связанным с анонимным типом. См. пример 4 ниже.
- атрибут: Свойство JavaBean, которое ссылается на класс, аннотированный @XmlType(name=""), и сопоставляется с атрибутом, связанным с анонимным типом. См. пример 5 ниже.
- Если класс аннотирован с
@XmlType(name=""), он сопоставляется с анонимным типом, в противном случае имя класса сопоставляется с именем сложного типа. Элемент аннотацииXmlName()может использоваться для настройки имени. - Свойства и поля, которые сопоставляются с элементами, сопоставляются с моделью содержимого в сложном типе. Элемент аннотации
propOrder()может использоваться для настройки модели содержимого наxs:allилиxs:sequence. Он используется для указания порядка XML-элементов вxs:sequence. - Свойства и поля могут быть сопоставлены с атрибутами в сложном типе.
- Целевой префикс типа XML-схемы может быть настроен с помощью элемента аннотации
namespace().
Сопоставление класса с простым типом схемы XML
Класс может быть сопоставлен с простым типом схемы XML с помощью аннотации @XmlValue. Дополнительные сведения и примеры см. в типе аннотации @XmlValue.
В следующей таблице показано сопоставление класса со сложным или простым типом схемы XML. Использованные в таблице обозначения:
- -> : представляет собой сопоставление
- [x]+ : один или более случаев x
- [
@XmlValueсвойство ]: Свойство JavaBean, аннотированное@XmlValue - X : неважно
| Целевой объект | propOrder | Тело класса | Сложный тип | Простой тип | |
| Класс | {} | [свойство]+ -> элементы | complexcontent xs:all | ||
| Класс | не пустое | [свойство]+ -> элементы | complexcontent xs:sequence | ||
| Класс | X | без свойства -> элемент | complexcontent пустая последовательность | ||
| Класс | X | 1 [ @XmlValue свойство] && [свойство]+ -> атрибуты | simplecontent | ||
| Класс | X | 1 [ @XmlValue свойство ]&& без свойств -> атрибут | simpletype |
Сопоставление типа перечисления
Тип перечисления сопоставляется с простым типом схемы XML с факторами перечисления. Следующие элементы аннотации игнорируются, так как они не имеют смысла:propOrder() , factoryMethod() , factoryClass() . Использование с другими аннотациями
Эта аннотация может использоваться со следующими аннотациями: XmlRootElement, XmlAccessorOrder, XmlAccessorType, XmlEnum. Однако XmlAccessorOrder и XmlAccessorType игнорируются при использовании этой аннотации на типе перечисления.
Пример 1: Сопоставление класса со сложным типом с xs:sequence с настроенным порядком свойств JavaBean.
@XmlType(propOrder={"street", "city" , "state", "zip", "name" })
public class USAddress {
String getName() {..};
void setName(String) {..};
String getStreet() {..};
void setStreet(String) {..};
String getCity() {..};
void setCity(String) {..};
String getState() {..};
void setState(String) {..};
java.math.BigDecimal getZip() {..};
void setZip(java.math.BigDecimal) {..};
}
<!-- XML Schema mapping for USAddress -->
<xs:complexType name="USAddress">
<xs:sequence>
<xs:element name="street" type="xs:string"/>
<xs:element name="city" type="xs:string"/>
<xs:element name="state" type="xs:string"/>
<xs:element name="zip" type="xs:decimal"/>
<xs:element name="name" type="xs:string"/>
</xs:all>
</xs:complexType> Пример 2: Сопоставление класса со сложным типом с xs:all
@XmlType(propOrder={})
public class USAddress { ...}
<!-- XML Schema mapping for USAddress -->
<xs:complexType name="USAddress">
<xs:all>
<xs:element name="name" type="xs:string"/>
<xs:element name="street" type="xs:string"/>
<xs:element name="city" type="xs:string"/>
<xs:element name="state" type="xs:string"/>
<xs:element name="zip" type="xs:decimal"/>
</xs:sequence>
</xs:complexType> Пример 3: Сопоставление класса с глобальным элементом с анонимным типом.
@XmlRootElement
@XmlType(name="")
public class USAddress { ...}
<!-- XML Schema mapping for USAddress -->
<xs:element name="USAddress">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="street" type="xs:string"/>
<xs:element name="city" type="xs:string"/>
<xs:element name="state" type="xs:string"/>
<xs:element name="zip" type="xs:decimal"/>
</xs:sequence>
</xs:complexType>
</xs:element> Пример 4: Сопоставление свойства с локальным элементом с анонимным типом.
//Example: Code fragment
public class Invoice {
USAddress addr;
...
}
@XmlType(name="")
public class USAddress { ... }
}
<!-- XML Schema mapping for USAddress -->
<xs:complexType name="Invoice">
<xs:sequence>
<xs:element name="addr">
<xs:complexType>
<xs:element name="name", type="xs:string"/>
<xs:element name="city", type="xs:string"/>
<xs:element name="city" type="xs:string"/>
<xs:element name="state" type="xs:string"/>
<xs:element name="zip" type="xs:decimal"/>
</xs:complexType>
...
</xs:sequence>
</xs:complexType> Пример 5: Сопоставление свойства с атрибутом с анонимным типом.
//Example: Code fragment
public class Item {
public String name;
@XmlAttribute
public USPrice price;
}
// map class to anonymous simple type.
@XmlType(name="")
public class USPrice {
@XmlValue
public java.math.BigDecimal price;
}
<!-- Example: XML Schema fragment -->
<xs:complexType name="Item">
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:attribute name="price">
<xs:simpleType>
<xs:restriction base="xs:decimal"/>
</xs:simpleType>
</xs:attribute>
</xs:sequence>
</xs:complexType> Пример 6: Определение factoryClass и factoryMethod
@XmlType(name="USAddressType", factoryClass=USAddressFactory.class,
factoryMethod="getUSAddress")
public class USAddress {
private String city;
private String name;
private String state;
private String street;
private int zip;
public USAddress(String name, String street, String city,
String state, int zip) {
this.name = name;
this.street = street;
this.city = city;
this.state = state;
this.zip = zip;
}
}
public class USAddressFactory {
public static USAddress getUSAddress(){
return new USAddress("Mark Baker", "23 Elm St",
"Dayton", "OH", 90952);
} Пример 7: Определение factoryMethod и использование по умолчанию factoryClass
@XmlType(name="USAddressType", factoryMethod="getNewInstance")
public class USAddress {
private String city;
private String name;
private String state;
private String street;
private int zip;
private USAddress() {}
public static USAddress getNewInstance(){
return new USAddress();
}
}
- С тех пор:
- JAXB2.0
- См. также:
-
XmlElement,XmlAttribute,XmlValue,XmlSchema
Дополнительные элементы
| Модификатор и тип | Дополнительный элемент и описание |
|---|---|
Class |
factoryClass Класс, содержащий метод фабрики без аргументов для создания экземпляра этого класса. |
String |
factoryMethod Имя метода фабрики без аргументов в классе, указанном в |
String |
name Имя типа схемы XML, к которому сопоставляется класс. |
String |
namespace Имя целевого пространства имен типа схемы XML. |
String[] |
propOrder Указывает порядок XML-элементов, когда класс сопоставляется со сложным типом XML-схемы. |
Элементы
name
public abstract String name
Имя типа схемы XML, к которому сопоставляется класс.
- По умолчанию:
- "##default"
propOrder
public abstract String[] propOrder
Указывает порядок XML-элементов, когда класс сопоставляется со сложным типом XML-схемы.
См. таблицу, чтобы понять, как propOrder влияет на сопоставление класса.
propOrder — это список имен свойств JavaBean в классе. Каждое имя в списке — это имя идентификатора Java свойства JavaBean. Порядок, в котором перечислены свойства JavaBean, является порядком элементов XML-схемы, к которым сопоставляются свойства JavaBean.
Все свойства JavaBean, которые сопоставляются с элементами XML-схемы, должны быть перечислены.
Свойство или поле JavaBean, перечисленные в propOrder, не должны быть transient или аннотированы @XmlTransient.
Порядок по умолчанию для свойств JavaBean определяется аннотацией @XmlAccessorOrder.
- По умолчанию:
- ""
namespace
public abstract String namespace
Имя целевого пространства имен типа XML-схемы. По умолчанию это целевое пространство имен, к которому сопоставляется пакет, содержащий класс.
- По умолчанию:
- "##default"
factoryClass
public abstract Class factoryClass
Класс, содержащий метод фабрики без аргументов для создания экземпляра этого класса. По умолчанию — это текущий класс.
Если factoryClass — DEFAULT.class и factoryMethod — "", то статического метода фабрики нет.
Если factoryClass — DEFAULT.class и factoryMethod — не "", то factoryMethod — имя статического метода фабрики в этом классе.
Если factoryClass — не DEFAULT.class, то factoryMethod не должно быть "" и должно быть именем статического метода фабрики, указанного в factoryClass.
- По умолчанию:
- javax.xml.bind.annotation.XmlType.DEFAULT.class
factoryMethod
public abstract String factoryMethod
Имя метода фабрики без аргументов в классе, указанном в factoryClass factoryClass().
- По умолчанию:
- ""
© 1993, 2020, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.