`
234390216
  • 浏览: 10233033 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
博客专栏
A5ee55b9-a463-3d09-9c78-0c0cf33198cd
Oracle基础
浏览量:462625
Ad26f909-6440-35a9-b4e9-9aea825bd38e
springMVC介绍
浏览量:1775522
Ce363057-ae4d-3ee1-bb46-e7b51a722a4b
Mybatis简介
浏览量:1398366
Bdeb91ad-cf8a-3fe9-942a-3710073b4000
Spring整合JMS
浏览量:395023
5cbbde67-7cd5-313c-95c2-4185389601e7
Ehcache简介
浏览量:679987
Cc1c0708-ccc2-3d20-ba47-d40e04440682
Cas简介
浏览量:530892
51592fc3-854c-34f4-9eff-cb82d993ab3a
Spring Securi...
浏览量:1183952
23e1c30e-ef8c-3702-aa3c-e83277ffca91
Spring基础知识
浏览量:467932
4af1c81c-eb9d-365f-b759-07685a32156e
Spring Aop介绍
浏览量:151398
2f926891-9e7a-3ce2-a074-3acb2aaf2584
JAXB简介
浏览量:68154
社区版块
存档分类
最新评论

JAXB(一)——初体验之实现XML和对象之间的映射

阅读更多

 

         JAXB的全称是Java Architecture for XML Binding,是一项可以通过XML产生Java对象,也可以通过Java对象产生XML的技术。JDK中关于JAXB部分有几个比较重要的接口或类,如:

Ø  JAXBContext:它是程序的入口类,提供了XML/Java绑定的操作,包括marshalunmarshal等。

Ø  Marshaller:它负责把Java对象序列化为对应的XML

Ø  Unmarshaller:它负责把XML反序列化为对应的Java对象。

 

序列化

         进行序列化的基本操作步骤如下:

   //1、获取一个基于某个classJAXBContext,即JAXB上下文

   JAXBContext jaxbContext = JAXBContext.newInstance(obj.getClass());

   //2、利用JAXBContext对象创建对象的Marshaller实例。

   Marshaller marshaller = jaxbContext.createMarshaller();

   //3、设置一些序列化时需要的指定的配置

   marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);

    marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);

    StringWriter writer = new StringWriter();

    //4、将对象进行序列化

    marshaller.marshal(obj, writer);

 

1、  创建一个JAXB上下文对象。

2、  利用JAXB上下文对象创建对应的Marshaller对象。

3、  指定序列化时的配置参数,具体可以设置的参数和对应的参数的含义可以参考API文档。

4、  最后一步是将对应的对象序列化到一个WriterOutputStreamFile等输出对象中,具体可以参考Marshaller接口的API文档。

 

         使用JAXB进行对象的序列化时对应的对象类型必须是javax.xml.bind.JAXBElement类型,或者是使用了javax.xml.bind.annotation.XmlRootElement注解标注的类型。XmlRootElement用于标注在class上面,表示把一个class映射为一个XML Element对象。与之相配合使用的注解通常还有XmlElementXmlAttributeXmlElement注解用于标注在class的属性上,用于把一个class的属性映射为一个XML Element对象。XmlAttribute注解用于标注在class的属性上,用于把一个class的属性映射为其class对应的XML Element上的一个属性。默认情况下,当我们的一个属性没有使用XmlElement标注时也会被序列化为Xml元素的一个子元素,如果我们不希望Java对象中的某个属性被序列化则可以在对应的属性或对应的get方法上采用XMLTransient进行标注。

 

示例

Person

@XmlRootElement

public class Person {

 

   private Integer id;

   private String name;

   private Integer age;

   private Address address;

 

   @XmlAttribute(name = "id")

   public Integer getId() {

      returnid;

   }

 

   public void setId(Integer id) {

      this.id = id;

   }

 

   @XmlAttribute

   public String getName() {

      returnname;

   }

 

   public void setName(String name) {

      this.name = name;

   }

 

   @XmlElement

   public Integer getAge() {

      returnage;

   }

 

   public void setAge(Integer age) {

      this.age = age;

   }

 

   @XmlElement

   public Address getAddress() {

      returnaddress;

   }

 

   public void setAddress(Address address) {

      this.address = address;

   }

 

}

 

Address

 

@XmlRootElement

public class Address {

 

   private Integer id;

   private String province;

   private String city;

   private String area;

   private String other;

 

   @XmlAttribute(name="id")

   public Integer getId() {

      returnid;

   }

 

   public void setId(Integer id) {

      this.id = id;

   }

 

   @XmlElement

   public String getProvince() {

      returnprovince;

   }

 

   public void setProvince(String province) {

      this.province = province;

   }

 

   @XmlElement

   public String getCity() {

      returncity;

   }

 

   public void setCity(String city) {

      this.city = city;

   }

 

   @XmlElement

   public String getArea() {

      returnarea;

   }

 

   public void setArea(String area) {

      this.area = area;

   }

 

   @XmlElement

   public String getOther() {

      returnother;

   }

 

   public void setOther(String other) {

      this.other = other;

   }

 

}

 

测试方法

   @Test

   public void testMarshal() throws JAXBException {

      JAXBContext context = JAXBContext.newInstance(Person.class);

      Marshaller marshaller = context.createMarshaller();

      marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

      StringWriter writer = new StringWriter();

      Person person = new Person();

      person.setId(1);

      person.setName("张三");

      person.setAge(30);

      Address address = new Address();

      address.setId(1);

      address.setProvince("广东省");

      address.setCity("深圳市");

      address.setArea("南山区");

      address.setOther("其它");

      person.setAddress(address);

     

      marshaller.marshal(person, writer);

      System.out.println(writer.toString());

   }

 

输出结果

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<person id="1" name="张三">

    <address id="1">

        <area>南山区</area>

        <city>深圳市</city>

        <other>其它</other>

        <province>广东省</province>

    </address>

    <age>30</age>

</person>

 

反序列化

         进行反序列化的基本步骤如下:

   //1、创建一个指定classJAXB上下文对象

   JAXBContext context = JAXBContext.newInstance(Person.class);

   //2、通过JAXBContext对象创建对应的Unmarshaller对象。

   Unmarshaller unmarshaller = context.createUnmarshaller();

   File file = new File("D:\\person.xml");

   //3、调用Unmarshaller对象的unmarshal方法进行反序列化,接收的参数可以是一个InputStreamReaderFile

   Person person = (Person) unmarshaller.unmarshal(file);

 

         Unmarshaller对象在提供了一系列的unmarshal重载方法,对应的参数类型可以是FileInputStreamReader等,具体的可以查看对应的API文档。

 

JAXB工具类

         除了使用JAXBContext来创建MarshallerUnmarshaller对象来实现Java对象和XML之间的互转外,Java还为我们提供了一个工具类JAXBJAXB工具类提供了一系列的静态方法来简化了Java对象和XML之间的互转,只需要简单的一行代码即可搞定。

 

   @Test

   public void testMarshal1() {

      Person person = new Person();

      person.setId(1);

      person.setName("张三");

      person.setAge(30);

      Address address = new Address();

      address.setId(1);

      address.setProvince("广东省");

      address.setCity("深圳市");

      address.setArea("南山区");

      address.setOther("其它");

      person.setAddress(address);

      JAXB.marshal(person, System.out);

   }

 

   @Test

   public void testUnmarshal1() {

      File xml = new File("D:\\person.xml");

      Person person = JAXB.unmarshal(xml, Person.class);

      System.out.println(person);

   }

 

 

1
6
分享到:
评论

相关推荐

    用jaxb 实现 xml转java对象技术

    这时,Java Architecture for XML Binding(JAXB)应运而生,它是一种标准的Java技术,用于在Java对象和XML之间进行自动转换,极大地简化了这一过程。 **JAXB简介** JAXB是Java SE的一部分,提供了一种从Java类到...

    Jaxb2 实现JavaBean与xml互转

    JAXB是Java平台的标准之一,它定义了如何将Java类和XML Schema进行绑定,从而实现对象和XML之间的转换。通过JAXB,开发者可以自动生成JavaBean类,或者将已有的JavaBean类转换为XML Schema,然后利用这些信息进行...

    JaxbUtil.zip_jaxb

    总的来说,`JaxbUtil.zip_jaxb`提供的`JaxbUtil.java`工具类,是JAXB技术的一个简单实现,能够帮助开发者快速地在XML和Java对象之间进行转换,提高开发效率。理解和掌握JAXB及其使用方式,对于处理XML数据的Java...

    Java中四种XML解析技术分析对比

    JAXB是一种对象到XML和XML到对象的自动转换框架。它提供了一种将Java类映射到XML Schema的方式,使得XML序列化和反序列化变得简单。JAXB适合于处理Java对象与XML之间的数据交换,简化了编码工作,但可能不适合需要...

    XML开发技术教程

    包括DOM(文档对象模型)、SAX(简单API for XML)和StAX(流式API for XML)三种解析器的使用方法,以及JAXB(Java Architecture for XML Binding)框架,用于XML和Java对象之间的映射。 最后,《使用JAXB处理XML...

    支持XML转Bean

    首先,我们需要了解Java的API——JAXB(Java Architecture for XML Binding),这是一个用于在Java对象和XML之间进行映射的标准库。JAXB允许我们自动生成Bean类或者反向生成XML Schema,简化了XML的序列化和反序列化...

    使用java解析XML文件,解析完之后将解析结果导入mysql数据库中

    JAXB用于对象与XML之间的映射,而DOM则用于解析整个XML文档到内存中的树形结构。对于数据库操作,我们会使用JDBC(Java Database Connectivity)接口。 1. **解析XML文件**: - DOM解析:首先,通过`javax.xml....

    java_xml_api.rar_xml文档分析

    在实际开发中,为了方便和高效地操作XML,通常会使用如JAXB(Java Architecture for XML Binding)这样的工具,它允许将XML文档直接绑定到Java对象,简化了数据的序列化和反序列化过程。此外,Apache的 Commons ...

    java 解析xml

    除了DOM和SAX,Java还引入了另一种解析方式——StAX(Streaming API for XML),它介于两者之间,提供了更高效的流式处理。StAX允许程序以迭代的方式逐个处理XML事件,既不像DOM那样占用大量内存,也不像SAX那样需要...

    sax,dom解析xml和生产xml文件

    JAXB允许直接将Java对象映射到XML,而JDOM提供了一种更面向Java的API来处理XML。 总结: SAX与DOM是XML解析的两种主要方法,各有优劣。SAX适用于大文件,节省内存;DOM适用于小文件,方便查询和操作。在生成XML文件...

    webServices学习之二——axis1传递复杂类型javabean

    当一个JavaBean作为Web服务调用的参数时,Axis1会使用Java Architecture for XML Binding (JAXB) 来将Java对象转换为XML格式,这个过程称为对象到XML的序列化。反之,当响应返回时,它会将XML反序列化回Java对象。...

    SCWCD之路——前言

    9. **JAXB(Java Architecture for XML Binding)**:用于XML和Java对象之间的转换,简化了XML的处理。 10. **JAF(JavaBeans Activation Framework)**和**JAFR(JavaBeans Activation Framework for Resources)*...

    xml高级编程4(主页可下载其余部分)

    7. **XML绑定和对象模型**:一些编程语言提供了XML绑定,将XML数据直接映射到对象,简化了数据交换。例如,Java的JAXB(Java Architecture for XML Binding)和.NET的XML serialization。 8. **RESTful服务与XML**...

    JDK 6.2.3文文档.rar

    JAXB2实现对象与XML之间的映射 StAX Compiler API 轻量级 Http Server API 插入式注解处理API(Pluggable Annotation Processing API) 用Console开发控制台程序 对脚本语言的支持(如:ruby,groovy,javascript) ...

    XML开发包xstream.zip

    XStream是Java平台上的一个开源库,它提供了一种简单且直观的方式来序列化和反序列化Java对象到XML,反之亦然。这个开发包“xstream.zip”包含的是XStream的特定版本——1.4.3-SNAPSHOT。 **XStream的核心功能:** ...

    最新XML学习进阶课件

    - JAXB概述:了解JAXB(Java Architecture for XML Binding)如何自动将Java对象和XML相互转换。 - 类到XML:学习如何使用JAXB注解将Java类映射为XML文档。 - XML到类:掌握如何从XML文档反向生成Java对象。 ...

    wxml 源代码

    WXML是针对Java开发者的实用工具,它利用DOM4J的强大功能,帮助开发者高效地处理XML数据,实现XML与Java对象之间的无缝转换。对于需要处理大量XML数据的项目,WXML无疑是一个值得考虑的解决方案。通过下载并研究提供...

    digester3.2 源码

    Apache Digester是一个强大的Java库,用于在XML文档和Java对象之间建立映射关系,通过规则来自动解析XML并创建或更新对象结构。在digester3.2版本中,我们能够深入理解其内部工作机制,提升XML处理的效率和灵活性。 ...

    JAVA6开发WebService (三)——几个概念

    2. **JAXB (Java Architecture for XML Binding)**: JAXB是Java中用于XML和Java对象之间的映射工具。它允许开发者将XML文档解析为Java对象,或者将Java对象转换为XML文档。在JAX-WS中,JAXB用于将Java方法的参数和...

    Java JDK 6学习笔记——ppt简体版

    JDK 6对XML处理进行了增强,包括StAX(Streaming API for XML)的集成,提供了更加低级别的、基于事件的XML解析,以及JAXB(Java Architecture for XML Binding)的改进,使得XML与Java对象之间的映射更加简便。...

Global site tag (gtag.js) - Google Analytics