前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >JAXB使用方式

JAXB使用方式

作者头像
HUC思梦
发布于 2020-09-03 07:18:41
发布于 2020-09-03 07:18:41
2.4K00
代码可运行
举报
运行总次数:0
代码可运行

JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术。该过程中,JAXB也提供了将XML实例文档反向生成Java对象树的方法,并能将Java对象树的内容重新写到 XML实例文档。

现在在软件开发中,主要也就是使用它XML与JAVA类互相转换的功能了

一些常用的属性解释:

Marshaller接口,将Java对象序列化为XML数据。 Unmarshaller接口,将XML数据反序列化为Java对象。

@XmlType,将Java类或枚举类型映射到XML模式类型 @XmlAccessorType(XmlAccessType.FIELD) ,控制字段或属性的序列化。FIELD表示JAXB将自动绑定Java类中的每个非静态的(static)、非瞬态的(由@XmlTransient(标 注)字段到XML。其他值还有XmlAccessType.PROPERTY和XmlAccessType.NONE。 @XmlAccessorOrder,控制JAXB 绑定类中属性和字段的排序。 @XmlJavaTypeAdapter,使用定制的适配器(即扩展抽象类XmlAdapter并覆盖marshal()和unmarshal()方法),以序列化Java类为XML。 @XmlElementWrapper ,对于数组或集合(即包含多个元素的成员变量),生成一个包装该数组或集合的XML元素(称为包装器)。 @XmlRootElement,将Java类或枚举类型映射到XML元素。 @XmlElement,将Java类的一个属性映射到与属性同名的一个XML元素。 @XmlAttribute,将Java类的一个属性映射到与属性同名的一个XML属性。

下面是代码演示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import java.io.Serializable;

import javax.inject.Named;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;

/**
 * @XmlAccessorType(XmlAccessType.FIELD)指定映射本类的所有字段
 * @XmlRootElement 用在class类的注解,常与@XmlRootElement,@XmlAccessorType一起使用.也可以单独使用,如果单独使用,需要在get方法上加@XmlElement等注解.
 * @XmlType,在使用@XmlType的propOrder 属性时,必须列出JavaBean对象中的所有XmlElement,否则会报错。
 * @author smn
 * 
 */
@Named
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "Customer")
@XmlType(name = "Customer", propOrder = { "age", "name" })
public class Customer implements Serializable {

    private static final long serialVersionUID = 1L;
    
