@RetentionSE(valueSE=RUNTIMESE) @TargetSE(valueSE={FIELDSE,METHODSE}) public @interface XmlAnyElement
このアノテーションは、XML コンテンツを Jakarta XML Binding アノテーション付きクラスのインスタンスに非整列化する際の「キャッチオール」プロパティとして機能します。通常は複数値の JavaBean プロパティにアノテーションを付けますが、単一値の JavaBean プロパティでも発生する可能性があります。アンマーシャリング中に、クラスの他の JavaBean プロパティの静的 @XmlElement または @XmlElementRef アノテーションに一致しない各 xml 要素は、この「キャッチオール」プロパティに追加されます。
@XmlAnyElement publicElementSE[] others; // Collection ofElementSE or JAXBElements. @XmlAnyElement(lax="true") publicObjectSE[] others; @XmlAnyElement private List<ElementSE> nodes; @XmlAnyElement privateElementSE 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")
})
ListSE<ObjectSE> 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 aJAXBElementinstance whose value is 1.<e:other />// this will unmarshal to a DOMElementSE.<b>3</b>// this will unmarshal to aJAXBElementinstance whose value is 1.</foo>
@次に、次のドキュメントは次のように非整列化します。XmlRootElementclass Foo { @XmlAnyElement(lax=true) publicObjectSE[] 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> | valueXML から 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.