-
@Retention(RUNTIME) @Target(METHOD) public @interface XmlElementDecl
将工厂方法映射到XML元素。用法
注释创建XML模式元素声明和返回表示元素声明的JAXBElement实例的元素工厂方法之间的映射。 通常,元素工厂方法从模式生成(和注释)到Java包中的ObjectFactory类,该包表示元素声明的目标命名空间的绑定。 因此,虽然注释语法允许在任何方法上使用@XmlElementDecl,但语法上它的使用仅限于元素工厂方法的注释。 用法受以下限制:- 包含使用@XmlElementDecl注释的元素工厂方法的类必须标记为
XmlRegistry
。 - 元件出厂方法必须将一个参数分配给
Object
。
示例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注释的元素工厂方法的类必须标记为
-
-
Optional Element Summary
Optional Elements Modifier and Type Optional Element 描述 String
defaultValue
该元素的默认值。String
namespace
XML元素的命名空间名称。Class
scope
映射范围。String
substitutionHeadName
替换组头元素的XML本地名称。String
substitutionHeadNamespace
替换组的头部XML元素的命名空间名称。
-
-
-
Element Detail
-
name
String name
XML元素的本地名称。评论者注意事项:没有默认名称; 由于注释是在工厂方法上,因此方法名称可以从工厂方法名称派生而不清楚。
- 另请参见:
-
namespace()
-
-
-
scope
Class scope
映射范围。如果这不是
XmlElementDecl.GLOBAL
,则此元素声明映射仅在指定的类中有效。- Default:
- javax.xml.bind.annotation.XmlElementDecl.GLOBAL.class
-
-
-
substitutionHeadNamespace
String substitutionHeadNamespace
替换组的头部XML元素的命名空间名称。这指定了本地名称由
substitutionHeadName()
指定的XML元素的命名空间名称。如果
susbtitutionHeadName()
为“”,则此值只能为“## default”。 但是值被忽略,因为这个元素不是susbtitution组的一部分,当值为susbstitutionHeadName()
是“”时。如果
susbtitutionHeadName()
不是“”,并且值为“## default”,则命名空间名称是映射包含类的包的标记为XmlRegistry
的命名空间名称。如果
susbtitutionHeadName()
不是“”,并且该值不是“## default”,则该值是命名空间名称。- 另请参见:
-
substitutionHeadName()
- Default:
- “##默认”
-
-
-
substitutionHeadName
String substitutionHeadName
替换组头元素的XML本地名称。如果值为“”,则该元素不是任何替换组的一部分。
- Default:
- “”
-
-
-
defaultValue
String defaultValue
该元素的默认值。该
''
被指定为该注释元素的默认值的值被用作穷人替代null以允许实现识别“无默认值”状态。- Default:
- “\ u0000的”
-
-