Spec-Zone.ru › OpenJDK 8

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


@Retention(value=RUNTIME)
 @Target(value={FIELD,METHOD})
public @interface XmlAnyElement

Сопоставляет свойство JavaBean с представлением XML-информационного набора и/или элементом JAXB.

Эта аннотация служит "универсальным" свойством при разборке xml-контента в экземпляр класса JAXB с аннотациями. Обычно она аннотирует многозначное свойство JavaBean, но может встречаться и на свойстве JavaBean с одним значением. Во время разборки каждый XML-элемент, не соответствующий статической аннотации @XmlElement или @XmlElementRef для других свойств JavaBean в классе, добавляется к этому "универсальному" свойству.

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

@XmlAnyElement
 public Element[] others;

 // Collection of Element or JAXB elements.
 @XmlAnyElement(lax="true")
 public Object[] others;

 @XmlAnyElement
 private List<Element> nodes;

 @XmlAnyElement
 private Element node;

Ограничения использования

Эта аннотация несовместима с XmlElement, XmlAttribute, XmlValue, XmlElements, XmlID и XmlIDREF.

В классе и его суперклассах может быть только одно свойство JavaBean, аннотированное XmlAnyElement.

Взаимосвязь с другими аннотациями

Эта аннотация может использоваться с XmlJavaTypeAdapter, чтобы пользователи могли сопоставлять собственные структуры данных с DOM, которые затем могут быть преобразованы в XML.

Эта аннотация может использоваться с XmlMixed следующим образом:

// List of java.lang.String or DOM nodes.
 @XmlAnyElement @XmlMixed
 List<Object> others;

Пример схемы к Java

Следующая схема приведет к следующему классу Java:
<xs:complexType name="foo">
   <xs:sequence>
     <xs:element name="a" type="xs:int" />
     <xs:element name="b" type="xs:int" />
     <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded" />
   </xs:sequence>
 </xs:complexType>
class Foo {
   int a;
   int b;
   @XmlAnyElement
   List<Element> any;
 }
Она может разбирать такие экземпляры, как
<foo xmlns:e="extra">
   <a>1
   <e:other />  // this will be bound to DOM, because unmarshalling is orderless
   <b>3
   <e:other />
   <c>5     // this will be bound to DOM, because the annotation doesn't remember namespaces.
 </foo>
Следующая схема приведет к следующему классу Java:
<xs:complexType name="bar">
   <xs:complexContent>
   <xs:extension base="foo">
     <xs:sequence>
       <xs:element name="c" type="xs:int" />
       <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded" />
     </xs:sequence>
   </xs:extension>
 </xs:complexType>
class Bar extends Foo {
   int c;
   // Foo.getAny() also represents wildcard content for type definition bar.
 }
Она может разбирать такие экземпляры, как
<bar xmlns:e="extra">
   <a>1
   <e:other />  // this will be bound to DOM, because unmarshalling is orderless
   <b>3
   <e:other />
   <c>5     // this now goes to Bar.c
   <e:other />  // this will go to Foo.any
 </bar>

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

Аннотация XmlAnyElement может использоваться с XmlElementRef для обозначения дополнительных элементов, которые могут участвовать в дереве содержимого.

Следующая схема приведет к следующему классу Java:

<xs:complexType name="foo">
   <xs:choice maxOccurs="unbounded" minOccurs="0">
     <xs:element name="a" type="xs:int" />
     <xs:element name="b" type="xs:int" />
     <xs:any namespace="##other" processContents="lax" />
   </xs:choice>
 </xs:complexType>
class Foo {
   @XmlAnyElement(lax="true")
   @XmlElementRefs({
     @XmlElementRef(name="a", type="JAXBElement.class")
     @XmlElementRef(name="b", type="JAXBElement.class")
   })
   List<Object> others;
 }

 @XmlRegistry
 class ObjectFactory {
   ...
   @XmlElementDecl(name = "a", namespace = "", scope = Foo.class)
   JAXBElement<Integer> createFooA( Integer i ) { ... }

   @XmlElementDecl(name = "b", namespace = "", scope = Foo.class)
   JAXBElement<Integer> createFooB( Integer i ) { ... }
Она может разбирать такие экземпляры, как
<foo xmlns:e="extra">
   <a>1     // this will unmarshal to a JAXBElement instance whose value is 1.
   <e:other />  // this will unmarshal to a DOM Element.
   <b>3     // this will unmarshal to a JAXBElement instance whose value is 1.
 </foo>

Эмуляция нестрогого (lax) подстановочного знака W3C XML Schema

Элемент lax аннотации позволяет эмулировать семантику нестрогого подстановочного знака. Например, когда исходный код Java аннотирован так:
@XmlRootElement
 class Foo {
   @XmlAnyElement(lax=true)
   public Object[] others;
 }
, то следующий документ будет разбираться так:
<foo>
   <unknown />
   <foo />
 </foo>

 Foo foo = unmarshal();
 // 1 for 'unknown', another for 'foo'
 assert foo.others.length==2;
 // 'unknown' unmarshals to a DOM element
 assert foo.others[0] instanceof Element;
 // because of lax=true, the 'foo' element eagerly
 // unmarshals to a Foo object.
 assert foo.others[1] instanceof Foo;
С:
JAXB2.0

Дополнительные элементы

Модификатор и тип Дополнительный элемент и описание
boolean lax

Управляет поведением разборщика при встрече с элементами, известными текущему JAXBContext.

Class<? extends DomHandler> value

Указывает DomHandler, который отвечает за фактическое преобразование XML в/из структуры данных, подобной DOM.

Элементы

lax

public abstract boolean lax

Управляет поведением разборщика при встрече с элементами, известными текущему JAXBContext.

Когда false

Если false, все элементы, соответствующие свойству, будут разбираться в DOM, и свойство будет содержать только элементы DOM.

Когда true

Если true, когда элемент соответствует свойству, помеченному XmlAnyElement, и известен JAXBContext (например, есть класс с XmlRootElement, имеющий то же имя тега, или есть XmlElementDecl с тем же именем тега), разборщик будет немедленно разбирать этот элемент в объект JAXB вместо DOM. Кроме того, если элемент неизвестен, но имеет известный xsi:type, разборщик немедленно разбирает элемент в JAXBElement с именем неизвестного элемента, а значение JAXBElement устанавливается в экземпляр JAXB-отображения известного xsi:type.

В результате после разбора свойство может стать неоднородным; оно может содержать как узлы DOM, так и некоторые объекты JAXB одновременно.

Это можно использовать для эмуляции семантики нестрогого подстановочного знака (lax) W3C XML Schema.

По умолчанию:
false

value

public abstract Class<? extends DomHandler> value

Указывает DomHandler, который отвечает за фактическое преобразование XML в/из структуры данных, подобной DOM.

По умолчанию:
javax.xml.bind.annotation.W3CDomHandler.class

© 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