`
wode66
  • 浏览: 738333 次
  • 性别: 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或者更低的 该怎么处理。

相关推荐

    CamelJAXBExample:骆驼和 JAXB 的简单例子

    CamelJAXB示例 骆驼和 JAXB 的简单例子 此应用程序是在本地主机上运行 Apache Camel 并使用 Camel Routes 和 JAXB 数据格式的示例。 享受

    XFire开发Webservice应用

    提供了一个工作在Web Services下的简单API,支持POJO和schema开发. XFire支持 Web Services standards,Spring 整合, 支持JBI , 支持 JAXB ,XMLBeans,Java 5 和JAX-WS.并支持HTTP, JMS, XMPP, In-memory传输协议

    tutorial-soap-spring-boot-cxf:教程如何使用Spring Boot和Apache CXF创建,测试,部署,监视SOAP-Webservices

    向您展示如何设置一个简单的Spring Boot应用程序以及如何在嵌入式Tomcat中引导可运行的CXF-Framework。 从流行的汲取灵感,继承了一个完全更改的示例WebService-Definition作为WSDL 展示如何在构建时使用JAX-WS ...

    jaxme-0.3.jar.zip

    l JaxMe是JAXB(Java/XML绑定规范)的开源实现 l Java/XML绑定编译器的输入是模式描述:大多数是XML模式,也可以是DTD...l 总之,通过简单的创建模式,运行JaxMe绑定编译器,就能自动生成典型Web应用整个工作流程的类

    Spring3.x企业应用开发实战(完整版) part1

     《Spring3.x企业应用开发实战》是在《精通Spring2.x——企业应用开发详解》的基础上,经过历时一年的重大调整改版而成的,本书延续了上一版本追求深度,注重原理,不停留在技术表面的写作风格,力求使读者在熟练...

    Spring.3.x企业应用开发实战(完整版).part2

     《Spring3.x企业应用开发实战》是在《精通Spring2.x——企业应用开发详解》的基础上,经过历时一年的重大调整改版而成的,本书延续了上一版本追求深度,注重原理,不停留在技术表面的写作风格,力求使读者在熟练...

    spring-ws-samples

    显示简单的Echo服务的简单示例 显示如何使用MTOM和JAXB2编组 显示如何使用WS-Addressing和Java 6 HTTP Server -包含Spring-WS教程中的代码 -显示如何连接到公共SOAP服务 运行服务器 可以从server文件夹中使用以下...

    Java_EE_6规范中文版

    3.1 简介 3.2 一个简单的例子 3.3 安全体系结构 3.4 用户验证的必要条件 3.5 授权条件 3.6 部署标准 3.7 未来的方向 第4章 事务管理 4.1 概述 4.2 标准 4.3 事务的互用性 4.4 本地事务优化 4.5连接共享 4.6...

    splitanalyzer:一个简单的GWT,可用于使用javascript在浏览器中分析定向越野的定向时间。 支持iof xml和自己的格式

    该应用程序吃掉了由我的“ iofdomain”项目(与相关的服务器端管理应用程序共享)生成的IOF-XML文件或jaxb xml文件。 从那时起,它获得了支持,也可以分析其他时空文件,例如跨域托管,甚至可以作为书签。 面向非...

    ServerManager

    这是一个简单的应用程序,演示了各种 Java 技术的使用,例如: Java 1.6+ 春天 4 MavenHibernate日志4j H2 数据库(内存和文件中) 推土机jUnit 莫基托xercesImpl(xml处理) JAXB 它也是按照清洁代码原则编写的,...

    jersey-client-demo:泽西岛客户端演示

    泽西岛客户端演示这个简单的应用程序允许您从服务器以各种格式(例如 JSON 和 XML)获取响应,并将其反序列化为带有 JAXB 注释的 DTO 对象。

    eclair:Java Spring库用于声明式日志记录

    包括用于批注处理的抽象,简单的实现以及具有自动配置的Spring Boot启动程序。 特征 Spring AOP检测到的事件日志记录:方法执行的开始,结束或紧急结束 灵活的过滤可记录的可类型 基于启用的日志级别的可配置详细...

    从Java走向Java+EE+.rar

    21.2 实例——利用AXIS开发一个简单的Web Service 310 21.3 小结 314 第22章 Java EE的安全 315 22.1 利用JAAS进行验证和授权 315 22.2 利用JSSE进行安全传输 317 22.3 小结 317 第23章 Java EE的测试 ...

    bookman:简单的JavaFX图书管理器

    只是一个小玩具应用程序,可以对JavaFX进行一些试验。 以xml文件作为持久性的图书收藏管理。 跑步 mv books_sample.xml books.xml mvn package java -jar target/bookman.jar 笔记 App使用根文件夹中的books.xml...

Global site tag (gtag.js) - Google Analytics