Тип аннотации 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.