当前位置: 首页 > 工具软件 > JAXB > 使用案例 >

JAXB学习笔记(一)

班经亘
2023-12-01

JAXB

1. 概述

  • JAXB(Java Architecture for XML Binding)是J2SE和J2EE平台的一部分,其功能就是让开发者快速的实现Java类和XML的相互映射关系

2. JAXB转换

  • Java对象转换为XML的过程称为Marshal
  • XML转换为Java对象的过程称之为UnMarshal

2.1 转换方式

  • XSD(XML Schema Definition)
    • JAXB的 xjc 工具定义 schema 通过 XSD(XML Schema Definition)文档生成 Java类的方式
  • Java Annotation
    • 注解JAXB通过分析Java类中的标记(annotation),将java类转换在相应的XML文档

3. 类与接口

  • JAXBContext 类
    • 应用的入口,用于管理XML/Java绑定信息
  • Marshaller 接口
    • 将Java对象序列化为XML数据
  • Unmarshaller
    • 将XMl数据反序列化为Java对象

4. 转换实例

4.1 Java对象转 XML

  • 创建 Java实体类

  • /**
     * @XmlRootElement
     *  该注解将 类 映射为 XML全局对象
     */
    @XmlRootElement
    public class Student {
    
        private String id;
        private String name;
        private Integer age;
    
        public Student() {
        }
    
        public Student(String id, String name, Integer age) {
            this.id = id;
            this.name = name;
            this.age = age;
        }
    
        public String getId() {
            return id;
        }
    
        public void setId(String id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public Integer getAge() {
            return age;
        }
    
        public void setAge(Integer age) {
            this.age = age;
        }
    
        @Override
        public String toString() {
            return "Student{" +
                    "id='" + id + '\'' +
                    ", name='" + name + '\'' +
                    ", age=" + age +
                    '}';
        }
    }
    
  • 测试类

  • public class TestJAXB {
    
        @Test
        public void test01() throws JAXBException {
    
            Student student = new Student("1", "hjx", 24);
    
            // 获取 JAXB 的上下文环境,要求传入具体的 Bean
            JAXBContext jaxbContext = JAXBContext.newInstance(Student.class);
            // 创建 Marshaller 实例,用于将 java类转换为 XML文档
            Marshaller marshaller = jaxbContext.createMarshaller();
    
            // 参数1:需要转换的Java类实例,
            // 参数2:输出位置,System.out 打印到控制台
            marshaller.marshal(student,System.out);
    
        }
    }
    
  • 运行结果

  • <?xml version="1.0" encoding="UTF-8" standalone="yes"?><student><age>24</age><id>1</id><name>hjx</name></student>
    
  • 注意事项

    • JAXB 转换对象必须属于JAXBElement类型,或者使用 @XmlRootElement注解
    • JAXB 转换对象必须拥有无参数构造器(默认存在,如果被覆盖,需要显示指定)

4.2 XML转 Java对象

  • 在resources文件夹下创建 test.xml

  • <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <student>
        <age>22</age>
        <id>2</id>
        <name>zs</name>
    </student>
    
  • 测试类

  • @Test
    public void test02() throws JAXBException {
    
        // 获取 JAXB 的上下文环境,要求传入具体的 Bean
        JAXBContext context = JAXBContext.newInstance(Student.class);
        // 创建 UnMarshaller 实例
        Unmarshaller unmarshaller = context.createUnmarshaller();
    
        // 加载需要转换的XML数据 -> 这里使用InputStream,还可以使用File,Reader等
        InputStream stream = Student.class.getClassLoader().getResourceAsStream("test.xml");
        // 将XML数据序列化 -> 该方法的返回值为Object基类,需要强转类型
        Student stu = (Student) unmarshaller.unmarshal(stream);
        // 将结果打印到控制台
        System.out.println(stu);
    }
    
  • 运行结果

  • Student{id='2', name='zs', age=22}
    
 类似资料: