/* * Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved. * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. * * * * * * * * * * * * * * * * * * * * */ package javax.xml.bind.annotation; import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import static java.lang.annotation.RetentionPolicy.RUNTIME; import static java.lang.annotation.ElementType.FIELD; import static java.lang.annotation.ElementType.METHOD; import java.lang.annotation.Retention; import java.lang.annotation.Target; /** *
* A container for multiple @{@link XmlElement} annotations. * * Multiple annotations of the same type are not allowed on a program * element. This annotation therefore serves as a container annotation * for multiple @XmlElements as follows: * *
* @XmlElements({ @XmlElement(...),@XmlElement(...) })
*
*
* The @XmlElements annnotation can be used with the * following program elements:
*Usage
* *The usage is subject to the following constraints: *
See "Package Specification" in javax.xml.bind.package javadoc for * additional common information.
* *Example 1: Map to a list of elements
*
*
* // Mapped code fragment
* public class Foo {
* @XmlElements(
* @XmlElement(name="A", type=Integer.class),
* @XmlElement(name="B", type=Float.class)
* }
* public List items;
* }
*
* <!-- XML Representation for a List of {1,2.5}
* XML output is not wrapped using another element -->
* ...
* <A> 1 </A>
* <B> 2.5 </B>
* ...
*
* <!-- XML Schema fragment -->
* <xs:complexType name="Foo">
* <xs:sequence>
* <xs:choice minOccurs="0" maxOccurs="unbounded">
* <xs:element name="A" type="xs:int"/>
* <xs:element name="B" type="xs:float"/>
* <xs:choice>
* </xs:sequence>
* </xs:complexType>
*
*
*
* Example 2: Map to a list of elements wrapped with another element *
*
*
* // Mapped code fragment
* public class Foo {
* @XmlElementWrapper(name="bar")
* @XmlElements(
* @XmlElement(name="A", type=Integer.class),
* @XmlElement(name="B", type=Float.class)
* }
* public List items;
* }
*
* <!-- XML Schema fragment -->
* <xs:complexType name="Foo">
* <xs:sequence>
* <xs:element name="bar">
* <xs:complexType>
* <xs:choice minOccurs="0" maxOccurs="unbounded">
* <xs:element name="A" type="xs:int"/>
* <xs:element name="B" type="xs:float"/>
* </xs:choice>
* </xs:complexType>
* </xs:element>
* </xs:sequence>
* </xs:complexType>
*
*
* Example 3: Change element name based on type using an adapter. *
*
* class Foo {
* @XmlJavaTypeAdapter(QtoPAdapter.class)
* @XmlElements({
* @XmlElement(name="A",type=PX.class),
* @XmlElement(name="B",type=PY.class)
* })
* Q bar;
* }
*
* @XmlType abstract class P {...}
* @XmlType(name="PX") class PX extends P {...}
* @XmlType(name="PY") class PY extends P {...}
*
* <!-- XML Schema fragment -->
* <xs:complexType name="Foo">
* <xs:sequence>
* <xs:element name="bar">
* <xs:complexType>
* <xs:choice minOccurs="0" maxOccurs="unbounded">
* <xs:element name="A" type="PX"/>
* <xs:element name="B" type="PY"/>
* </xs:choice>
* </xs:complexType>
* </xs:element>
* </xs:sequence>
* </xs:complexType>
*
*
* @author