JAXB 元素使用说明

2024-05-12 02:18
文章标签 使用 元素 说明 jaxb

本文主要是介绍JAXB 元素使用说明,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

JAXB 元素使用说明

@XmlRootElement

@XmlRootElement 注解用于标注类或枚举类型,用它标注的类在映射后的 schema 中会以一个全局元素的形式出现,元素的类型是一个包含 Java 类属性的 XML 复杂数据类型。我们可以通过 @XmlRootElement 注解的 name 属性来定制映射的 schema 全局元素的名称,一般来说以 @XmlRootElement 标注的类在相应的 XML 文档中会以最外层或根节点形式出现。比方说有如下标注类:

@XmlRootElement(name="RootStudent",namespace="http://service.dsw.ibm.com/")
public class Student {
...
}
这个 Java 类在映射后的 Web 服务 schema 中会表现为:
<xs:element name="RootStudent" type="tns:student"/>
<xs:complexType name="student">
<xs:sequence><xs:element name="id" type="xs:int"/><xs:element name="name" type="xs:string"/>
</xs:sequence>
</xs:complexType>

 

@XmlType

@XmlType 注解用于标注类或枚举类型,用它标注的类在映射后的 schema 中中会以一个 XML 复杂数据类型的形式出现。我们可以通过 @XmlType 注解的 name 属性来定制映射的 XML 数据类型的名称,用 propOrder 属性来定制映射后的复杂数据类型的内容顺序等。比方说有如下标注类:

@XmlType(name = "CustomizedStudent", propOrder = { "name", "id", "age" })
public class Student {
private int id;
private int age;
private String name;
....
}

 

这个 Java 类在映射后的 Web 服务 schema 中会表现为:

<xs:complexType name="CustomizedStudent">
<xs:sequence><xs:element name="name" type="xs:string"/><xs:element name="id" type="xs:int"/><xs:element name="age" type="xs:int"/>
</xs:sequence>
</xs:complexType>

 

@XmlElement

@XmlElement 注解用于标注 Javabean 的属性,用它标注的属性在映射后的 schema 中以元素的形式出现,所有 Javabean 属性映射的元素组合成为 @XmlType 映射的复杂数据类型。我们可以通过 @XmlElement 注解的 name 属性定制映射后的 XML 元素的名称,用 required 属性来指定该元素是否必须出现,用 nillable 属性来指明该元素是否允许空值。比方说有如下标注类:

@XmlType(name = "CustomizedStudent", propOrder = { "name", "id", "age"})
public class Student {@XmlElement(name="StudentID",required=true)private int id;@XmlElement(name="StudentAge",nillable=true) 	private int age;@XmlElement(name="StudentName") 	private String name;
}

 

这个 Java 类在映射后的 Web 服务 schema 中会表现为:

<xs:complexType name="CustomizedStudent">
<xs:sequence><xs:element minOccurs="0" name="StudentName" type="xs:string"/><xs:element name="StudentID" type="xs:int"/><xs:element name="StudentAge" nillable="true" type="xs:int"/>
</xs:sequence>
</xs:complexType>

 

@XmlAttribute

@XmlAttribute 注解用于标注 Javabean 属性,用它标注的属性在映射后的 schema 中以元素属性形式表现。我们可以通过 @XmlAttribute 注解的 name 属性来定制映射后的名称,用 required 属性来指定是否映射后的属性为必须出现的。比方说有如下标注类:

@XmlType(name = "CustomizedStudent", propOrder={"name","id","age"})
public class Student {@XmlElement(name="StudentID")private int id;@XmlAttribute(name="StudentAge") 	private int age;@XmlAttribute(name="StudentName",required=true) 	private String name;
}

 

这个 Java 类在映射后的 Web 服务 schema 中会表现为:

<xs:complexType name="CustomizedStudent">
<xs:sequence><xs:element name="StudentID" type="xs:int"/>
</xs:sequence>
<xs:attribute name="StudentName" type="xs:string" use="required"/>
<xs:attribute name="StudentAge" type="xs:int" use="required"/>
</xs:complexType>

 

