Spec-Zone.ru › OpenJDK 8

Тип аннотации 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 ниже.
Сопоставление со сложным типом схемы XML
  • Если класс аннотирован с @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

Имя метода фабрики без аргументов в классе, указанном в factoryClass factoryClass().

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.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API