@Retention(value=RUNTIME) @Target(value={FIELD,METHOD}) public @interface XmlAnyElement
XML コンテンツを JAXB 注釈を付けられたクラスのインスタンスに非整列化する処理の実行中、この注釈は、「catch-all (すべてをキャッチする)」プロパティーとして働きます。通常、複数値を持つ JavaBean プロパティーを注釈しますが、単一値を持つ JavaBean プロパティーで使用されることもあります。非整列化の実行中、クラスのその他の JavaBean プロパティーの static @XmlElement または @XmlElementRef 注釈に一致しない各 XML 要素は、この「catch-all」プロパティーに追加されます。
@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 プロパティーは 1 つだけです。
この注釈は XmlJavaTypeAdapter とともに使用できるため、ユーザーは自分のデータ構造を 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 <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 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 | lax現在の  JAXBContextで既知の要素が検出された場合、unmarshaller の動作を制御します。 | 
| Class<? extends DomHandler> | valueXML と、DOM に似たデータ構造の間の変換を実際に行う、 DomHandlerを指定します。 | 
public abstract boolean lax
JAXBContext で既知の要素が検出された場合、unmarshaller の動作を制御します。
false の場合、プロパティーに一致するすべての要素が DOM に非整列化され、プロパティーには DOM 要素のみが含まれます。
true の場合、要素が XmlAnyElement でマークされているプロパティーに一致し、JAXBContext に知られている場合 (たとえば、同じタグ名を持つ XmlRootElement を伴うクラスが存在する場合や、同じタグ名を持つ XmlElementDecl が存在する場合)、unmarshaller はこの要素を DOM に非整列化する代わりに、それを JAXB オブジェクトに非整列化しようとします。また、要素は不明であるがそれが既知の xsi:type を持つ場合、unmarshaller はその要素を JAXBElement に非整列化しようとします。これは不明な要素名を持ち、value は既知の xsi:type の JAXB マッピングのインスタンスに設定されます。
 
結果として、非整列化後、プロパティーは異種的なものとなり、DOM ノードと JAXB オブジェクトを同時に持つ可能性があります。
これを使用すると、W3C XML Schema の「lax」ワイルドカードセマンティクスをエミュレートできます。
public abstract Class<? extends DomHandler> value
DomHandler を指定します。 バグまたは機能を送信 
詳細な API リファレンスおよび開発者ドキュメントについては、Java SE のドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.