JavaTM Platform
Standard Ed. 6

javax.xml.bind.annotation
주석형 XmlAnyElement



@Retention (value =RUNTIME )
@Target (value ={FIELD ,METHOD })
public @interface XmlAnyElement

JavaBean 프로퍼티을, XML 정보 세트 표현 또는 JAXB 요소, 혹은 그 양쪽 모두에 맵 합니다.

XML 컨텐츠를 JAXB 주석을 붙일 수 있었던 클래스의 인스턴스에 비정렬화하는 처리의 실행중, 이 주석은, 「catch-all (모든 것을 캐치 한다)」프로퍼티으로서 일합니다. 일반적으로, 복수치를 가지는 JavaBean 프로퍼티을 주석 합니다만, 단일치를 가지는 JavaBean 프로퍼티으로 사용되는 일도 있습니다. 비정렬화의 실행중, 클래스의 그 외의 JavaBean 프로퍼티의 static @XmlElement 또는 @XmlElementRef 주석에 일치하지 않는 각 XML 요소는, 이 「catch-all」프로퍼티에 추가됩니다.

사용법:

 @XmlAnyElement
 public Element [] others;
 
 // Collection of Element  or JAXB elements.
 @XmlAnyElement(lax="true")
 public Object [] others;

 @XmlAnyElement
 private List<Element > nodes;

 @XmlAnyElement
 private Element  node;
 

제한 사용 제약

이 주석은,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;
 

schema로부터 Java 에의 맵예

다음의 schema는, 다음의 Java 클래스를 생성합니다.

 <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>
 
다음의 schema는, 다음의 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>
 

XmlAnyElementXmlElementRef 의 사용

XmlAnyElement 주석을 XmlElementRef 와 함께 사용해, 컨텐츠 트리에 참가 가능한 추가 요소를 지정할 수가 있습니다.

다음의 schema는, 다음의 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</a>      // this will unmarshal to a <A HREF="../../../../javax/xml/bind/JAXBElement.html" title="javax.xml.bind 내의 클래스"><CODE>JAXBElement</CODE></A>  instance whose value is 1.
   <e:other />  // this will unmarshal to a DOM <A HREF="../../../../org/w3c/dom/Element.html" title="org.w3c.dom 내의 인터페이스"><CODE>Element</CODE></A> .
   <b>3</b>     // this will unmarshal to a <A HREF="../../../../javax/xml/bind/JAXBElement.html" title="javax.xml.bind 내의 클래스"><CODE>JAXBElement</CODE></A>  instance whose value is 1.
 </foo>
 

W3C XML Schema 「lax」와일드 카드 에뮬레이션

이 주석의 lax 요소는, 「lax」와일드 카드 시멘틱스의 에뮬레이션을 가능하게 합니다. 예를 들어, Java 원시 코드가 다음과 같이 주석 되었을 경우를 생각합니다.
 @XmlRootElement 
 class Foo {
   @XmlAnyElement(lax=true)
   public Object [] 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;
 

도입된 버젼:
JAXB2. 0

임의 요소의 개요
 boolean lax
          현재 JAXBContext 로 기존의 요소를 만났을 경우, unmarshaller 의 동작을 제어합니다.
 Class <? extends DomHandler > value
          XML 와 DOM 식 데이터 구조동안의 변환을 실제로 실시하는,DomHandler 를 지정합니다.
 

lax

public abstract boolean lax
현재 JAXBContext 로 기존의 요소를 만났을 경우, unmarshaller 의 동작을 제어합니다.

false 의 경우

false 의 경우, 프로퍼티에 일치하는 모든 요소가 DOM 에 비정렬화 되어 프로퍼티에는 DOM 요소만이 포함됩니다.

true 의 경우

true 의 경우, 요소가 XmlAnyElement 로 마크 되고 있는 프로퍼티에 일치해,JAXBContext 에 알려져 있는 경우 (예를 들어, 같은 태그명을 가지는 XmlRootElement 를 수반하는 클래스가 존재하는 경우나, 같은 태그명을 가지는 XmlElementDecl 가 존재하는 경우), unmarshaller 는 이 요소를 DOM 에 비정렬화하는 대신에, 그것을 JAXB 객체에 비정렬화하려고 합니다. 또, 요소는 불명하지만 그것이 기존의 xsi:type 를 가지는 경우, unmarshaller 는 그 요소를 JAXBElement 에 비정렬화하려고 합니다. 이것은 불명한 요소명을 가져, value 는 기존의 xsi:type 의 JAXB 매핑의 인스턴스로 설정됩니다.

결과적으로, 비정렬화 후, 프로퍼티은 이종적인 것이 되어, DOM 노드와 JAXB 객체를 동시에 가질 가능성이 있습니다.

이것을 사용하면(자), W3C XML Schema 의 「lax」와일드 카드 시멘틱스를 에뮤레이트 할 수 있습니다.

디폴트:
false

value

public abstract Class <?  extends DomHandler > value
XML 와 DOM 식 데이터 구조동안의 변환을 실제로 실시하는,DomHandler 를 지정합니다.

디폴트:
javax.xml.bind.annotation.W3CDomHandler.class

JavaTM Platform
Standard Ed. 6

버그의 보고와 기능의 요청
한층 더 자세한 API 레퍼런스 및 개발자 문서에 대해서는,Java SE 개발자용 문서를 참조해 주세요. 개발자전용의 상세한 해설, 개념의 개요, 용어의 정의, 버그의 회피책, 및 코드 실례가 포함되어 있습니다.

Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms . Documentation Redistribution Policy 도 참조해 주세요.