jaxb需要jar包吗

似乎有一个误解,认为在模型上需要注释才能使用JAXB(JSR-222)实现。 事实是,JAXB是例外配置,因此仅当您要覆盖默认行为时才需要注释。 在此示例中,我将演示如何在不提供任何元数据的情况下使用JAXB。

领域模型

在此示例中,我将使用以下域模型。 注意如何没有任何类型的注释。

顾客

在此示例中, 客户是根对象。 通常,我们将使用@XmlRootElement对其进行注释 。 稍后在演示代码中,您将看到我们如何使用JAXBElement实例。

package blog.defaults;import java.util.List;public class Customer {private String firstName;private String lastName;private List<PhoneNumber> phoneNumbers;public String getFirstName() {return firstName;}public void setFirstName(String firstName) {this.firstName = firstName;}public String getLastName() {return lastName;}public void setLastName(String lastName) {this.lastName = lastName;}public List<PhoneNumber> getPhoneNumbers() {return phoneNumbers;}public void setPhoneNumbers(List<PhoneNumber> phoneNumbers) {this.phoneNumbers = phoneNumbers;}}

电话号码

我特意为此类中的字段指定了废话名称,以便稍后在查看XML时,您将能够看到默认情况下元素名称是从属性而不是字段派生的。

package blog.defaults;public class PhoneNumber {private String foo;private String bar;public String getType() {return foo;}public void setType(String type) {this.foo = type;}public String getNumber() {return bar;}public void setNumber(String number) {this.bar = number;}}

示范代码

由于我们没有使用@XmlRootElement (或@XmlElementDecl )将根元素与Customer类相关联,因此我们需要告诉JAXB我们要将XML文档解组到哪个类。 这可以通过使用采用Class参数(第14行)的解组方法之一来完成。 这将返回J AXBElement ,然后通过在其上调用getValue来访问Customer对象(第15行)。 为了将对象封送回XML,我们需要确保将其包装在JAXBElement中以提供根元素信息(第17行)。

package blog.defaults;import javax.xml.bind.*;
import javax.xml.namespace.QName;
import javax.xml.transform.stream.StreamSource;public class Demo {public static void main(String[] args) throws Exception {JAXBContext jc = JAXBContext.newInstance(Customer.class);StreamSource xml = new StreamSource("src/blog/defaults/input.xml");Unmarshaller unmarshaller = jc.createUnmarshaller();JAXBElement<Customer> je1 = unmarshaller.unmarshal(xml, Customer.class);Customer customer = je1.getValue();JAXBElement<Customer> je2 = new JAXBElement<Customer>(new QName("customer"), Customer.class, customer);Marshaller marshaller = jc.createMarshaller();marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);marshaller.marshal(je2, System.out);}}

input.xml /输出

以下是运行演示代码的输入和输出。 我们首先看到的是,它是数据的非常合理的XML表示形式,没有任何JAXB工件。 默认情况下,JAXB会将所有内容封送为XML元素,根据PhoneNumber类,我们看到元素名称是从属性名称派生的。

<?xml version="1.0" encoding="UTF-8"?>
<customer><firstName>Jane</firstName><lastName>Doe</lastName><phoneNumbers><number>555-1111</number><type>work</type></phoneNumbers><phoneNumbers><number>555-2222</number><type>home</type></phoneNumbers>
</customer>

进一步阅读

如果您喜欢这篇文章,那么您可能也会对以下内容感兴趣:

  • 该博客上的大多数文章都描述了如何利用JAXB元数据的功能来支持不同的用例,我邀请您检查一下它们:
    • http://blog.bdoughan.com/?tag=jaxb
  • 如果您希望在不使用批注的情况下指定元数据,则可能对EclipseLink JAXB(MOXy)的外部映射文档感兴趣:
    • 扩展JAXB –将元数据表示为XML
    • 扩展JAXB –将元数据表示为JSON

参考: JAXB – Java XML和JSON绑定博客中的JCG合作伙伴 Blaise Doughan 不需要注释 。

翻译自: https://www.javacodegeeks.com/2012/07/jaxb-no-annotations-required.html

jaxb需要jar包吗

