JAXB的全称是Java Architecture for XML Binding,是一项可以通过XML产生Java对象,也可以通过Java对象产生XML的技术。JDK中关于JAXB部分有几个比较重要的接口或类,如:
Ø JAXBContext:它是程序的入口类,提供了XML/Java绑定的操作,包括marshal、unmarshal等。
Ø Marshaller:它负责把Java对象序列化为对应的XML。
Ø Unmarshaller:它负责把XML反序列化为对应的Java对象。
序列化
进行序列化的基本操作步骤如下:
//1、获取一个基于某个class的JAXBContext,即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、 最后一步是将对应的对象序列化到一个Writer、OutputStream、File等输出对象中,具体可以参考Marshaller接口的API文档。
使用JAXB进行对象的序列化时对应的对象类型必须是javax.xml.bind.JAXBElement类型,或者是使用了javax.xml.bind.annotation.XmlRootElement注解标注的类型。XmlRootElement用于标注在class上面,表示把一个class映射为一个XML Element对象。与之相配合使用的注解通常还有XmlElement和XmlAttribute。XmlElement注解用于标注在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、创建一个指定class的JAXB上下文对象
JAXBContext context = JAXBContext.newInstance(Person.class);
//2、通过JAXBContext对象创建对应的Unmarshaller对象。
Unmarshaller unmarshaller = context.createUnmarshaller();
File file = new File("D:\\person.xml");
//3、调用Unmarshaller对象的unmarshal方法进行反序列化,接收的参数可以是一个InputStream、Reader、File等
Person person = (Person) unmarshaller.unmarshal(file);
Unmarshaller对象在提供了一系列的unmarshal重载方法,对应的参数类型可以是File、InputStream、Reader等,具体的可以查看对应的API文档。
JAXB工具类
除了使用JAXBContext来创建Marshaller和Unmarshaller对象来实现Java对象和XML之间的互转外,Java还为我们提供了一个工具类JAXB。JAXB工具类提供了一系列的静态方法来简化了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);
}
相关推荐
这时,Java Architecture for XML Binding(JAXB)应运而生,它是一种标准的Java技术,用于在Java对象和XML之间进行自动转换,极大地简化了这一过程。 **JAXB简介** JAXB是Java SE的一部分,提供了一种从Java类到...
JAXB是Java平台的标准之一,它定义了如何将Java类和XML Schema进行绑定,从而实现对象和XML之间的转换。通过JAXB,开发者可以自动生成JavaBean类,或者将已有的JavaBean类转换为XML Schema,然后利用这些信息进行...
总的来说,`JaxbUtil.zip_jaxb`提供的`JaxbUtil.java`工具类,是JAXB技术的一个简单实现,能够帮助开发者快速地在XML和Java对象之间进行转换,提高开发效率。理解和掌握JAXB及其使用方式,对于处理XML数据的Java...
JAXB是一种对象到XML和XML到对象的自动转换框架。它提供了一种将Java类映射到XML Schema的方式,使得XML序列化和反序列化变得简单。JAXB适合于处理Java对象与XML之间的数据交换,简化了编码工作,但可能不适合需要...
包括DOM(文档对象模型)、SAX(简单API for XML)和StAX(流式API for XML)三种解析器的使用方法,以及JAXB(Java Architecture for XML Binding)框架,用于XML和Java对象之间的映射。 最后,《使用JAXB处理XML...
首先,我们需要了解Java的API——JAXB(Java Architecture for XML Binding),这是一个用于在Java对象和XML之间进行映射的标准库。JAXB允许我们自动生成Bean类或者反向生成XML Schema,简化了XML的序列化和反序列化...
JAXB用于对象与XML之间的映射,而DOM则用于解析整个XML文档到内存中的树形结构。对于数据库操作,我们会使用JDBC(Java Database Connectivity)接口。 1. **解析XML文件**: - DOM解析:首先,通过`javax.xml....
在实际开发中,为了方便和高效地操作XML,通常会使用如JAXB(Java Architecture for XML Binding)这样的工具,它允许将XML文档直接绑定到Java对象,简化了数据的序列化和反序列化过程。此外,Apache的 Commons ...
除了DOM和SAX,Java还引入了另一种解析方式——StAX(Streaming API for XML),它介于两者之间,提供了更高效的流式处理。StAX允许程序以迭代的方式逐个处理XML事件,既不像DOM那样占用大量内存,也不像SAX那样需要...
JAXB允许直接将Java对象映射到XML,而JDOM提供了一种更面向Java的API来处理XML。 总结: SAX与DOM是XML解析的两种主要方法,各有优劣。SAX适用于大文件,节省内存;DOM适用于小文件,方便查询和操作。在生成XML文件...
当一个JavaBean作为Web服务调用的参数时,Axis1会使用Java Architecture for XML Binding (JAXB) 来将Java对象转换为XML格式,这个过程称为对象到XML的序列化。反之,当响应返回时,它会将XML反序列化回Java对象。...
9. **JAXB(Java Architecture for XML Binding)**:用于XML和Java对象之间的转换,简化了XML的处理。 10. **JAF(JavaBeans Activation Framework)**和**JAFR(JavaBeans Activation Framework for Resources)*...
7. **XML绑定和对象模型**:一些编程语言提供了XML绑定,将XML数据直接映射到对象,简化了数据交换。例如,Java的JAXB(Java Architecture for XML Binding)和.NET的XML serialization。 8. **RESTful服务与XML**...
JAXB2实现对象与XML之间的映射 StAX Compiler API 轻量级 Http Server API 插入式注解处理API(Pluggable Annotation Processing API) 用Console开发控制台程序 对脚本语言的支持(如:ruby,groovy,javascript) ...
XStream是Java平台上的一个开源库,它提供了一种简单且直观的方式来序列化和反序列化Java对象到XML,反之亦然。这个开发包“xstream.zip”包含的是XStream的特定版本——1.4.3-SNAPSHOT。 **XStream的核心功能:** ...
- JAXB概述:了解JAXB(Java Architecture for XML Binding)如何自动将Java对象和XML相互转换。 - 类到XML:学习如何使用JAXB注解将Java类映射为XML文档。 - XML到类:掌握如何从XML文档反向生成Java对象。 ...
WXML是针对Java开发者的实用工具,它利用DOM4J的强大功能,帮助开发者高效地处理XML数据,实现XML与Java对象之间的无缝转换。对于需要处理大量XML数据的项目,WXML无疑是一个值得考虑的解决方案。通过下载并研究提供...
Apache Digester是一个强大的Java库,用于在XML文档和Java对象之间建立映射关系,通过规则来自动解析XML并创建或更新对象结构。在digester3.2版本中,我们能够深入理解其内部工作机制,提升XML处理的效率和灵活性。 ...
2. **JAXB (Java Architecture for XML Binding)**: JAXB是Java中用于XML和Java对象之间的映射工具。它允许开发者将XML文档解析为Java对象,或者将Java对象转换为XML文档。在JAX-WS中,JAXB用于将Java方法的参数和...
JDK 6对XML处理进行了增强,包括StAX(Streaming API for XML)的集成,提供了更加低级别的、基于事件的XML解析,以及JAXB(Java Architecture for XML Binding)的改进,使得XML与Java对象之间的映射更加简便。...