Spec-Zone.ru › OpenJDK 8

Тип аннотации XmlElementDecl


@Retention(value=RUNTIME)
 @Target(value=METHOD)
public @interface XmlElementDecl

Сопоставляет метод фабрики с XML-элементом.

Использование

Аннотация создает сопоставление между объявлением элемента XML-схемы и методом фабрики элемента, возвращающим экземпляр JAXBElement, представляющий объявление элемента. Как правило, метод фабрики элемента генерируется (и аннотируется) из схемы в класс ObjectFactory в пакете Java, который представляет привязку целевого пространства имен объявления элемента. Таким образом, хотя синтаксис аннотации позволяет использовать @XmlElementDecl для любого метода, семантически его использование ограничено аннотацией метода фабрики элемента. Использование подчиняется следующим ограничениям:
  • Класс, содержащий метод фабрики элемента, аннотированный с помощью @XmlElementDecl, должен быть помечен с помощью XmlRegistry.
  • Метод фабрики элемента должен принимать один параметр, приводимый к Object.

Пример 1: Аннотация на методе фабрики

// Example: code fragment
     @XmlRegistry
     class ObjectFactory {
         @XmlElementDecl(name="foo")
         JAXBElement<String> createFoo(String s) { ... }
     }
<!-- XML input -->
       <foo>string

     // Example: code fragment corresponding to XML input
     JAXBElement o =
     (JAXBElement)unmarshaller.unmarshal(aboveDocument);
     // print JAXBElement instance to show values
     System.out.println(o.getName());   // prints  "{}foo"
     System.out.println(o.getValue());  // prints  "string"
     System.out.println(o.getValue().getClass()); // prints "java.lang.String"

     <!-- Example: XML schema definition -->
     <xs:element name="foo" type="xs:string"/>

Пример 2: Объявление элемента с областью действия, отличной от локальной

Следующий пример иллюстрирует использование параметра аннотации области действия при привязке объявления элемента в коде, полученном из схемы.

Следующий пример может быть заменен в будущих версиях этой документации.

<!-- Example: XML schema definition -->
     <xs:schema>
       <xs:complexType name="pea">
         <xs:choice maxOccurs="unbounded">
           <xs:element name="foo" type="xs:string"/>
           <xs:element name="bar" type="xs:string"/>
         </xs:choice>
       </xs:complexType>
       <xs:element name="foo" type="xs:int"/>
     </xs:schema>
// Example: expected default binding
     class Pea {
         @XmlElementRefs({
             @XmlElementRef(name="foo",type=JAXBElement.class)
             @XmlElementRef(name="bar",type=JAXBElement.class)
         })
         List<JAXBElement<String>> fooOrBar;
     }

     @XmlRegistry
     class ObjectFactory {
         @XmlElementDecl(scope=Pea.class,name="foo")
         JAXBElement createPeaFoo(String s);

         @XmlElementDecl(scope=Pea.class,name="bar")
         JAXBElement createPeaBar(String s);

         @XmlElementDecl(name="foo")
         JAXBElement createFoo(Integer i);
     }
Без области действия createFoo и createPeaFoo станут неоднозначными, так как оба они сопоставляются с элементом XML-схемы с тем же локальным именем «foo».
С момента:
JAXB 2.0
См. также:
XmlRegistry

Обязательные элементы

Модификатор и тип Обязательный элемент и описание
String name

локальное имя XML-элемента.

Необязательные элементы

Модификатор и тип Необязательный элемент и описание
String defaultValue

Значение по умолчанию для этого элемента.

String namespace

Имя пространства имен XML-элемента.

Class scope

Область действия сопоставления.

String substitutionHeadName

Локальное XML-имя заголовка группы подстановки.

String substitutionHeadNamespace

Имя пространства имен заголовка XML-элемента группы подстановки.

Элементы

name

public abstract String name

локальное имя XML-элемента.

Примечание для рецензентов: Нет имени по умолчанию; поскольку аннотация находится на методе фабрики, неясно, можно ли получить имя метода из имени метода фабрики.

См. также:
namespace()

scope

public abstract Class scope

область действия сопоставления.

Если это не XmlElementDecl.GLOBAL, то сопоставление данного объявления элемента действует только в пределах указанного класса.

Значение по умолчанию:
javax.xml.bind.annotation.XmlElementDecl.GLOBAL.class

namespace

public abstract String namespace

имя пространства имен XML-элемента.

Если значение равно «##default», тогда значение — это имя пространства имен для пакета класса, содержащего этот метод фабрики.

См. также:
name()
Значение по умолчанию:
«##default»

substitutionHeadNamespace

public abstract String substitutionHeadNamespace

имя пространства имен заголовка XML-элемента группы подстановки.

Это указывает имя пространства имен XML-элемента, локальное имя которого указано в substitutionHeadName().

Если susbtitutionHeadName() равно «», то это значение может быть только «##default». Но это значение игнорируется, так как этот элемент не является частью группы подстановки, когда значение susbstitutionHeadName() равно «».

Если susbtitutionHeadName() не равно «» и значение равно «##default», тогда имя пространства имен — это имя пространства имен, к которому сопоставляется пакет содержащего класса, помеченный с помощью XmlRegistry.

Если susbtitutionHeadName() не равно «» и значение не равно «##default», тогда значение — это имя пространства имен.

См. также:
substitutionHeadName()
Значение по умолчанию:
«##default»

substitutionHeadName

public abstract String substitutionHeadName

Локальное XML-имя заголовка группы подстановки.

Если значение равно «», то этот элемент не является частью группы подстановки.

См. также:
substitutionHeadNamespace()
Значение по умолчанию:
«»

defaultValue

public abstract String defaultValue

Значение по умолчанию для этого элемента.

Указанное в качестве значения по умолчанию для этого элемента аннотации используется как замена null для того, чтобы реализации могли распознать состояние «нет значения по умолчанию».

Значение по умолчанию:
«\u0000»

© 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