`
wode66
  • 浏览: 744007 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JAXB--简单应用(一)

阅读更多

 

一、简介

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

 

2、JAXB中有什么:包含“xjc”工具和一个“schemagen”工具。 

“xjc”工具可以用来将XML模式或其他类型模式文件(Java 1.6试验性地支持RELAX NG,DTD以及WSDL)转换为Java类。Java类使用javax.xml.bind.annotation包下的Java 标注,例如@XmlRootElement和@XmlElement。XML列表序列表示为java.util.List类型的属性, 通过JAXBContext可以创建Marshallers(将Java对象转换成XML)和Unmarshallers(将XML解析为Java对象)。

另外的“schemagen”工具,能够执行“xjc”的反向操作,通过一组标注的Java类创建一个XML模式。 

 

二、依赖

JDK5以下开发需要的jar包:activation.jar、jaxb-api.jar、 jaxb-impl.jar、 jsr173-api.jar;

如果是基于JDK6以上版本已经集成JAXB2的JAR,在目录{JDK_HOME}/jre/lib/rt.jar中。

 

三、简单应用

 

  第一步:创建要转化的java对象,该对象需要使用相关注解注释各字段(标注在get方法上)。

package step1;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class Customer {
	String name;
	int age;
	int id;

	@XmlElement
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
	@XmlElement
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
	@XmlAttribute
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	
	@Override
	public String toString() {
		return "Customer [id=" + id + ",name=" + name + ",age=" + age + "]";
	}
}
 

 

第二步:编组(java对象转xml),提供多种编组目的地,以下只介绍两种,一种编组到文件,一种编组到控制台。

 

import java.io.File;
import java.util.HashSet;
import java.util.Set;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;

//Marshaller
public class Object2XmlDemo {
	public static void main(String[] args) {

		Customer customer = new Customer();
		customer.setId(100);
		customer.setName("suo");
		customer.setAge(29);
		
		Book book = new Book();
		book.setId("1");
		book.setName("哈里波特");
		book.setPrice(100);
		
		Book book2 = new Book();
		book2.setId("2");
		book2.setName("苹果");
		book2.setPrice(50);
		
		Set<Book> bookSet = new HashSet<Book>();
		bookSet.add(book);
		bookSet.add(book2);
		
		customer.setBook(bookSet);
		
		try {
			File file = new File("C:\\file1.xml");
			JAXBContext jaxbContext = JAXBContext.newInstance(Customer.class);
			Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
			// output pretty printed
			jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
			jaxbMarshaller.marshal(customer, file);
			jaxbMarshaller.marshal(customer, System.out);
		} catch (JAXBException e) {
			e.printStackTrace();
		}
	}
}
 

 

生成的xml:

 

 

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<customer id="100">
    <age>29</age>
    <name>mkyong</name>
</customer>
 

 

第三步:解组(xml转java对象),直接从文件解组xml成java对象。

 

 

import java.io.File;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;

//Unmarshaller
public class Xml2ObjectDemo {
	public static void main(String[] args) {
		try {
			File file = new File("C:\\file.xml");
			JAXBContext jaxbContext = JAXBContext.newInstance(Customer.class);
			Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
			Customer customer = (Customer) jaxbUnmarshaller.unmarshal(file);
			System.out.println(customer);
		} catch (JAXBException e) {
			e.printStackTrace();
		}
	}
}
 

注:以上代码在jdk1.6中运行正常,jdk1.5需要其它依赖包。

 

 

参考文档:

http://blog.csdn.net/ruzhefeng/article/details/6560449 JAXB2简介及特性使用总结

  http://www.ibm.com/developerworks/cn/xml/x-pracdb1.html 实用数据绑定: 涉入现实世界

  http://www.ibm.com/developerworks/cn/xml/x-pracdb3.html 实用数据绑定: 深入考察 JAXB,第 2 部分

 

  http://jaxb.java.net/guide/

  http://jaxb.java.net/tutorial/

 

分享到:
评论
4 楼 DaCang4535 2016-07-18  
楼主,不知道你那个book类有什么作用。setBook那个方法也没定义
3 楼 alanland 2013-04-29  
zhdycn 写道
LZ  最近用到 jaxb请教一个问题

xml to Object 上的问题

xml:  <param>
            <txt>3</txt>
      </param>
       <param>
            <txt>6</txt>
      </param>
他们在同一个xml中 没有ROOT元素是否可以映射。。这个我不明白怎么映射 。

这个只能算是xml片段,而不是合格的xml文件。
2 楼 zhdycn 2012-06-21  
LZ  最近用到 jaxb请教一个问题

xml to Object 上的问题

xml:  <param>
            <txt>3</txt>
      </param>
       <param>
            <txt>6</txt>
      </param>
他们在同一个xml中 没有ROOT元素是否可以映射。。这个我不明白怎么映射 。
1 楼 leeya 2012-05-04  
感谢楼主 很好的东西 新特性用注解的方式还不是很习惯 先玩玩。
想问下 jaxb能不依赖注解吗 而且jdk版本如果是 1.5或者更低的 该怎么处理。

相关推荐

    jaxb-api-2.1.jar 和 jaxb-impl-2.1.8.jar

    总的来说,`jaxb-api-2.1.jar` 和 `jaxb-impl-2.1.8.jar` 在Java开发中扮演着重要的角色,它们为XML数据处理提供了强大的工具,使得XML与Java对象之间的转换变得简单易行。然而,随着技术的发展,开发者也应关注新的...

    JAXB2 jaxb-api.jar jaxb-xjc.jar jaxb-impl.jar activation.jar

    JAXB2,全称为Java Architecture for XML Binding 2,是Java平台上的一个标准技术,用于在XML和Java对象之间进行绑定。它允许开发者通过简单的API将XML文档转换为Java对象,反之亦然,大大简化了XML数据处理。JAXB2...

    jaxb-api jaxb-impl jaxb-xjc jaxws-rt jar包

    Java Architecture for XML Binding (JAXB) 是Java平台标准的一部分,用于在Java对象和XML文档之间进行数据绑定。它使得开发者可以方便地将Java类转换为XML格式,反之亦然,无需编写大量的转换代码。JAXB提供了高效...

    jaxb-impl.jar包

    4. **数据持久化**:虽然不如ORM框架如Hibernate那么强大,但JAXB也能实现简单的XML数据持久化。 5. **XML文档生成**:生成符合特定格式的XML报告或者文档,如报表、日志等。 **最佳实践** 使用JAXB时,应注意...

    jaxb-ri-2.2.7

    **Java Architecture for XML Binding...总的来说,JAXB是一个强大的工具,它简化了Java应用程序与XML数据的交互,使得处理XML变得简单而高效。JAXB 2.2.7版本的发布,无疑为开发者提供了更稳定、更健壮的XML处理能力。

    JAXB-XML注解-应用

    以下是一个简单的 JAXB 应用示例: ```java @XmlRootElement public class Customer { private String name; private int age; private int id; @XmlElement public String getName() { return name; } ...

    jaxws-api-2.1_jaxb-api-2.1.jar

    标题"jaxws-api-2.1_jaxb-api-2.1.jar"中的"jaxws-api-2.1"指的是Java API for XML Web Services(JAX-WS)的2.1版本,这是一个Java平台上的标准,用于创建基于Web服务的应用程序。它简化了客户端和服务端之间的SOAP...

    jaxb jar包

    **Java Architecture for XML Binding (JAXB)** 是Java平台上的一个标准技术,用于在XML文档和Java对象之间进行数据转换。JAXB提供了一种方便、高效的方式,使得开发者能够轻松地在XML格式的数据和Java对象之间进行...

    gradle-xsd-wsdl-slurping:gradle-jaxb-plugin 和 gradle-wsdl-plugin 的 slurping 库

    gradle-xsd-wsdl-slurping库是Gradle构建生态系统中一个实用的工具,它为gradle-jaxb-plugin和gradle-wsdl-plugin提供了强大的支持,使得处理XML Schema和Web Service Description Language文件变得更加简单和高效。...

    JAXB2.0编组和解组实现

    Java Architecture for XML Binding (JAXB) 是Java平台中的一个标准,用于将XML文档与Java对象之间进行互换。它提供了编组(Marshalling)和解组(Unmarshalling)的功能,使得在Java应用程序中处理XML数据变得更为...

    用JAXB生成一个XML

    在现代软件开发过程中,XML(可扩展标记语言)作为一种重要的数据交换格式,被广泛应用于各种应用场景中。特别是在J2EE(Java Platform, Enterprise Edition)领域,对于XML文档的需求更是不可或缺。而JAXB(Java ...

    ws-spring-jaxb-introductions-demo:VA 的访问后总结

    【标题】"ws-spring-jaxb-introductions-demo:VA 的访问后总结"涉及到的是一个基于Spring框架的Web服务示例项目,其中可能包含了使用Java进行Web服务开发的相关技术。这个项目可能用来演示如何在Spring环境中集成和...

    JAXB-Example:一个一般的Java项目,显示JAXB封送处理和取消封送处理

    **JAXB(Java Architecture for XML Binding)**是Java平台上的一个标准API,它允许开发者将XML文档和Java对象之间进行绑定。这意味着XML数据可以被直接映射为Java对象,反之亦然,使得XML数据的处理变得更为简单。...

    JAXB 生成XML文件

    7. **示例应用**:在`shop`目录中可能包含了一个示例应用,该应用演示了如何使用JAXB生成XML文件。通常,这个示例可能会定义一些带有JAXB注解的Java类,然后创建`JAXBContext`实例,生成`Marshaller`,最后将Java...

    JAXB 利用xsd文件生成java类

    JAXB (Java Architecture for XML Binding) 是Java平台上的一个标准,用于将XML文档与Java对象之间进行绑定,实现XML数据的解析和序列化。在Java开发中,JAXB提供了一种方便的方式,允许开发者通过XML Schema (XSD) ...

    jaxb jar包,还需要jersey包

    Java Architecture for XML Binding (JAXB) 是一个Java标准,它提供了在Java对象和XML文档之间进行绑定的能力。这意味着你可以将Java对象转换为XML格式的数据,反之亦然。JAXB允许开发者在不直接处理XML语法的情况下...

    jaxb-example

    同时,JAXB也存在于Java EE环境中,使得在服务器端应用中处理XML数据变得简单。 教程通常包括逐步指南,演示如何创建基本的JAXB绑定,如何生成Java类,如何使用Unmarshaller和Marshaller,以及如何处理XML验证和...

    JAXB简易教程

    这个简易教程将引导我们了解如何使用JAXB进行XML到Java对象以及Java对象到XML的转换,这对于处理XML数据在Java应用中的序列化和反序列化非常有用。 **1. 前言** JAXB的主要目的是简化XML数据处理,让开发者能够...

Global site tag (gtag.js) - Google Analytics