001: /*
002: * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
003: * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
004: */
005:
006: package javax.xml.bind.annotation;
007:
008: import java.lang.annotation.Retention;
009: import java.lang.annotation.Target;
010:
011: import static java.lang.annotation.ElementType.*;
012: import static java.lang.annotation.RetentionPolicy.*;
013:
014: /**
015: * <p>
016: * Maps a JavaBean property to a XML attribute.
017: *
018: * <p> <b>Usage</b> </p>
019: * <p>
020: * The <tt>@XmlAttribute</tt> annotation can be used with the
021: * following program elements:
022: * <ul>
023: * <li> JavaBean property </li>
024: * <li> field </li>
025: * </ul>
026: *
027: * <p> A static final field is mapped to a XML fixed attribute.
028: *
029: * <p>See "Package Specification" in javax.xml.bind.package javadoc for
030: * additional common information.</p>
031: *
032: * The usage is subject to the following constraints:
033: * <ul>
034: * <li> If type of the field or the property is a collection
035: * type, then the collection item type must be mapped to schema
036: * simple type.
037: * <pre>
038: * // Examples
039: * @XmlAttribute List<Integer> items; //legal
040: * @XmlAttribute List<Bar> foo; // illegal if Bar does not map to a schema simple type
041: * </pre>
042: * </li>
043: * <li> If the type of the field or the property is a non
044: * collection type, then the type of the property or field
045: * must map to a simple schema type.
046: * <pre>
047: * // Examples
048: * @XmlAttribute int foo; // legal
049: * @XmlAttribute Foo foo; // illegal if Foo does not map to a schema simple type
050: * </pre>
051: * </li>
052: * <li> This annotation can be used with the following annotations:
053: * {@link XmlID},
054: * {@link XmlIDREF},
055: * {@link XmlList},
056: * {@link XmlSchemaType},
057: * {@link XmlValue},
058: * {@link XmlAttachmentRef},
059: * {@link XmlMimeType},
060: * {@link XmlInlineBinaryData},
061: * {@link javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter}</li>.
062: * </ul>
063: * </p>
064: *
065: * <p> <b>Example 1: </b>Map a JavaBean property to an XML attribute.</p>
066: * <pre>
067: * //Example: Code fragment
068: * public class USPrice {
069: * @XmlAttribute
070: * public java.math.BigDecimal getPrice() {...} ;
071: * public void setPrice(java.math.BigDecimal ) {...};
072: * }
073: *
074: * <!-- Example: XML Schema fragment -->
075: * <xs:complexType name="USPrice">
076: * <xs:sequence>
077: * </xs:sequence>
078: * <xs:attribute name="price" type="xs:decimal"/>
079: * </xs:complexType>
080: * </pre>
081: *
082: * <p> <b>Example 2: </b>Map a JavaBean property to an XML attribute with anonymous type.</p>
083: * See Example 7 in @{@link XmlType}.
084: *
085: * <p> <b>Example 3: </b>Map a JavaBean collection property to an XML attribute.</p>
086: * <pre>
087: * // Example: Code fragment
088: * class Foo {
089: * ...
090: * @XmlAttribute List<Integer> items;
091: * }
092: *
093: * <!-- Example: XML Schema fragment -->
094: * <xs:complexType name="foo">
095: * ...
096: * <xs:attribute name="items">
097: * <xs:simpleType>
098: * <xs:list itemType="xs:int"/>
099: * </xs:simpleType>
100: * </xs:complexType>
101: *
102: * </pre>
103: * @author Sekhar Vajjhala, Sun Microsystems, Inc.
104: * @version $Revision: 1.14 $
105: * @see XmlType
106: * @since JAXB2.0
107: */
108:
109: @Retention(RUNTIME)
110: @Target({FIELD,METHOD})
111: public @interface XmlAttribute {
112: /**
113: * Name of the XML Schema attribute. By default, the XML Schema
114: * attribute name is derived from the JavaBean property name.
115: *
116: */
117: String name() default "##default";
118:
119: /**
120: * Specifies if the XML Schema attribute is optional or
121: * required. If true, then the JavaBean property is mapped to a
122: * XML Schema attribute that is required. Otherwise it is mapped
123: * to a XML Schema attribute that is optional.
124: *
125: */
126: boolean required() default false;
127:
128: /**
129: * Specifies the XML target namespace of the XML Schema
130: * attribute.
131: *
132: */
133: String namespace() default "##default";
134: }
|