XmlElements (Java Platform SE 8 )
Keywords: javax.xml.bind.annotation.XmlElements class
Date: 2026-07-22

javax.xml.bind.annotation

## Annotation Type XmlElements

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

  A container for multiple @`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:

  - a JavaBean property
  - non static, non transient field
  This annotation is intended for annotation a JavaBean collection property (e.g. List).

  Usage

  The usage is subject to the following constraints:

  - This annotation can be used with the following annotations: @`XmlIDREF`, @`XmlElementWrapper`.
  - If @XmlIDREF is also specified on the JavaBean property, then each @XmlElement.type() must contain a JavaBean property annotated with `@XmlID`.

  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>

  Since:
    JAXB2.0
  See Also:
    `XmlElement`, `XmlElementRef`, `XmlElementRefs`, `XmlJavaTypeAdapter`

- - ### Required Element Summary

    Required Elements
    Modifier and Type | Required Element and Description
    --- | ---
    `XmlElement[]` | `value` Collection of @`XmlElement` annotations

- - ### Element Detail

    - #### value

          public abstract XmlElement[] value

      Collection of @`XmlElement` annotations

Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2026, Oracle and/or its affiliates. All rights reserved. Use is subject to license terms. Also see the documentation redistribution policy.