    // 其实@XmlType已经默认会读取下面的name和age.@XmlElement在@XmlType存在的情况下,只会起到一个标识作用.
    @XmlAttribute
    int id;
    @XmlElement
    String name;
    @XmlElement
    int age;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

JAVA转为XML

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    public static void main(String[] args) {
        Customer cus=new Customer();
        cus.setId(1);
        cus.setName("Hello World!");
        cus.setAge(26);
        
        try {
            File file=new File("D:\\HelloWorld.xml");
            //初始化JAXBContext.JAXBContext类提供的JAXB API的客户端的入口点。
            //它提供一个抽象的用于管理XML / Java绑定的必要信息,以实现JAXB绑定框架行动:解组,编组和验证。
            JAXBContext jc=JAXBContext.newInstance(Customer.class);
            //将Java对象Marshal成XML内容的Marshal的初始化设置.
            Marshaller jaxbMarshaller=jc.createMarshaller();
            //output
            jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
            jaxbMarshaller.marshal(cus, file);
            jaxbMarshaller.marshal(cus, System.out);
            
        } catch (JAXBException e) {
            System.out.println("output xml error!");
            e.printStackTrace();
        }
    }

XML转为JAVA

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    public static void main(String[] args) {
        File file=new File("D:\\HelloWorld.xml");
        try {
            //反着来
            JAXBContext jc=JAXBContext.newInstance(Customer.class);
            Unmarshaller unmarshaller=jc.createUnmarshaller();
            Customer cus=(Customer) unmarshaller.unmarshal(file);
            System.out.println("data:"+cus);
            System.out.println("data:"+cus.getId());
            System.out.println("data:"+cus.getName());
            System.out.println("data:"+cus.getAge());
        } catch (JAXBException e) {
            System.out.println("input xml error!");
            e.printStackTrace();
        }
        
    }

通常情况下就像上面的代码一样,转换后存储在本地,但这样并不能完成项目的实际应用,所以我们可以进行一下下面的优化

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public static void main(String[] args) {
        Customer cus=new Customer();
        cus.setId(1);
        cus.setName("Hello World!");
        cus.setAge(26);
        
        try {
            //初始化JAXBContext.JAXBContext类提供的JAXB API的客户端的入口点。
            //它提供一个抽象的用于管理XML / Java绑定的必要信息,以实现JAXB绑定框架行动:解组,编组和验证。
            JAXBContext jc=JAXBContext.newInstance(Customer.class);
            //将Java对象Marshal成XML内容的Marshal的初始化设置.
            Marshaller jaxbMarshaller=jc.createMarshaller();
            StringWriter writer=new StringWriter();
            jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
            jaxbMarshaller.marshal(cus, writer);
        
            System.out.println(writer);
            
        } catch (JAXBException e) {
            System.out.println("output xml error!");
            e.printStackTrace();
        }
    }

可以看到我们并不需要把XML存储到本地,可以在生成后直接将其转换为字符串,这样我们就可以通过dom4j、jdom等三方jar包对XML格式的字符串进行解析处理,如果把上面代码优化封装成一个泛型方法,就可以很方便的实现自动解析XML或者自动将实体类生成XML文件等操作。

当然生成XML文件的功能也很实用,比如制作一个自动生成数据库对象的生成工具。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-10-24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
xml与java对象的快速互转
做流程图的项目时,新的流程定义为xml的,需要对xml与java对象进行互转 查了一下activiti的转换xml方式,发现转换太麻烦了,需要一步步的解析xml 后面发现直接用jaxb就可以很快实现互转,而且现在这个jaxb在jdk内,不需要引入外部的解析xml的包 具体如下: 一.根据XML构建java对象
星痕
2018/09/12
3.9K0
springMVC整合JAXB[通俗易懂]
由于项目中要用到将Java对象转为xml返回给调用者。选择使用JAXB,由于它是JDK自带的。不须要引入其它Jar包
全栈程序员站长
2022/07/06
8680
springMVC整合JAXB[通俗易懂]
java程序 如何优雅地读取xml文件
实例xml <?xml version="1.0" encoding="UTF-8"?> <c c1="0"> <d d1="101280101" d2="广州" d3="guangzhou" d
Meet相识
2018/09/12
2.9K0
XmlRootElement的作用和用法
手动封装实体类转换成xml 实体类 import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; /**  * @ClassName RequetsXml  * @Desc
java攻城狮
2020/10/10
4.3K0
XStream、JAXB 日期(Date)、数字(Number)格式化输出xml
XStream、Jaxb是java中用于对象xml序列化/反序列化 的经典开源项目,利用它们将对象转换成xml时,经常会遇到日期(Date)、数字按指定格式输出的需求,下面是使用示例: 一、日期字段格式化输出 1.1 xStream 1 XStream x = new XStream(); 2 x.registerConverter(new DateConverter("yyyy-MM-dd HH:mm:ss", null,TimeZone.getTimeZone("GMT+8"))); xStream默认
菩提树下的杨过
2018/01/19
2.7K0
Java对象和XML相互转换
JDK中JAXB相关的重要Class和Interface:(来源于百度百科JAXB)
JokerDJ
2023/11/27
6590
Java_数据交换_JAXB_用法入门
JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术。该过程中,JAXB也提供了将XML实例文档反向生成Java对象树的方法,并能将Java对象树的内容重新写到 XML实例文档。
shirayner
2018/08/10
1.7K0
Java_数据交换_JAXB_用法入门
JAXB应用实例
过往的项目中数据存储都离不开数据库,不过最近做的一个项目的某些数据(比如人员信息、菜单、权限等等)却完全没有涉及任何数据库操作,直接XML搞定。这里无意比较优劣,因为数据库存储和XML存储本就有不同的适用场景,盲目比较毫无意义,只是因为业务需要,仅此而已。先来概念一下——XML,可扩展标记语言,设计宗旨是用来传输数据而非显示数据,其遵循W3C标准,是一种通用的数据交换格式,具有很强的跨平台性,并且数据无需转换,所以,如果你要将数据做跨平台传输,那么把数据保存在 XML 文件中是有好处的。当然,这里要说明,
用户1615728
2018/04/17
3.6K0
JAXB应用实例
OpenJDK8升级到OpenJDK11需要注意的修改与异常
目前,JDK两个长期版本是8和11,由于大部分项目使用的还是8,所以从8升级到11会遇到一些困难。
干货满满张哈希
2021/04/12
1.3K0
Java程序员必备基础:JDK 5-15都有哪些经典新特性
包装类型有:Integer,Double,Float,Long,Short,Character和Boolean
捡田螺的小男孩
2020/09/28
1K0
Java程序员必备基础:JDK 5-15都有哪些经典新特性
【Java】已解决:javax.xml.bind.JAXBException: JAXB
在Java开发过程中,处理XML数据时常会使用JAXB(Java Architecture for XML Binding)进行对象和XML之间的相互转换。然而,使用JAXB时可能会遇到javax.xml.bind.JAXBException: JAXB的异常。这篇文章将深入分析这一异常的背景、原因,提供错误与正确的代码示例,并列出相关的注意事项,帮助开发者有效解决这一问题。
屿小夏
2024/09/07
1.1K0
【Java】已解决:javax.xml.bind.JAXBException: JAXB
java xml与实体类转换「建议收藏」
@XmlRootElement注解定义xml的根节点 通过name改变根节点的xml值
全栈程序员站长
2022/09/16
2.2K0
基于CXF的WebService服务端Java代码
基于CXF的WebService服务端代码  </div> ESBServiceSoap.java     package com.esb.services.commservices; import javax.jws.WebMethod; import javax.jws.WebParam; import javax.jws.WebResult; import javax.jws.WebService; import javax.jws.soap.SOAPBinding; import javax.jw
用户8671053
2021/09/23
6390
java webservice asmx_WebService-asmx后缀接口调用[通俗易懂]
简述:.asmx是webservice服务程序的后缀名,ASP.NET 使用.asmx 文件来对Web Services的支持。.asmx 文件和.aspx文件一样都属于文本文件。它包含在.aspx文件之中,成为ASP.NET应用程序的一部分。
全栈程序员站长
2022/07/01
2.2K0
xml解析系列(二)——用Marshaller和Unmarshaller解析xml
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
逝兮诚
2019/10/30
2.4K0
java JAXB 学习
JAXB(Java Architecture for XML Binding)是JDK的一部分,用于Object <-> XML的转换(有点类似于.NET中的XML序列化)。 1、创建XSD 可以使用
菩提树下的杨过
2018/01/24
1.5K0
java JAXB 学习
SpringWS创建webservice服务端及客户端
2、编写pim.xsd文件,此文件放于resources(springWS\src\main\resources\pim.xsd)
全栈程序员站长
2022/11/14
2.2K0
SpringWS创建webservice服务端及客户端
如何实现天气数据的同步和使用QuartzScheduler?
在micro-weather-redis应用的基础上,创建一个名称为micro-weather-quartz的应用,用于同步天气数据。
愿天堂没有BUG
2022/10/28
1.5K0
如何实现天气数据的同步和使用QuartzScheduler?
使用jaxb进行xml到bean的转换(尝试解决空值不显示问题)
import javax.xml.bind.Marshaller; import java.lang.reflect.Field; //监听生成xml文件过程 public class MarshallerListener extends Marshaller.Listener { public static final String BLANK_CHAR = ""; @Override public void beforeMarshal(Object source) {
JQ实验室
2022/02/10
2.5K0
Java xml数据格式返回实现
前言:对于服务器后端开发,接口返回的数据格式一般要求都是json,但是也有使用xml格式
全栈程序员站长
2022/09/13
1.3K0
Java xml数据格式返回实现
相关推荐
xml与java对象的快速互转
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文