将工厂方法映射到 XML 元素。
用法
该注释在 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</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没有作用域,createFoo 和 createPeaFoo 将变得不明确,因为它们两个都使用相同的本地名称 "foo" 映射到 XML 模式元素。createPeaFoo(String s); @XmlElementDecl(scope=Pea.class,name="bar") JAXBElement createPeaBar(String s); @XmlElementDecl(name="foo") JAXBElement createFoo(Integer i); }
XmlRegistry
必需元素摘要 | |
---|---|
String |
name XML 元素的本地名称。 |
可选元素摘要 | |
---|---|
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 元素的名称空间名。
如果 susbtitutionHeadName() 为 "",则此值只能是 "##default"。但该值被忽略,因为在 susbstitutionHeadName() 的值是 "" 时,此元素不是替换组的一部分。
如果 susbtitutionHeadName() 不是 "",并且值为 "##default",那么名称空间名是包含用 XmlRegistry
标记的类的包所映射到的名称空间名。
如果 susbtitutionHeadName() 不是 "" 并且值不是 "##default",那么该值是名称空间名。
substitutionHeadName()
public abstract String substitutionHeadName
如果值是 "",那么此元素不是任何替换组的一部分。
public abstract String defaultValue
作为此注释元素的默认值指定的 '' 值被用作 null 的替代,从而允许识别 'no default value' 状态。