アノテーション型 XmlMixed


  • @RetentionSE(RUNTIMESE)
    @TargetSE({FIELDSE,METHODSE})
    public @interface XmlMixed

    混合コンテンツをサポートするために、JavaBean 複数値プロパティにアノテーションを付けます。

    使用箇所には、次の制約があります。

    • @XmlElementRef、@XmlElementRefs、@XmlAnyElement で使用できます

    以下は、@XmlMixed アノテーション付き複数値プロパティに挿入できます。

    • XML テキスト情報項目は java.lang.String の値として追加されます。
    • 子要素情報項目は、JAXBElement のインスタンス、または @XmlRootElement でアノテーションが付けられたクラスを持つインスタンスとして追加されます。
    • Jakarta XML Binding マップクラスにバインドされていない不明なコンテンツは、ElementSE として挿入されます。(@XmlAnyElement でアノテーションが付けられたプロパティを想定しています)
    以下は、混合コンテンツのバインドと作成の例です。
    
     
      <!-- schema fragment having  mixed content -->
      <xs:complexType name="letterBody" mixed="true">
        <xs:sequence>
    	<xs:element name="name" type="xs:string"/>
    	<xs:element name="quantity" type="xs:positiveInteger"/>
    	<xs:element name="productName" type="xs:string"/>
    	<!-- etc. -->
        </xs:sequence>
      </xs:complexType>
      <xs:element name="letterBody" type="letterBody"/>
     
     // Schema-derived Java code: 
     // (Only annotations relevant to mixed content are shown below, 
     //  others are omitted.)
     import java.math.BigInteger;
     public class ObjectFactory {
     	// element instance factories
     	JAXBElement<LetterBody> createLetterBody(LetterBody value);
     	JAXBElement<String>     createLetterBodyName(String value);
     	JAXBElement<BigInteger> createLetterBodyQuantity(BigInteger value);
     	JAXBElement<String>     createLetterBodyProductName(String value);
          // type instance factory
     	LetterBody createLetterBody();
     }
     
     public class LetterBody {
            // Mixed content can contain instances of Element classes
            // Name, Quantity and ProductName. Text data is represented as
            // java.util.String for text.
            @XmlMixed 
            @XmlElementRefs({
                    @XmlElementRef(name="productName", type=JAXBElement.class),
                    @XmlElementRef(name="quantity", type=JAXBElement.class),
                    @XmlElementRef(name="name", type=JAXBElement.class)})
            List getContent(){...}
     }
     
    以下は、コンテンツが混在する XML インスタンスドキュメントです。
    
     <letterBody>
     Dear Mr.<name>Robert Smith</name>
     Your order of <quantity>1</quantity> <productName>Baby
     Monitor</productName> shipped from our warehouse. ....
     </letterBody>
     
    これは、次の Jakarta XML Binding API 呼び出しを使用して構築できます。
    
     LetterBody lb = ObjectFactory.createLetterBody();
     JAXBElement<LetterBody> lbe = ObjectFactory.createLetterBody(lb);
     List gcl = lb.getContent();  //add mixed content to general content property.
     gcl.add("Dear Mr.");  // add text information item as a String.
     
     // add child element information item
     gcl.add(ObjectFactory.createLetterBodyName("Robert Smith"));
     gcl.add("Your order of "); // add text information item as a String
     
     // add children element information items
     gcl.add(ObjectFactory.
     	 		createLetterBodyQuantity(new BigInteger("1")));
     gcl.add(ObjectFactory.createLetterBodyProductName("Baby Monitor"));
     gcl.add("shipped from our warehouse");  // add text information item
     

    追加の共通情報については、jakarta.xml.bind.package javadoc の「パッケージ仕様」を参照してください。

    導入:
    1.6、JAXB 2.0
    作成者:
    Kohsuke Kawaguchi