@RetentionSE(valueSE=RUNTIMESE) @TargetSE(valueSE=METHODSE) public @interface XmlElementDecl
使用方法
アノテーションは、XML スキーマ要素宣言と、要素宣言を表す JAXBElement インスタンスを返す要素ファクトリメソッドとの間のマッピングを作成します。通常、要素ファクトリメソッドは、スキーマから Java パッケージの ObjectFactory クラスに生成(およびアノテーション付け)され、要素宣言のターゲット名前空間のバインディングを表します。アノテーション構文では @XmlElementDecl を任意のメソッドで使用できますが、意味的には、その使用は要素ファクトリメソッドのアノテーションに制限されます。使用箇所には、次の制約があります。XmlRegistry でマークする必要があります。ObjectSE に割り当て可能な 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 スキーマ要素にマップされるため、あいまいになります。XmlRegistry| 修飾子と型 | オプションの要素と説明 |
|---|---|
StringSE | defaultValue この要素のデフォルト値。 |
StringSE | namespaceXML 要素の名前空間名。 |
ClassSE | scope マッピングの範囲。 |
StringSE | substitutionHeadName 置換グループの head 要素の XML ローカル名。 |
StringSE | substitutionHeadNamespace 置換グループのヘッド XML 要素の名前空間名。 |
public abstract StringSE name
レビューアーへの注意: デフォルト名はありません。アノテーションはファクトリメソッド上にあるため、メソッド名がファクトリメソッド名から派生できるかどうかは明確ではありません。
namespace()public abstract ClassSE scope
これが XmlElementDecl.GLOBAL でない場合、この要素宣言マッピングは指定されたクラス内でのみアクティブになります。
public abstract StringSE substitutionHeadNamespace
これは、ローカル名が substitutionHeadName() によって指定されている XML 要素の名前空間名を指定します。
susbtitutionHeadName() が "" の場合、この値は "## default" のみになります。ただし、susbstitutionHeadName() の値が "" の場合、この要素はサスビテーショングループの一部ではないため、値は無視されます。
susbtitutionHeadName() が "" ではなく、値が "## default" の場合、名前空間名は、XmlRegistry でマークされた包含クラスのパッケージがマップされる名前空間名です。
susbtitutionHeadName() が "" でなく、値が "## default" でない場合、値は名前空間名です。
public abstract StringSE substitutionHeadName
値が "" の場合、この要素は置換グループの一部ではありません。
public abstract StringSE defaultValue
' 'このアノテーション要素のデフォルトとして指定された値は、実装が「デフォルト値なし」状態を認識できるようにするために、null の代わりとして使用されます。
Copyright © 2018,2020 Eclipse Foundation.
Use is subject to license terms.