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