- 浏览: 12540 次
- 性别:
- 来自: 上海
最新评论
在java开发中使用XML几乎是每个程序员都会碰到的,目前可供我们选择的库也有很多,包括,dom4j, jaxen, SAX等等,本文将介绍如何使用JAXB进行Object-XML mapping.
JAXB目前已经集成到了JDK6中,但是还是推荐下载使用最新版的jaxb库, https://jaxb.dev.java.net/
从JAXB2.0开始,可以通过使用annotation进行Object-XMl mapping。
本文将通过以下步骤演示如何使用JAXB annotation绑定使用了namespace的XML文件
1. 创建employees.xml文件
2. 创建Employees.java和Employee.java绑定employees.xml
3. 创建package-info.java和jaxb.index文件
4. 创建XMLParser.java封装marshal/unmarshal操作
5. 创建Test.java运行测试
现在将逐步展开演示
1. 创建employees.xml文件
现在将逐步展开演示
1. 创建employees.xml文件
Xml代码
1.<?xml version="1.0" encoding="utf-8" ?>
2.<employees xmlns:admin="http://www.company.com/management/employees/admin">
3. <admin:employee>
4. <admin:userId>johnsmith@company.com</admin:userId>
5. <admin:password>abc123_</admin:password>
6. <admin:name>John Smith</admin:name>
7. <admin:age>24</admin:age>
8. <admin:gender>Male</admin:gender>
9. </admin:employee>
10. <admin:employee>
11. <admin:userId>christinechen@company.com</admin:userId>
12. <admin:password>123456</admin:password>
13. <admin:name>Christine Chen</admin:name>
14. <admin:age>27</admin:age>
15. <admin:gender>Female</admin:gender>
16. </admin:employee>
17.</employees>
<?xml version="1.0" encoding="utf-8" ?>
<employees xmlns:admin="http://www.company.com/management/employees/admin">
<admin:employee>
<admin:userId>johnsmith@company.com</admin:userId>
<admin:password>abc123_</admin:password>
<admin:name>John Smith</admin:name>
<admin:age>24</admin:age>
<admin:gender>Male</admin:gender>
</admin:employee>
<admin:employee>
<admin:userId>christinechen@company.com</admin:userId>
<admin:password>123456</admin:password>
<admin:name>Christine Chen</admin:name>
<admin:age>27</admin:age>
<admin:gender>Female</admin:gender>
</admin:employee>
</employees> 这是一个很普通的xml文件,用于展示组织内部的成员(employee)状况,这里有一点需要注意的是使用了namespace,这也是本文将要演示的重点。
2.
5. 创建Test.java运行测试
6. 运行结果:
JAXB目前已经集成到了JDK6中,但是还是推荐下载使用最新版的jaxb库, https://jaxb.dev.java.net/
从JAXB2.0开始,可以通过使用annotation进行Object-XMl mapping。
本文将通过以下步骤演示如何使用JAXB annotation绑定使用了namespace的XML文件
1. 创建employees.xml文件
2. 创建Employees.java和Employee.java绑定employees.xml
3. 创建package-info.java和jaxb.index文件
4. 创建XMLParser.java封装marshal/unmarshal操作
5. 创建Test.java运行测试
现在将逐步展开演示
1. 创建employees.xml文件
现在将逐步展开演示
1. 创建employees.xml文件
Xml代码
1.<?xml version="1.0" encoding="utf-8" ?>
2.<employees xmlns:admin="http://www.company.com/management/employees/admin">
3. <admin:employee>
4. <admin:userId>johnsmith@company.com</admin:userId>
5. <admin:password>abc123_</admin:password>
6. <admin:name>John Smith</admin:name>
7. <admin:age>24</admin:age>
8. <admin:gender>Male</admin:gender>
9. </admin:employee>
10. <admin:employee>
11. <admin:userId>christinechen@company.com</admin:userId>
12. <admin:password>123456</admin:password>
13. <admin:name>Christine Chen</admin:name>
14. <admin:age>27</admin:age>
15. <admin:gender>Female</admin:gender>
16. </admin:employee>
17.</employees>
<?xml version="1.0" encoding="utf-8" ?>
<employees xmlns:admin="http://www.company.com/management/employees/admin">
<admin:employee>
<admin:userId>johnsmith@company.com</admin:userId>
<admin:password>abc123_</admin:password>
<admin:name>John Smith</admin:name>
<admin:age>24</admin:age>
<admin:gender>Male</admin:gender>
</admin:employee>
<admin:employee>
<admin:userId>christinechen@company.com</admin:userId>
<admin:password>123456</admin:password>
<admin:name>Christine Chen</admin:name>
<admin:age>27</admin:age>
<admin:gender>Female</admin:gender>
</admin:employee>
</employees> 这是一个很普通的xml文件,用于展示组织内部的成员(employee)状况,这里有一点需要注意的是使用了namespace,这也是本文将要演示的重点。
2.
创建Employees.java和Employee.java绑定employees.xml Java代码 1.package com.javaeye.terrencexu.jaxb; 2. 3.import java.util.ArrayList; 4.import java.util.List; 5. 6.import javax.xml.bind.annotation.XmlElement; 7.import javax.xml.bind.annotation.XmlRootElement; 8. 9.@XmlRootElement(name = "employees") 10.public class Employees { 11. 12. @XmlElement(name = "employee", namespace=NameSpace.ADMIN_URI) 13. private List<Employee> employees; 14. 15. public Employees() { 16. employees = new ArrayList<Employee>(); 17. } 18. 19. public List<Employee> getEmployees() { 20. return employees; 21. } 22. 23. public void addEmployee(Employee employee) { 24. employees.add(employee); 25. } 26. 27.} package com.javaeye.terrencexu.jaxb; import java.util.ArrayList; import java.util.List; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement(name = "employees") public class Employees { @XmlElement(name = "employee", namespace=NameSpace.ADMIN_URI) private List<Employee> employees; public Employees() { employees = new ArrayList<Employee>(); } public List<Employee> getEmployees() { return employees; } public void addEmployee(Employee employee) { employees.add(employee); } } Java代码 1.package com.javaeye.terrencexu.jaxb; 2. 3.import javax.xml.bind.annotation.XmlElement; 4. 5.public class Employee { 6. 7. @XmlElement(name = "userId", namespace=NameSpace.ADMIN_URI) 8. private String userId; 9. 10. @XmlElement(name = "password", namespace=NameSpace.ADMIN_URI) 11. private String password; 12. 13. @XmlElement(name = "name", namespace=NameSpace.ADMIN_URI) 14. private String name; 15. 16. @XmlElement(name = "age", namespace=NameSpace.ADMIN_URI) 17. private int age; 18. 19. @XmlElement(name = "gender", namespace=NameSpace.ADMIN_URI) 20. private String gender; 21. 22. public Employee() { 23. } 24. 25. public Employee(String userId, String psw, String name, int age, Gender gender) { 26. this.userId = userId; 27. this.password = psw; 28. this.name = name; 29. this.age = age; 30. this.gender = gender.getValue(); 31. } 32. 33. public String getUserId() { 34. return userId; 35. } 36. 37. public String getPassword() { 38. return password; 39. } 40. 41. public String getName() { 42. return name; 43. } 44. 45. public int getAge() { 46. return age; 47. } 48. 49. public String getGender() { 50. return gender; 51. } 52. 53.} package com.javaeye.terrencexu.jaxb; import javax.xml.bind.annotation.XmlElement; public class Employee { @XmlElement(name = "userId", namespace=NameSpace.ADMIN_URI) private String userId; @XmlElement(name = "password", namespace=NameSpace.ADMIN_URI) private String password; @XmlElement(name = "name", namespace=NameSpace.ADMIN_URI) private String name; @XmlElement(name = "age", namespace=NameSpace.ADMIN_URI) private int age; @XmlElement(name = "gender", namespace=NameSpace.ADMIN_URI) private String gender; public Employee() { } public Employee(String userId, String psw, String name, int age, Gender gender) { this.userId = userId; this.password = psw; this.name = name; this.age = age; this.gender = gender.getValue(); } public String getUserId() { return userId; } public String getPassword() { return password; } public String getName() { return name; } public int getAge() { return age; } public String getGender() { return gender; } } Java代码 1.package com.javaeye.terrencexu.jaxb; 2. 3.public class NameSpace { 4. 5. public static final String ADMIN_PREFIX = "admin"; 6. public static final String ADMIN_URI = "http://www.company.com/management/employees/admin"; 7. 8.} package com.javaeye.terrencexu.jaxb; public class NameSpace { public static final String ADMIN_PREFIX = "admin"; public static final String ADMIN_URI = "http://www.company.com/management/employees/admin"; } Java代码 1.package com.javaeye.terrencexu.jaxb; 2. 3.public enum Gender { 4. 5. MALE("Male"), 6. FEMALE("Female"); 7. 8. private String value; 9. 10. private Gender(String value) { 11. this.value = value; 12. } 13. 14. public String getValue() { 15. return this.value; 16. } 17. 18.} package com.javaeye.terrencexu.jaxb; public enum Gender { MALE("Male"), FEMALE("Female"); private String value; private Gender(String value) { this.value = value; } public String getValue() { return this.value; } } 3. 创建package-info.java和jaxb.index文件 创建package-info.java注册xmlns, 将该文件放在当前source code的package下面,如果不使用namespace可以不创建该文件 Java代码 1.@XmlSchema( 2.xmlns={ 3. @XmlNs(prefix=NameSpace.ADMIN_PREFIX, namespaceURI=NameSpace.ADMIN_URI) 4.} 5.) 6.package com.javaeye.terrencexu.jaxb; 7.import javax.xml.bind.annotation.XmlNs; 8.import javax.xml.bind.annotation.XmlSchema; @XmlSchema( xmlns={ @XmlNs(prefix=NameSpace.ADMIN_PREFIX, namespaceURI=NameSpace.ADMIN_URI) } ) package com.javaeye.terrencexu.jaxb; import javax.xml.bind.annotation.XmlNs; import javax.xml.bind.annotation.XmlSchema; 创建jaxb.index注册Employees, Employee,如果不使用包级context,可以不创建该文件 Java代码 1.Employees 2.Employee Employees Employee 4. 创建XMLParser.java封装marshal/unmarshal操作 Java代码 1.package com.javaeye.terrencexu.jaxb; 2. 3.import java.io.InputStream; 4.import java.io.StringWriter; 5. 6.import javax.xml.bind.JAXBContext; 7.import javax.xml.bind.JAXBException; 8.import javax.xml.bind.Marshaller; 9.import javax.xml.bind.Unmarshaller; 10. 11.public final class XMLParser { 12. 13. private XMLParser() {} 14. 15. public static Object unmarshal(InputStream xml, Class<?> clazz) { 16. Object obj = null; 17. 18. try { 19. JAXBContext jc = JAXBContext.newInstance(clazz.getPackage().getName()); 20. Unmarshaller u = jc.createUnmarshaller(); 21. obj = u.unmarshal(xml); 22. } catch (JAXBException e) { 23. throw new RuntimeException("Can't unmarshal the XML file, error message: " + e.getMessage()); 24. } 25. 26. return obj; 27. } 28. 29. public static String marshal(Object obj, Class<?> clazz) { 30. String result = null; 31. 32. try { 33. JAXBContext jc = JAXBContext.newInstance(clazz.getPackage().getName()); 34. Marshaller m = jc.createMarshaller(); 35. 36. StringWriter writer = new StringWriter(); 37. 38. m.marshal(obj, writer); 39. 40. result = writer.toString(); 41. } catch (JAXBException e) { 42. throw new RuntimeException("Can't marshal the XML file, error message: " + e.getMessage()); 43. } 44. 45. 46. return result; 47. } 48. 49.} package com.javaeye.terrencexu.jaxb; import java.io.InputStream; import java.io.StringWriter; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; import javax.xml.bind.Unmarshaller; public final class XMLParser { private XMLParser() {} public static Object unmarshal(InputStream xml, Class<?> clazz) { Object obj = null; try { JAXBContext jc = JAXBContext.newInstance(clazz.getPackage().getName()); Unmarshaller u = jc.createUnmarshaller(); obj = u.unmarshal(xml); } catch (JAXBException e) { throw new RuntimeException("Can't unmarshal the XML file, error message: " + e.getMessage()); } return obj; } public static String marshal(Object obj, Class<?> clazz) { String result = null; try { JAXBContext jc = JAXBContext.newInstance(clazz.getPackage().getName()); Marshaller m = jc.createMarshaller(); StringWriter writer = new StringWriter(); m.marshal(obj, writer); result = writer.toString(); } catch (JAXBException e) { throw new RuntimeException("Can't marshal the XML file, error message: " + e.getMessage()); } return result; } }
5. 创建Test.java运行测试
Java代码 1.package com.javaeye.terrencexu.jaxb; 2. 3.import java.io.File; 4.import java.io.FileInputStream; 5.import java.io.FileNotFoundException; 6.import java.util.List; 7. 8.public class Test { 9. 10. public static void main(String[] args) throws FileNotFoundException { 11. testUnmarshal(); 12. testMarshal(); 13. } 14. 15. public static void testUnmarshal() throws FileNotFoundException { 16. Employees employees = (Employees) XMLParser.unmarshal( 17. new FileInputStream(new File("F:\\workspace\\JavaStudy\\test\\employees.xml")), 18. Employees.class); 19. 20. List<Employee> employeeList = employees.getEmployees(); 21. 22. if (employeeList != null && employeeList.size() > 0) { 23. for (Employee employee : employeeList) { 24. StringBuilder builder = new StringBuilder(); 25. builder.append("[UserID: ").append(employee.getUserId()).append(", ") 26. .append("Password: ").append(employee.getPassword()).append(", ") 27. .append("Name: ").append(employee.getName()).append(", ") 28. .append("Age: ").append(employee.getAge()).append(", ") 29. .append("Gender").append(employee.getGender()).append("]"); 30. 31. System.out.println(builder.toString()); 32. } 33. } 34. } 35. 36. public static void testMarshal() { 37. Employees employees = new Employees(); 38. employees.addEmployee(new Employee("johnsmith@company.com", "abc123_", "John Smith", 24, Gender.MALE)); 39. employees.addEmployee(new Employee("christinechen@company.com", "123456", "Christine Chen", 27, Gender.FEMALE)); 40. 41. String result = XMLParser.marshal(employees, Employees.class); 42. System.out.println(result); 43. } 44.} package com.javaeye.terrencexu.jaxb; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.util.List; public class Test { public static void main(String[] args) throws FileNotFoundException { testUnmarshal(); testMarshal(); } public static void testUnmarshal() throws FileNotFoundException { Employees employees = (Employees) XMLParser.unmarshal( new FileInputStream(new File("F:\\workspace\\JavaStudy\\test\\employees.xml")), Employees.class); List<Employee> employeeList = employees.getEmployees(); if (employeeList != null && employeeList.size() > 0) { for (Employee employee : employeeList) { StringBuilder builder = new StringBuilder(); builder.append("[UserID: ").append(employee.getUserId()).append(", ") .append("Password: ").append(employee.getPassword()).append(", ") .append("Name: ").append(employee.getName()).append(", ") .append("Age: ").append(employee.getAge()).append(", ") .append("Gender").append(employee.getGender()).append("]"); System.out.println(builder.toString()); } } } public static void testMarshal() { Employees employees = new Employees(); employees.addEmployee(new Employee("johnsmith@company.com", "abc123_", "John Smith", 24, Gender.MALE)); employees.addEmployee(new Employee("christinechen@company.com", "123456", "Christine Chen", 27, Gender.FEMALE)); String result = XMLParser.marshal(employees, Employees.class); System.out.println(result); } }
6. 运行结果:
Java代码 1.[UserID: johnsmith@company.com, Password: abc123_, Name: John Smith, Age: 24, GenderMale] 2.[UserID: christinechen@company.com, Password: 123456, Name: Christine Chen, Age: 27, GenderFemale] 3.<?xml version="1.0" encoding="UTF-8" standalone="yes"?><employees xmlns:admin="http://www.company.com/management/employees/admin"><admin:employee><admin:userId>johnsmith@company.com</admin:userId><admin:password>abc123_</admin:password><admin:name>John Smith</admin:name><admin:age>24</admin:age><admin:gender>Male</admin:gender></admin:employee><admin:employee><admin:userId>christinechen@company.com</admin:userId><admin:password>123456</admin:password><admin:name>Christine Chen</admin:name><admin:age>27</admin:age><admin:gender>Female</admin:gender></admin:employee></employees>
相关推荐
JAXB:用于 XML 绑定的 Java 架构 关于 这演示了如何使用 JRuby 来控制 JAXB 类。 它的灵感来自 Jason Gilman 此示例代码侧重于构建和编组以及 XML 文档 JAXB JAXB 是源自 Java Architecture for XML Binding 的首...
为了提高性能,可以使用以下方法优化JAXB: - 使用`Unmarshaller.unmarshal(Source, Class)`方法直接从XML源解析到特定类型的Java对象,避免创建额外的DOM树。 - 配置`Marshaller`以禁用不需要的特性,如实体引用...
1. **绑定(Binding)**:JAXB通过绑定文件(一般为.xjb或绑定注解)将XML Schema(XSD)或者Java类与Java类结构关联起来。这个过程创建了一个Java类模型,其中每个XML元素和属性都对应Java类的字段或方法。 2. **...
如果不希望手动添加注解,可以使用JAXB的绑定工具(如`xjc`)从XML Schema (XSD)文件生成对应的Java类。这一步骤将创建带有正确注解的Java类,以便JAXB理解XML结构。 (3) **实例化Java对象** 创建Java对象并填充...
**使用JAXB根据XSD生成XML文档** ...这个过程包括创建XSD文件、生成Java类、配置JAXB绑定、创建和填充Java对象,最后使用`Marshaller`生成XML文档。了解并熟练掌握这一流程,能够极大地提高XML处理的效率和准确性。
2. 使用 JAXB 的 XJC 工具,通过定义 schema 的方式实现 Java 对象与 XML 的绑定。 ### 3.2 JAXB Annotation 使用说明 #### 3.2.1 @XmlType @XmlType 定义映射的一些规则,用在 class 类的注解,常与 @...
XML3D JAXB绑定是将Java对象与XML3D文档结构进行映射的一种技术,它允许开发者使用Java的JAXB框架来处理XML3D数据。XML3D是一种在Web上实现3D图形的开放标准,它提供了HTML5兼容的语法来描述3D场景,使得网页开发者...
1. **Java类与XML Schema绑定**: JAXB使用`@XmlRootElement`和`@XmlElement`等注解将Java类的字段与XML元素对应。XML Schema定义了XML文档的结构,通过`xsdschema`文件,JAXB可以自动生成符合Schema的Java类。 2. *...
JAXB则是一种对象到XML和XML到对象的绑定框架,它可以将Java对象转换为XML,并将XML数据转换回相应的Java对象。JAXB的优势在于其自动化程度高,只需通过注解或配置文件,就能轻松地映射XML结构到Java对象。 结合...
- `jaxb-api`: 提供了Java XML绑定(JAXB)API,用于将XML文档与Java对象互相转换。 - `jaxb-core`和`jaxb-impl`: 这两个是JAXB的具体实现,与`jaxb-api`配合使用。 - `jakarta.xml.ws-api`:Jakarta XML Web ...
`mvc:annotation-driven`是一个Spring MVC的XML配置元素,它简化了对注解驱动的控制器的支持。通过使用这个元素,我们可以启用Spring MVC自动扫描并处理带有`@Controller`注解的类,以及类中的`@RequestMapping`、`@...
JAXB提供了将Java对象树的内容重新写到XML实例文档的方法,使用SAX对XML文件进行解析,封装了从XML文件中读取信息,并保存到Java对象树。 在Android 6.0版本下,应用JAXB jar包根据XML Schema解析XML文件。由于...
使用JAXB解析XML时,我们首先需要创建一个Java类模型,这个模型反映了XML文档的结构。每个XML元素对应一个Java类,类的属性对应元素的属性或子元素。例如,如果XML中有以下结构: ```xml <text>Some text here ...
在给定的例子中,我们将深入理解如何使用JAXB注解来生成XML。 1. **@XmlType**: 这个注解用于定义类的属性在XML输出中的顺序。在`WriterXml`类中,propOrder 属性指定了"id", "name", "age", "book"这四个属性的...
标题“用jaxb自动生成xsd对像”指的是利用JAXB的XJC(XSD到Java绑定编译器)工具,从XML Schema文件生成对应的Java类。这使得你可以直接操作Java对象,而无需直接处理XML的细节。 描述中的“简单易用”意味着通过...
JAXB(Java Architecture for XML Binding)是Sun Microsystems(现已被Oracle收购)推出的一种Java XML绑定框架。它是Java EE标准的一部分,提供了一种机制来将Java对象与XML文档相互转换。使用JAXB,可以通过简单...
Java Architecture for XML Binding (JAXB) 是Java平台上的一个标准技术,用于在XML文档和Java对象之间进行数据绑定。它允许开发者将XML Schema定义的数据结构直接映射到Java类,从而方便地在XML和Java对象之间进行...
在Java世界中,使用JAXB(Java Architecture for XML Binding)库可以方便地实现XML数据与Java对象之间的转换,从而在WebService中轻松处理数据交换。本篇文章将深入探讨如何使用JAXB进行XML到Object以及Object到XML...
而JAXB(Java Architecture for XML Binding)是Java平台的标准,用于将XML数据与Java对象之间进行绑定,使得开发者可以方便地在XML文档和Java对象之间转换。在处理CXF与JAXB的集成时,有时会遇到版本冲突的问题,...
Java Architecture for XML Binding (JAXB) 是Java平台中用于处理XML和Java对象之间转换的一个标准技术。它允许我们将XML文档转换为Java对象,反之亦然,使得数据交换变得更加简单。在Java开发中,JAXB是处理XML数据...