@XmlAccessorType

@XmlTransient

如果JAXB将一个类绑定到了XML,那么默认地,所有的public成员将会被绑定。比如,公共的getter和setter方法对,或者公共的field。任何protected,package-visible或者private的成员都会被绑定,如果它被添加了一个合适的注解,比如@XmlElement或者@XmlAttribute。你有若干的可能性来影响它的默认行为。

你可以将一个package或者一个顶层的class用@XmlAccessorType来注解,然后设置它的value元素的值为枚举常量中的其中一个(FIELD,PROPERTY, PUBLIC_MEMBER, NONE)。如果FIELD被设置,那么每一个非static和非transient的field将会被自动地绑定。设置为PROPERTY可以告诉JAXB去为getter和setter方法对做数据绑定。NONE的设置会禁止绑定,除了对那些已经被明确注解的field或property。一个没有使用这个注解的类将会从它的父类或者package设置中继承。

另一个在这个上下文中被提及的注解是@XmlTransient。它会为它的target阻止绑定操作,这个target可以是一个class或者一个field或者一个method。如果你遇到了从public field导致的名字冲突(拿foo来说,getFoo和setFoo),那么使用@XmlTransient将会是很有用的。

第一个class将访问类型设置为PUBLIC_MEMBER来限制一组XML元素。成员getB在绑定的时候将会被锁定。

@XmlAccessorType( XmlAccessType.PUBLIC_MEMBER )
public class SomeClass {private String a;private String b;public SomeClass(){ ... }public String getA(){ ... }public void setA( String value ){ ... }@XmlTransientpublic String getB(){ ... }public void setB( String value ){ ... }
}

与其对应的XML schema类型定义将会像下面这样:

<xs:complexType name="someClass"><xs:sequence><xs:element name="a" type="xs:string" minOccurs="0"/></xs:sequence>
</xs:complexType>

第二个例子展示了反向的过程。它展示了一个被设置为最高限制访问类型的class,这个class有一个成员被明确注解成为一个element。

@XmlAccessorType( XmlAccessType.NONE )
public class OtherClass {private String a;private String b;public OtherClass(){ ... }public String getA(){ ... }public void setA( String value ){ ... }@XmlElement( required = true )public String getB(){ ... }public void setB( String value ){ ... }
}

由于我们已经将element的注解设置为true,那么生成的schema片段就将会有一点点不同:

<xs:complexType name="otherClass"><xs:sequence><xs:element name="b" type="xs:string"/></xs:sequence>
</xs:complexType>

最后这个例子展示了使用这些注解在一些特殊的情况下。首先,@XmlTransient被用在public field上来避免方法对的名字冲突。其次,@XmlElement被用来为getB请求绑定,而它并没有自己的setB配偶。(getter方法遵循JAXB为elements绑定到List<?>所生成Java代码的标准模式,在list对象上有一些改变)

@XmlAccessorType( XmlAccessType.PUBLIC_MEMBER )
public class SpecialClass {@XmlTransientpublic String a;private List<String> b;public SpecialClass(){ ... }public String getA(){ ... }public void setA( String value ){ ... }@XmlElementpublic List<String> getB(){if( b == null ) b = new ArrayList<String>();return b;}
}

生成的复合类型会将两个element都包含在内。

<xs:complexType name="specialClass"><xs:sequence><xs:element name="a" type="xs:string" minOccurs="0"/><xs:element name="b" type="xs:string" maxOccurs="unbounded" minOccurs="0"/></xs:sequence>
</xs:complexType>

总的来看,你可以通过在package级别设置,给在一个包中的所有class指定策略;或者通过在class级别设置,给它所有的子类指定策略。这个策略可以在field或者property上,并且是很宽松的。也可以是很严格地默认什么也不允许。在这个class中,你可以通过添加@XmlElement或者@XmlAttribute来扩展一个限制严格的设置。或者你可以使用@XmlTransient注解来禁止绑定。


