アノテーション型 XmlElementDecl
@RetentionSE(RUNTIMESE) @TargetSE(METHODSE) public @interface XmlElementDecl
ファクトリメソッドを XML 要素にマップします。使用方法
アノテーションは、XML スキーマ要素宣言と、要素宣言を表す JAXBElement インスタンスを返す要素ファクトリメソッドとの間のマッピングを作成します。通常、要素ファクトリメソッドは、スキーマから Java パッケージの ObjectFactory クラスに生成(およびアノテーション付け)され、要素宣言のターゲット名前空間のバインディングを表します。アノテーション構文では @XmlElementDecl を任意のメソッドで使用できますが、意味的には、その使用は要素ファクトリメソッドのアノテーションに制限されます。使用箇所には、次の制約があります。- @XmlElementDecl アノテーションが付けられた要素ファクトリメソッドを含むクラスは、
XmlRegistry
でマークする必要があります。 - 要素ファクトリメソッドは、
Object
SE に割り当て可能な 1 つのパラメーターを取る必要があります。
例 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<String> createPeaFoo(String s); @XmlElementDecl(scope=Pea.class,name="bar") JAXBElement<String> createPeaBar(String s); @XmlElementDecl(name="foo") JAXBElement<Integer> createFoo(Integer i); }
スコープがないと、createFoo と createPeaFoo は両方とも同じローカル名 "foo" を持つ XML スキーマ要素にマップされるため、あいまいになります。- 導入:
- 1.6、JAXB 2.0
- 関連事項:
XmlRegistry
- @XmlElementDecl アノテーションが付けられた要素ファクトリメソッドを含むクラスは、
オプション要素のサマリー
オプション要素 修飾子と型 オプションの要素 説明 StringSE
defaultValue
この要素のデフォルト値。StringSE
namespace
XML 要素の名前空間名。ClassSE<?>
scope
マッピングの範囲。StringSE
substitutionHeadName
置換グループの head 要素の XML ローカル名。StringSE
substitutionHeadNamespace
置換グループのヘッド XML 要素の名前空間名。
要素の詳細
name
StringSE name
XML 要素のローカル名。レビューアーへの注意: デフォルト名はありません。アノテーションはファクトリメソッド上にあるため、メソッド名がファクトリメソッド名から派生できるかどうかは明確ではありません。
- 関連事項:
namespace()
scope
ClassSE<?> scope
マッピングの範囲。これが
XmlElementDecl.GLOBAL
でない場合、この要素宣言マッピングは指定されたクラス内でのみアクティブになります。- デフォルト:
- jakarta.xml.bind.annotation.XmlElementDecl.GLOBAL.class
substitutionHeadNamespace
StringSE substitutionHeadNamespace
置換グループのヘッド XML 要素の名前空間名。これは、ローカル名が
substitutionHeadName()
によって指定されている XML 要素の名前空間名を指定します。susbtitutionHeadName()
が "" の場合、この値は "## default" のみになります。ただし、susbstitutionHeadName()
の値が "" の場合、この要素はサスビテーショングループの一部ではないため、値は無視されます。susbtitutionHeadName()
が "" ではなく、値が "## default" の場合、名前空間名は、XmlRegistry
でマークされた包含クラスのパッケージがマップされる名前空間名です。susbtitutionHeadName()
が "" でなく、値が "## default" でない場合、値は名前空間名です。- デフォルト:
- "##default"
substitutionHeadName
StringSE substitutionHeadName
置換グループの head 要素の XML ローカル名。値が "" の場合、この要素は置換グループの一部ではありません。
- デフォルト:
- ""
defaultValue
StringSE defaultValue
この要素のデフォルト値。' '
このアノテーション要素のデフォルトとして指定された値は、実装が「デフォルト値なし」状態を認識できるようにするために、null の代わりとして使用されます。- デフォルト:
- "\u0000"