@Retention(value=RUNTIME) @Target(value=METHOD) public @interface XmlElementDecl
使用法
この注釈は、XML スキーマ要素宣言と、その要素宣言を表現する JAXBElement インスタンスを返す要素ファクトリメソッドの間のマッピングを作成します。通常、スキーマから、要素宣言のターゲット名前空間のバインディングを表現する Java パッケージ内の ObjectFactory クラス内に、要素ファクトリメソッドが生成 (および注釈) されます。そのため、注釈の構文上では @XmlElementDecl は任意のメソッドで使用可能ですが、セマンティクス的にはこれの使用は要素ファクトリメソッドの注釈に限定されます。 使用には次の制約があります。XmlRegistry でマークする必要があります。 Object に割り当て可能な 1 つのパラメータを取る必要があります。例 1:ファクトリメソッドへの注釈
// Example: code fragment
@XmlRegistry
class ObjectFactory {
@XmlElementDecl(name="foo")
JAXBElement<String> createFoo(String s) { ... }
}
<!-- XML input -->
<foo>string
// Example: code fragment corresponding to XML input
JAXBElement o =
(JAXBElement)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 スキーマ要素にマップされるため、不明瞭になります。XmlRegistry| 修飾子と型 | 省略可能な要素と説明 |
|---|---|
String |
defaultValue
この要素のデフォルト値です。
|
String |
namespace
XML 要素の名前空間名です。
|
Class |
scope
マッピングのスコープです。
|
String |
substitutionHeadName
置換グループの先頭要素の XML ローカル名です。
|
String |
substitutionHeadNamespace
置換グループの先頭 XML 要素の名前空間名です。
|
public abstract String name
レビューアへの注意:デフォルト名はありません。注釈はファクトリメソッドに対するものであるため、メソッド名をファクトリメソッド名から派生できるか明らかでありません。
namespace()public abstract Class scope
これが XmlElementDecl.GLOBAL 以外の場合、この要素宣言マッピングは指定されたクラス内でのみアクティブになります。
public abstract String namespace
値が「##default」の場合、値は、このファクトリメソッドを含むクラスのパッケージの名前空間名です。
name()public abstract String substitutionHeadNamespace
これは、ローカル名が substitutionHeadName() によって指定される XML 要素の名前空間名を指定します。
substitutionHeadName() が「」の場合、この値は「##default」にしかできません。substitutionHeadName() の値が「」の場合、この要素は置換グループの一部でないため、値は無視されます。
substitutionHeadName() が「」でなく、値が「##default」の場合、名前空間名は、XmlRegistry でマークされたこれを含むクラスのパッケージがマップされる名前空間名です。
substitutionHeadName() が「」でなく、値が「##default」でない場合、値は名前空間名です。
public abstract String substitutionHeadName
値が「」の場合、この要素は置換グループの一部ではありません。
public abstract String defaultValue
この注釈要素のデフォルトとして指定されている
''値は、null の代わりに使用して実装が非デフォルト値の状態を認識できるようにする経済的な代替品です。
バグまたは機能を送信
詳細な API リファレンスおよび開発者ドキュメントについては、Java SE のドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.