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处理模型如SAX或DOM。JAXB隐藏了细节并且取消了SAX和DOM中没用的关系——生成的JAXB类仅描述原始模型中定义的关系。其结果是结合了高度可移植Java代码和高度可移植的XML数据。其中这些代码可用来创建灵活、轻便的应用程序和Web服务。

2. JAXB的体系结构

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

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

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

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

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

5) 通过JAXB对XML文档进行的操作主要包括:将符合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());}}}

走自己的路,让别人说去吧

JAXB: JAVA Bean 和 XMl互转

相关文章:

你感兴趣的文章:

标签云: