JAXB--简单应用(一)
2015-12-15 15:04
281 查看
地址:http://suo.iteye.com/blog/1233458
一、简介
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方法上)。
Java代码
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),提供多种编组目的地,以下只介绍两种,一种编组到文件,一种编组到控制台。
Java代码
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代码
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<customer id="100">
<age>29</age>
<name>mkyong</name>
</customer>
第三步:解组(xml转java对象),直接从文件解组xml成java对象。
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/
一、简介
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方法上)。
Java代码
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),提供多种编组目的地,以下只介绍两种,一种编组到文件,一种编组到控制台。
Java代码
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代码
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<customer id="100">
<age>29</age>
<name>mkyong</name>
</customer>
第三步:解组(xml转java对象),直接从文件解组xml成java对象。
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/
相关文章推荐
- Java实现数据库和数据表的二级联动
- 118 session & cookie
- gem5: 在缓存代码中如何识别缓存是L1,L2还是L3呢?
- SQL Mirroring[Hot back up with Double machine]
- 图像添加柯西分布噪声
- PHP开启opcache方法
- CentOS下Redis数据库的基本安装与配置教程
- ClassNotFoundException:scala.PreDef$
- SELinux的启动和关闭
- wampserver解决“不能切换在线”及运行“404问题”
- 55分钟学会正则表达式
- #pragma预编译指令
- 深度剖析之 Material Design Android Library
- C++字符串切分(split)
- cobbler buildiso报错
- MyEclipse8.5 基于jax-ws的webservice对象(实体)传递的开发
- springAOP事物管理不生效原因总结
- RAM与ROM
- Comparing Two High-Performance I/O Design Patterns
- JavaScript 静态方法和实例方法