jaxb需要jar包吗_JAXB –不需要注释相关推荐

  1. eclipse查看jar包中class的中文注释乱码问题的解决

    1,问题来源是在eclipse中直接查看springside的class(由eclipse自动反编译)里面注释的乱码问题: Preferences-General-Workspace-Text fil ...

  2. Android NDK开发:打包so库及jar包供他人使用

    文章目录 一.目标及方式 二.新建调用方工程 三.新建库module 四.为库模块添加c++支持 4.1 准备CMakeLists文件 4.2 修改sdk的gradle脚本 4.3 编写c++及jav ...

  3. 项目常用工具类整理(五)--jar包整理

    2019独角兽企业重金招聘Python工程师标准>>> SSH框架: Struts1.2.9+Spring2.5+Hibernate3.2 说明:commons的几个包算是公用Jar ...

  4. java jar包收集

    activation~与javaMail有关的jar包,使用javaMail时应与mail.jar (mail.jar和activation.jar)一起加入到lib中去,具体负责mail的数据源和类 ...

  5. 2. Hibernate目录结构和基础JAR包介绍

    一.下载 1. 官网: http://hibernate.org/ https://sourceforge.net/projects/hibernate/files/hibernate-orm/5.4 ...

  6. Java常用开源jar包

    Java常用开源jar包 转:http://blog.csdn.net/kevingao/article/details/8125683 activation~与javaMail有关的jar包,使用j ...

  7. 手动将web项目的class文件打成jar包,手动打jar包,java -cvf,IDE打包底层指令

    手动将web项目的class文件打成jar包. 我们的项目在使用IDE进行编译后,在项目的target目录下将会生成class文件.我们可以将class文件打成jar包. 使用的到命令为: 在targ ...

  8. 将jar包部署在docker上,将jar包打成镜像,使用docker部署jar包

    假设你已经准备好以下东西,即可进行服务部署 一台安装好docker的linux服务器(安装docker见安装docker) 准备好的jar包 接下来开始吧! 将jar包上传至服务器(建好文件夹存放以方 ...

  9. jar包升级部署到服务器详细流程,将服务部署在linux中

    假设你已经准备好以下东西,即可进行服务部署 一台服务器(云服务器或虚拟机皆可) 已安装好的jdk 1.8 + 的环境(可自行百度) 打好的jar包(maven打jar包) 1. 在服务器中新建好你的项 ...

最新文章

  1. 5-flutter 布局和列表
  2. 大厂需要这样的Java工程师
  3. Android Sensors (2) 传感器API的使用
  4. VTK:vtkAnnotatedCubeActor用法实战
  5. tmeminifile and tinifile
  6. 17_python基础—面向对象-继承
  7. sqlyog备份数据和导入备份数据
  8. Netty源代码学习——EventLoopGroup原理:NioEventLoopGroup分析
  9. pytorch nonzero_[深度学习框架]PyTorch常用代码段
  10. 学术壁报模板_电子壁报 | 中华医学会第十四次全国妇产科学学术会议
  11. MATLAB r2016a 配置 VLFeat 库教程(超详细,一看必会)
  12. 精简版oracle客户端程序
  13. js 导出 excel
  14. 历史大盘跌停记录,2016大盘跌停原因
  15. 多级评论回复功能(纯前端,未连数据库)
  16. 【摸鱼神器】— 五子棋
  17. R语言交叉验证(详细)
  18. Ubuntu音乐播放器
  19. LeetCode之单词搜索(回溯法求解)
  20. 高通batterydata电池曲线数据学习

热门文章

  1. Jsoup代码解读之六-parser(下)
  2. 你真的了解Java中的三目运算符吗
  3. 并发场景下MySQL存在的问题及解决思路
  4. 阿里巴巴对Java编程【命名风格】的规约
  5. DevOps到底是什么鬼?DevOps介绍及工具推荐
  6. publiccms中,怎么修改默认的端口8080以及默认上下文名称
  7. JSP 获得服务器时间和浏览器时间
  8. 防止properties乱码配置---SpringBoot
  9. 检测窥屏_开挂、狙击、窥屏?乱象丛生的炉石狂野天梯,到底怎么了?
  10. win10安装dockerx docker的常见命令 可以子腾讯云上做做练习