@RetentionSE(valueSE=RUNTIMESE) @TargetSE(valueSE={FIELDSE,METHODSE}) public @interface XmlAnyElement
このアノテーションは、XML コンテンツを Jakarta XML Binding アノテーション付きクラスのインスタンスに非整列化する際の「キャッチオール」プロパティとして機能します。通常は複数値の JavaBean プロパティにアノテーションを付けますが、単一値の JavaBean プロパティでも発生する可能性があります。アンマーシャリング中に、クラスの他の JavaBean プロパティの静的 @XmlElement または @XmlElementRef アノテーションに一致しない各 xml 要素は、この「キャッチオール」プロパティに追加されます。
@XmlAnyElement publicElement
SE[] others; // Collection ofElement
SE or JAXBElements. @XmlAnyElement(lax="true") publicObject
SE[] others; @XmlAnyElement private List<Element
SE> nodes; @XmlAnyElement privateElement
SE node;
このアノテーションは、XmlElement
、XmlAttribute
、XmlValue
、XmlElements
、XmlID
、XmlIDREF
と相互に排他的です。
クラスとそのスーパークラスには、1 つの XmlAnyElement
アノテーション付き JavaBean プロパティしか存在できません。
このアノテーションは XmlJavaTypeAdapter
とともに使用できるため、ユーザーは独自のデータ構造を DOM にマップし、DOM を 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</a>
<e:other /> // this will be bound to DOM, because unmarshalling is orderless
<b>3</b>
<e:other />
<c>5</c> // 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</a>
<e:other /> // this will be bound to DOM, because unmarshalling is orderless
<b>3</b>
<e:other />
<c>5</c> // 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
SE<Object
SE> 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</a>
// this will unmarshal to aJAXBElement
instance whose value is 1.<e:other />
// this will unmarshal to a DOMElement
SE.<b>3</b>
// this will unmarshal to aJAXBElement
instance whose value is 1.</foo>
@次に、次のドキュメントは次のように非整列化します。XmlRootElement
class Foo { @XmlAnyElement(lax=true) publicObject
SE[] 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 | lax 現在の JAXBContext が認識している要素を検出したときのアンマーシャラーの動作を制御します。 |
ClassSE<? extends DomHandler> | value XML から DOM のようなデータ構造への変換を実際に行う DomHandler を指定します。 |
public abstract boolean lax
JAXBContext
が認識している要素を検出したときのアンマーシャラーの動作を制御します。XmlAnyElement
でマークされたプロパティに一致する要素が JAXBContext
が認識している場合(たとえば、同じタグ名を持つ XmlRootElement
のクラスがある場合、または同じタグ名を持つ XmlElementDecl
がある場合)、アンマーシャラーは DOM にアンマーシャルする代わりに、この要素を Jakarta XML Binding オブジェクトに先行してアンマーシャルするようにします。さらに、要素が不明であるが既知の xsi:type を持つ場合、アンマーシャラーはその要素を未知の要素名を持つ JAXBElement
、JAXBElement 値は既知の xsi:type の Jakarta XML Binding マッピングのインスタンスにアンマーシャルします。その結果、アンマーシャリング後にプロパティが不均一になる可能性があります。DOM ノードといくつかの Jakarta XML Binding オブジェクトを同時に持つことができます。
これは、W3C XML スキーマの「緩い」ワイルドカードセマンティクスをエミュレートするために使用できます。
public abstract ClassSE<? extends DomHandler> value
DomHandler
を指定します。Copyright © 2018,2020 Eclipse Foundation.
Use is subject to license terms.