JavaTM Platform
Standard Ed. 6

javax.xml.bind.annotation
注釈型 XmlElementDecl


@Retention(value=RUNTIME)
@Target(value=METHOD)
public @interface XmlElementDecl

ファクトリメソッドを XML 要素にマップします。

使用法

この注釈は、XML スキーマ要素宣言と、その要素宣言を表現する JAXBElement インスタンスを返す「要素ファクトリメソッド」の間のマッピングを作成します。通常、スキーマから、要素宣言のターゲット名前空間のバインディングを表現する Java パッケージ内の ObjectFactory クラス内に、要素ファクトリメソッドが生成 (および注釈) されます。そのため、注釈の構文上では @XmlElementDecl は任意のメソッドで使用可能ですが、セマンティクス的にはこれの使用は要素ファクトリメソッドの注釈に限定されます。 使用には次の制約があります。

例 1:ファクトリメソッドへの注釈

     //Example:code fragment
     @XmlRegistry
     class ObjectFactory {
         @XmlElementDecl(name="foo")
         JAXBElement<String> createFoo(String s) { ... }
     }
 
 
     <!-- XML input -->
       <foo>string</foo>

     //Example:code fragment corresponding to XML input
     JAXBElement<String> o =
     (JAXBElement<String>)unmarshaller.unmarshal(aboveDocument);
     // print JAXBElement instance to show values
     System.out.println(o.getName());   // prints  "{}foo"
     System.out.println(o.getValue());  // prints  "string"
     System.out.println(o.getValue().getClass()); // prints "java.lang.String"

     <!-- Example: XML schema definition -->
     <xs:element name="foo" type="xs:string"/>
 

例 2: ローカルスコープを持たない要素宣言

次の例は、スキーマ派生コード内の要素宣言のバインディングにおけるスコープ注釈パラメータの使用を示します。

次の例は、将来この javadoc の改訂版で置き換えられる可能性があります。


     <!-- Example: XML schema definition -->
     <xs:schema>
       <xs:complexType name="pea">
         <xs:choice maxOccurs="unbounded">
           <xs:element name="foo" type="xs:string"/>
           <xs:element name="bar" type="xs:string"/>
         </xs:choice>
       </xs:complexType> 
       <xs:element name="foo" type="xs:int"/>
     </xs:schema>
 
     //Example:expected default binding
     class Pea {
         @XmlElementRefs({
             @XmlElementRef(name="foo",type=JAXBElement.class)
             @XmlElementRef(name="bar",type=JAXBElement.class)
         })
         List<JAXBElement<String>> fooOrBar;
     }
 
     @XmlRegistry
     class ObjectFactory {
         @XmlElementDecl(scope=Pea.class,name="foo")
         JAXBElement createPeaFoo(String s);
 
         @XmlElementDecl(scope=Pea.class,name="bar")
         JAXBElement createPeaBar(String s);
 
         @XmlElementDecl(name="foo")
         JAXBElement createFoo(Integer i);
     }
 
 
スコープがなければ、createFoo と createPeaFoo は両方とも同じローカル名「foo」を持つ XML スキーマ要素にマップされるため、不明瞭になります。

導入されたバージョン:
JAXB 2.0
関連項目:
XmlRegistry

必須要素の概要
 String name
          XML 要素のローカル名です。
 
任意要素の概要
 String defaultValue
          この要素のデフォルト値です。
 String namespace
          XML 要素の名前空間名です。
 Class scope
          マッピングのスコープです。
 String substitutionHeadName
          置換グループの先頭要素の XML ローカル名です。
 String substitutionHeadNamespace
          置換グループの先頭 XML 要素の名前空間名です。
 

要素の詳細

name

public abstract String name
XML 要素のローカル名です。

レビューアへの注意: デフォルト名はありません。注釈はファクトリメソッドに対するものであるため、メソッド名をファクトリメソッド名から派生できるか明らかでありません。

関連項目:
namespace()

scope

public abstract Class scope
マッピングのスコープです。

これが XmlElementDecl.GLOBAL 以外の場合、この要素宣言マッピングは指定されたクラス内でのみアクティブになります。

デフォルト:
javax.xml.bind.annotation.XmlElementDecl.GLOBAL.class

namespace

public abstract String namespace
XML 要素の名前空間名です。

値が「##default」の場合、値は、このファクトリメソッドを含むクラスのパッケージの名前空間名です。

関連項目:
name()
デフォルト:
"##default"

substitutionHeadNamespace

public abstract String substitutionHeadNamespace
置換グループの先頭 XML 要素の名前空間名です。

これは、ローカル名が substitutionHeadName() によって指定される XML 要素の名前空間名を指定します。

substitutionHeadName() が「」の場合、この値は「##default」にしかできません。substitutionHeadName() の値が「」の場合、この要素は置換グループの一部でないため、値は無視されます。

subtitutionHeadName() が「」以外で、値が「##default」の場合、名前空間名は、XmlRegistry でマークされたこれを含むクラスのパッケージがマップされる名前空間名です。

substitutionHeadName() が「」でなく、値が「##default」以外の場合、値は名前空間名です。

関連項目:
substitutionHeadName()
デフォルト:
"##default"

substitutionHeadName

public abstract String substitutionHeadName
置換グループの先頭要素の XML ローカル名です。

値が「」の場合、この要素は置換グループの一部ではありません。

関連項目:
substitutionHeadNamespace()
デフォルト:
""

defaultValue

public abstract String defaultValue
この要素のデフォルト値です。

この注釈要素のデフォルトとして指定されている「」値は、null の代わりに使用して実装が非デフォルト値の状態を認識できるようにする経済的な代替品です。

デフォルト:
"\u0000"

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 も参照してください。