@XmlJavaTypeAdaptor

 

 @XmlSeeAlso

   我们的 XSD 使用了一个有意思的 XML 模式特性 —— 继承.文章 Polymorphic Web services 详细介绍了这个特性,解释了 XML 扩展和动态服务调用技术如何提供多态性.我们在 JAXB 的上下文中考虑一下图 10 所示的模式.

 

 

 

   

 

 

BaseNotification 分别派生出 TaxNotification 和 PaymentNotification。它们继承基类型的所有属性和元素,并添加自己的新属性,见清单 8

见清单 8

Java代码   收藏代码
  1. <xsd:complexType abstract="true" name="BaseNotification">  
  2.         …  
  3. </xsd:complexType>  
  4.       
  5. <xsd:complexType name="TaxNotification">  
  6.   <xsd:complexContent>  
  7.     <xsd:extension base="bo:BaseNotification">  
  8.     </xsd:extension>  
  9.   </xsd:complexContent>  
  10. </xsd:complexType>  
  11.   
  12. <xsd:complexType name="PaymentNotification">  
  13.   <xsd:complexContent>  
  14.     <xsd:extension base="bo:BaseNotification">  
  15.   
  16. ....  

 JAXB 运行时通过内省注册所需的所有 Java 类.现在,如果在运行时作为基类型传递派生的子类,那么无法通过检查接口参数类型识别出子类.

为了利用继承和多态性,在 JAXB 2.1 和 Java 6.0 中引入了一个新注解javax.xml.bind.annotation.XmlSeeAlso.@XmlSeeAlso 通过引用在 JAXBContext 中添加的额外派生子类类以及根据接口参数识别出的类实现多态性,见清单 9.

清单 9.

Java代码   收藏代码
  1. @XmlSeeAlso({  
  2.     PaymentNotification.class,  
  3.     TaxNotification.class  
  4. })  
  5. public   abstract   class BaseNotification {  
  6.   
  7. ...  
  8.   
  9. }  

这篇关于JAXB 元素使用说明的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/981324

相关文章

Zookeeper安装和配置说明

一、Zookeeper的搭建方式 Zookeeper安装方式有三种,单机模式和集群模式以及伪集群模式。 ■ 单机模式:Zookeeper只运行在一台服务器上,适合测试环境; ■ 伪集群模式:就是在一台物理机上运行多个Zookeeper 实例; ■ 集群模式:Zookeeper运行于一个集群上,适合生产环境,这个计算机集群被称为一个“集合体”(ensemble) Zookeeper通过复制来实现

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

每天认识几个maven依赖(ActiveMQ+activemq-jaxb+activesoap+activespace+adarwin)

八、ActiveMQ 1、是什么? ActiveMQ 是一个开源的消息中间件(Message Broker),由 Apache 软件基金会开发和维护。它实现了 Java 消息服务(Java Message Service, JMS)规范,并支持多种消息传递协议,包括 AMQP、MQTT 和 OpenWire 等。 2、有什么用? 可靠性:ActiveMQ 提供了消息持久性和事务支持,确保消

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

pdfmake生成pdf的使用

实际项目中有时会有根据填写的表单数据或者其他格式的数据,将数据自动填充到pdf文件中根据固定模板生成pdf文件的需求 文章目录 利用pdfmake生成pdf文件1.下载安装pdfmake第三方包2.封装生成pdf文件的共用配置3.生成pdf文件的文件模板内容4.调用方法生成pdf 利用pdfmake生成pdf文件 1.下载安装pdfmake第三方包 npm i pdfma

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

git使用的说明总结

Git使用说明 下载安装(下载地址) macOS: Git - Downloading macOS Windows: Git - Downloading Windows Linux/Unix: Git (git-scm.com) 创建新仓库 本地创建新仓库:创建新文件夹,进入文件夹目录,执行指令 git init ,用以创建新的git 克隆仓库 执行指令用以创建一个本地仓库的