@Retention(value=RUNTIME) @Target(value={FIELD,METHOD}) public @interface XmlAnyElement
Эта аннотация служит "всеобъемлющим" свойством, неупорядочивая xml контент в экземпляр JAXB аннотируемый class. Это обычно аннотирует многозначное свойство JavaBean, но это может произойти на единственном свойстве JavaBean значения. Во время немаршалинга каждый xml элемент, который не соответствует статический @XmlElement или @XmlElementRef аннотацию для других свойств JavaBean на class, добавляется к этому "всеобъемлющему" свойству.
@XmlAnyElement publicElement[] others; // Collection ofElementor JAXB elements. @XmlAnyElement(lax="true") publicObject[] others; @XmlAnyElement private List<Element> nodes; @XmlAnyElement privateElementnode;
Эта аннотация является взаимоисключающей с 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 аннотация может использоваться с XmlElementRefs, чтобы определять дополнительные элементы, которые могут участвовать в дереве контента.
Следующая схема произвела бы следующий 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 aJAXBElementinstance whose value is 1. <e:other /> // this will unmarshal to a DOMElement. <b>3 // this will unmarshal to aJAXBElementinstance whose value is 1. </foo>
@тогда следующий документ неупорядочит как это:XmlRootElementclass 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