@Retention(value=RUNTIME) @Target(value={FIELD,METHOD}) public @interface XmlElementRef
图一个JavaBean属性的一种源于属性的类型的XML元素。
使用
@XmlElementRef注释可以使用JavaBean属性或在XmlElementRefs
这个注释的动态关联的XML元素的名称与JavaBean属性。当一个JavaBean属性的注释与XmlElement
,XML元素名称静来自JavaBean的属性名称。然而,当使用这个注释,XML元素名来源于运行时的JavaBean属性的类的实例。
public void setTerm(jaxbelement);公共jaxbelementgetterm();
一元工厂方法注释的XmlElementDecl
是用来创建一个JAXBElement实例,包含一个XML元素名称。在元件属性的“xmlelementref注释的存在表明JAXBElement实例元素名称代替从JavaBean属性名称导出的XML元素的名称。
使用是受以下约束:
JAXBElement
,然后@XmlElementRef}.name()和@XmlElementRef.namespace()必须点一个类中注明“xmlregistry @ xmlelementdecl注释元素工厂方法(通常是由编译器生成的图式化类):
JAXBElement
,然后通过属性或字段引用的类型必须注明XmlRootElement
。XmlElementWrapper
,XmlJavaTypeAdapter
。看到“包装规范”的额外的信息共享javax.xml.bind.package javadoc。
例1:蚁群任务的例子
以下java类层次结构模型的Ant构建脚本。一个蚂蚁任务对应于类层次结构中的一个类。蚂蚁任务的XML元素的名称是由其对应的类“xmlrootelement注释说明。“xmlrootelement(name =“目标”)班级目标{// @ xmlelementref的存在表明,XML/ /元素名称将由“xmlrootelement//注释的类型(例如,“罐子”JarTask)。@ XmlElementRef列表 <任务> 任务;}抽象类任务}“xmlrootelement(name=“罐子”)类jartask延伸任务{…}“xmlrootelement(name=“javac”)类javactask延伸任务{…}<!“XML模式片段”>< xs:元名称=“目标”type=“目标”>< xs:complexType名称=“目标”>< xs:序列>< xs:选择maxOccurs =“无界”>< xs:元ref =“罐子”>< xs:元ref=“javac”>< / xs:选择>< / xs:序列>< / xs:名称> 任务>
因此下面的代码片段:
目标=新target();目标。任务添加(新jartask());目标。任务添加(新javactask());元帅(目标);会产生下面的XML输出:
<目标> <罐> 的…< /罐>< javac >的…< / javac >< /目标> 罐> 目标>
这是不是有一个类扩展Task没有XmlRootElement
错误。但他们不能出现在一个XML实例(因为他们没有XML元素名称)。
例2:XML Schema取代集团的支持
下面的示例显示了XML模式替换组的注释。注释和化源于图式。
@ xmlelement数学课堂{type()
is /价值/ / jaxbelement.class,说明XML/ /元一般类标记化-名称// @ xmlregistry。(见化下)/ // /name()
是“经营者”,一个指向带有注释的工厂方法/ /XmlElementDecl
名字与“经营者”。自/ /“操作符”是替换组的负责人/ /包含元素“添加”和“子”元素,“操作符”/ /元素可以在实例文档中替换/ /元素“添加”或“子”。在运行时,jaxbelement/实例包含已被的元素名称在XML文档中替换。/ /@ XmlElementRef(类型= jaxbelement。类,名字为“经营者”)jaxbelement <?扩展操作员>术语;}@ XmlRegistry类化{@ XmlElementDecl(name=“经营者”)jaxbelement < <运算符> createoperator(算符O){…}@ XmlElementDecl(name=“添加”,substitutionheadname =“经营者”)jaxbelement < <运算符> createadd(算符O){…}@ XmlElementDecl(name=“子”,substitutionheadname =“经营者”)jaxbelement < <运算符> 创建子(算符O){…}}类算子{…} 运算符> 运算符> 运算符>
因此,下面的代码片段
数学新math() M =;m.term =新objectfactory() createadd(新operator());元帅(M);会产生下面的XML输出:
< <数学> > <添加> ……< /数学> 添加> 数学>
XmlElementRefs
public abstract 类 type
如果价值是DEFAULT.class,类型是从类型的JavaBean属性推断。
public abstract String namespace
name()
JavaBean属性的XML元素。
如果type()是JAXBElement.class,然后namespace()和name()点与XmlElementDecl
工厂方法。XML元素名称的元素的名称从工厂方法的XmlElementDecl
注释或者其替代组元素(它是一头元)已经在XML文档中的元素名称取代,然后从XmlElementDecl
取代元素。
如果type()
不JAXBElement.class,那么XML元素的名称和使用注释对XmlRootElement
型静态关联的XML元素的名称。如果类型没有被注释的一个XmlElementDecl
,那么它是一个错误。
如果type()不JAXBElement.class,那么这个值必须是“”。
public abstract String name
namespace()
public abstract boolean required
如果required()属实,那么JavaBean属性映射为XML架构元素声明具有minoccurs =“1”。“1”maxOccurs单值属性和“无界”的多值属性。
如果required()是假的,那么JavaBean属性映射为XML架构元素声明具有minoccurs =“0”。“1”maxOccurs单值属性和“无界”的多值属性。
用JAXB 2.1的兼容性,该属性的默认值为true,尽管XmlElement.required()
默认为false。
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.