@Retention(value=RUNTIME) @Target(value=METHOD) public @interface XmlElementDecl
Использование
Аннотация создает отображение между объявлением элемента XML-схемы и методом фабрики элемента, который возвращает экземпляр JAXBElement, представляющий объявление элемента. Как правило, метод фабрики элемента сгенерирован (и аннотирован) из схемы в ObjectFactory class в пакете Java, который представляет привязку целевого пространства имен объявления элемента. Таким образом, в то время как синтаксис аннотации позволяет @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 JAXBElemento = (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: объявление Элемента с не локальный контекст
Следующий пример иллюстрирует использование параметра аннотации контекста в привязке объявления элемента в схеме полученный код.
Следующий пример может быть заменен в будущей версии этого javadoc.
<!-- 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Без контекста createFoo и createPeaFoo стал бы неоднозначным, так как они оба отображаются на элемент XML-схемы с тем же самым локальным именем "foo".createPeaFoo(String s); @XmlElementDecl(scope=Pea.class,name="bar") JAXBElement createPeaBar(String s); @XmlElementDecl(name="foo") JAXBElement createFoo(Integer i); }
XmlRegistry
Модификатор и Тип | Необходимый Элемент и Описание |
---|---|
Строка |
имя
локальное имя элемента XML.
|
Модификатор и Тип | Дополнительный Элемент и Описание |
---|---|
Строка |
defaultValue
Значение по умолчанию этого элемента.
|
Строка |
пространство имен
имя пространства имен элемента XML.
|
Класс |
контекст
контекст отображения.
|
Строка |
substitutionHeadName
XML локальное имя главного элемента группы замены.
|
Строка |
substitutionHeadNamespace
имя пространства имен главного элемента XML группы замены.
|
public abstract String name
Отметьте рецензентам: нет никакого имени по умолчанию; так как аннотация находится на методе фабрики, это не является четким, что имя метода может быть получено из имени метода фабрики.
namespace()
public abstract Class scope
Если это не XmlElementDecl.GLOBAL
, тогда это отображение объявления элемента является только активным в пределах указанного class.
public abstract String namespace
Если значение "##default", то значение является именем пространства имен для пакета class, содержащего этот метод фабрики.
name()
public abstract String substitutionHeadNamespace
Это определяет имя пространства имен элемента XML, локальное имя которого определяется substitutionHeadName().
Если susbtitutionHeadName()"", тогда это значение может только быть "##default". Но значение игнорируется, так как так как этого элемента не часть susbtitution группы, когда значение susbstitutionHeadName() "".
Если susbtitutionHeadName() не, "" и значение "##default", то имя пространства имен является именем пространства имен к который пакет содержания class, отмеченного с XmlRegistry
, отображается.
Если susbtitutionHeadName() не, "" и значение не "##default", то значение является именем пространства имен.
substitutionHeadName()
public abstract String substitutionHeadName
Если значение"", тогда этот элемент не является частью любой группы замены.
substitutionHeadNamespace()
public abstract String defaultValue
'