JAXB: JAVA Bean 和 XMl互转

1.         什么是JAXB
    Java  Architecture for XML Binding (JAXB)是一个业界的标准,是一项可以根据XML Schema产生Java类的技术。该过程中,JAXB也提供了将XML实例文档反向生成Java对象树的方法,并能将Java对象树的内容重新写到XML实例文档。从另一方面来讲,JAXB提供了快速而简便的方法将XML模式绑定到Java表示,从而使得Java开发者在Java应用程序中能方便地结合XML数据和处理函数。
    这意味着你不需要处理甚至不需要知道XML编程技巧就能在Java应用程序中利用平台核心XML数据的灵活性。而且,可以充分利用XML的优势而不用依赖于复杂的XML处理模型如SAXDOMJAXB隐藏了细节并且取消了SAXDOM中没用的关系——生成的JAXB类仅描述原始模型中定义的关系。其结果是结合了高度可移植Java代码和高度可移植的XML数据。其中这些代码可用来创建灵活、轻便的应用程序和Web服务。

2.         JAXB的体系结构
JAXB学习 - mengshj - 可可的梦幻世界

JAXB的体系结构和应用过程如图所示,一般来说包含以下几个步骤:

1)        根据你的应用程序所要操作的XML数据格式,撰写相应的XML Schema,有关XML Schema的知识,请参阅“参考资料

2)        使用JAXB所带的编译工具(Binding Compiler),将这个XML Schema文件作为输入,产生一系列相关的Java ClassInterface

3)        在使用JAXB编译工具的时候,可以有选择性的提供一个配置文件(图的虚线部分),来控制JAXB编译工具的一些高级属性。

4)        这些Java ClassInterface是你的应用程序操纵XML数据的主要接口和方法。

5)        通过JAXBXML文档进行的操作主要包括:将符合XML Schema规定的XML文档解析生成一组相应的Java对象;对这些对象进行操作(修改、增加和删除对象的属性等等);然后将这些对象的内容保存到这个XML文档中。

 

 

 

package com.test;

import javax.xml.bind.annotation.XmlAttribute;  
import javax.xml.bind.annotation.XmlElement;  
  
public class User {  
    private int id;  
    private String name;  
   
    @XmlAttribute (name = "id")  
    public int getId() {  
        return id;  
    }  
   
    public void setId(int id) {  
        this.id = id;  
    }  
   
    @XmlElement(name = "name")  
    public String getName() {  
        return name;  
    }  
   
    public void setName(String name) {  
        this.name = name;  
    }  
   
    public String toString() {  
        return id + ":" + name;  
    }  
}  


 

package com.test;

  
import java.util.ArrayList;
import java.util.List;  
  
import javax.xml.bind.annotation.XmlElement;  
import javax.xml.bind.annotation.XmlRootElement;  
  
@XmlRootElement(name = "users")  
public class UserList {
	
    List<User> users = new ArrayList<User>();  
   
    @XmlElement(name = "user")  
    public List<User> getUsers() {  
        return users;  
    }  
   
    public void setUsers(List<User> users) {  
        this.users = users;  
    }  
}  


 

package com.test;

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.ArrayList;

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


public class UserGenerateClient {
	public static void main(String[] args) {
		
		try {
			JAXBContext jc = JAXBContext.newInstance(UserList.class);
			Marshaller m = jc.createMarshaller();
			OutputStream os = new FileOutputStream(new File("user2.xml"));
			UserList list = new UserList();
			
			User user = new User();
			user.setId(100);
			user.setName("Shawn");
			list.getUsers().add(user);
			
			
			user = new User();
			user.setId(200);
			user.setName("Jason");
			list.getUsers().add(user);
			
			m.marshal(list, os);
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}
	
	
}


 

package com.test;

import java.net.URL;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.Unmarshaller;

public class UserReadClient {
	public static void main(String[] args) throws Exception {
		JAXBContext context = JAXBContext.newInstance(UserList.class);
		Unmarshaller unmarshaller = context.createUnmarshaller();  
		URL xmlFileUrl = UserReadClient.class.getResource("user2.xml");
		UserList userList = (UserList) unmarshaller.unmarshal(xmlFileUrl);
		for (User m: userList.getUsers()){
			System.out.println(m.getName());
			System.out.println(m.getId());
		}

	}
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值