@Retention(value=RUNTIME) @Target(value={FIELD,METHOD}) public @interface XmlAnyElement
Эта аннотация служит "всеобъемлющим" свойством, неупорядочивая xml контент в экземпляр JAXB аннотируемый class. Это обычно аннотирует многозначное свойство JavaBean, но это может произойти на единственном свойстве JavaBean значения. Во время немаршалинга каждый xml элемент, который не соответствует статический @XmlElement или @XmlElementRef аннотацию для других свойств JavaBean на class, добавляется к этому "всеобъемлющему" свойству.
@XmlAnyElement publicElement
[] others; // Collection ofElement
or JAXB elements. @XmlAnyElement(lax="true") publicObject
[] others; @XmlAnyElement private List<Element
> nodes; @XmlAnyElement privateElement
node;
Эта аннотация является взаимоисключающей с XmlElement
, XmlAttribute
, XmlValue
, XmlElements
, XmlID
, и XmlIDREF
.
Может быть только один XmlAnyElement
аннотируемое свойство JavaBean в class и его классах высшего качества.
Эта аннотация может использоваться с XmlJavaTypeAdapter
, так, чтобы пользователи могли отобразить свою собственную структуру данных на ДОМА, который поочередно может быть составлен в XML.
Эта аннотация может использоваться с XmlMixed
как это:
// List of java.lang.String or DOM nodes. @XmlAnyElement @XmlMixed List<Object> others;
<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 class:
<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
s, чтобы определять дополнительные элементы, которые могут участвовать в дереве контента.
Следующая схема произвела бы следующий Java class:
<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 aJAXBElement
instance whose value is 1. <e:other /> // this will unmarshal to a DOMElement
. <b>3 // this will unmarshal to aJAXBElement
instance whose value is 1. </foo>
@тогда следующий документ неупорядочит как это:XmlRootElement
class Foo { @XmlAnyElement(lax=true) publicObject
[] 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;
Модификатор и Тип | Дополнительный Элемент и Описание |
---|---|
boolean |
слабый
Управляет unmarshaller поведением, когда оно видит элементы, известные току
JAXBContext . |
Class<? extends DomHandler> |
значение
Определяет
DomHandler который ответственен за фактический преобразовывание XML из структуры данных подобной DOM. |
public abstract boolean lax
JAXBContext
. Если ложь, все элементы, которые соответствуют свойство, будет неупорядочена ДОМУ, и свойство будет только содержать элементы ДОМА.
Если это правда, когда элемент соответствует свойство, отмеченное с XmlAnyElement
известен JAXBContext
(например, есть class с XmlRootElement
у этого есть то же самое имя тега, или есть XmlElementDecl
у этого есть то же самое имя тега), unmarshaller нетерпеливо неупорядочит этот элемент к объекту JAXB, вместо того, чтобы неупорядочить его ДОМУ. Дополнительно, если элемент неизвестен, но у него есть известный xsi:type, unmarshaller нетерпеливо неупорядочивает элемент к a JAXBElement
, с неизвестным именем элемента и JAXBElement значение устанавливается в экземпляр отображения JAXB известного xsi:type.
В результате после немаршалинга, свойство может стать неоднородным; у этого могут быть и узлы ДОМА и некоторые объекты JAXB одновременно.
Это может использоваться, чтобы эмулировать "слабую" подстановочную семантику XML-схемы W3C.
public abstract Class<? extends DomHandler> value
DomHandler
который ответственен за фактический преобразовывание XML из структуры данных подобной DOM.
Для дальнейшей ссылки API и документации разработчика, см. Java Документация SE. Та документация содержит более подробные, предназначенные разработчиком описания, с концептуальными краткими обзорами, определениями сроков, обходных решений, и рабочих примеров кода.
Авторское право © 1993, 2013, Oracle и/или его филиалы. Все права защищены.
Проект сборка-b92