zoukankan      html  css  js  c++  java
  • JABX简单介绍

    主要引至http://suo.iteye.com/blog/1233458

    一、简介

    1、概念是什么:(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术。是一种xml与object映射绑定技术标准,既然是标准就可以有不同实现.
    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中。

    三、标注相关
    注意:

    1、注解可在属性定义上,也可在getter()方法上,最好在方法上注解,修饰属性用private,方法是public,属性注解可能会出现问题(如:JAXB “Class has two properties of the same name”)。

    2、对象中的属性可以不全部映射到xml中,xml中出现的元素也不一定与映射的实体一一对应,映射的双方可以灵活对应

    3、类上注解后,类中元素也默认按默认名称映射,但是对象属性名称与xml节点元素名称不一致时或者不需要显示在xml节点中时,则必须做对应的映射配置。

    4、注解实例:映射一般分分:类名与xml根节点的映射、普通属性与xml节点的映射、集合与xml中包含子元素的节点的映射。


    示例代码:
    step1:

    Customer.java

     1package step1;
     2import javax.xml.bind.annotation.XmlAttribute;
     3import javax.xml.bind.annotation.XmlElement;
     4import javax.xml.bind.annotation.XmlRootElement;
     5
     6/*@XmlRootElement 注释可以与以下程序元素一起使用: 
     7顶层类 
     8枚举类型 
     9当使用 @XmlRootElement 注释对顶层类或枚举类型进行注释时,
    10类型值被表示为 XML 文档中的 XML 元素。
    11*/

    12@XmlRootElement
    13public class Customer {
    14    String name;
    15    int age;
    16    int id;
    17
    18    @XmlElement  //该注释用于将JavaBean 属性映射到派生于属性名称的 XML 元素
    19    public String getName() {
    20        return name;
    21    }

    22    public void setName(String name) {
    23        this.name = name;
    24    }

    25    
    26    @XmlElement
    27    public int getAge() {
    28        return age;
    29    }

    30    public void setAge(int age) {
    31        this.age = age;
    32    }

    33    
    34    @XmlAttribute  //将JavaBean 属性映射到 XML 属性。
    35    public int getId() {
    36        return id;
    37    }

    38    public void setId(int id) {
    39        this.id = id;
    40    }

    41    
    42    @Override
    43    public String toString() {
    44        return "Customer [id=" + id + ",name=" + name + ",age=" + age + "]";
    45    }

    46
    47    
    48    
    49}

    50


    Object2XmlDemo.java

     1package step1;
     2
     3import java.io.File;
     4import javax.xml.bind.JAXBContext;
     5import javax.xml.bind.JAXBException;
     6import javax.xml.bind.Marshaller;
     7
     8/**
     9 *编组 Marshal(java 2 xml)
    10 */

    11public class Object2XmlDemo {
    12    public static void main(String[] args) {
    13
    14        Customer customer = new Customer();
    15        customer.setId(100);
    16        customer.setName("mkyong");
    17        customer.setAge(29);
    18        try {
    19            File file = new File("H:\file3.xml");
    20            //获得JAXBContext类的新实例
    21            JAXBContext jaxbContext = JAXBContext.newInstance(Customer.class); 
    22            //创建一个可以用来将 java 内容树转换为 XML 数据的 Marshaller 对象。
    23            //(Marshaller 类负责管理将 Java 内容树序列化回 XML 数据的过程)
    24            Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
    25            // output pretty printed
    26            jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); //设置XML自动换行
    27            jaxbMarshaller.marshal(customer, file);//将以customer为根的内容树 编组到输出流中
    28            jaxbMarshaller.marshal(customer, System.out);
    29        }
      catch (JAXBException e) {
    30            e.printStackTrace();
    31        }

    32    }

    33}

    34

    执行后生成对应的xml文件
    后台打印

    1<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    2<customer id="100">
    3    <age>29</age>
    4    <name>mkyong</name>
    5</customer>
    6


    Xml2ObjectDemo.java

    1package step1;
    2
    3import java.io.File;
    4import javax.xml.bind.JAXBContext;
    5import javax.xml.bind.JAXBException;
    6import javax.xml.bind.Unmarshaller;
    7
    8/**
    9 *解组 Unmarshaller(xml 2 java)
    10 */

    11publicclass Xml2ObjectDemo {
    12 publicstaticvoid main(String[] args) {
    13 try{
    14 File file =new File("H:\file.xml");
    15 JAXBContext jaxbContext = JAXBContext.newInstance(Customer.class);
    16 //创建一个可以用来将 XML 数据转换为 java 内容树的 Unmarshaller 对象。
    17 Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
    18 //从指定的文件解组 XML 数据并返回得到的内容树。
    19 Customer customer = (Customer) jaxbUnmarshaller.unmarshal(file);
    20 System.out.println(customer);
    21 }
    catch (JAXBException e) {
    22 e.printStackTrace();
    23 }

    24 }

    25}

    26


    执行后,打印
    Customer [id=100,name=mkyong,age=29]

    其他应用可结合API及其他范例学习.

  • 相关阅读:
    常用 Git 命令
    Flex布局
    React-Redux系列4:增加listData列表数据
    React-Redux系列3:修改Store state的值
    React-Redux系列2:Provider提供器和Connect连接器
    React-Redux系列1:简介和安装
    Redux中间件redux-saga中间件之安装、配置、使用
    Redux中间件redux-thunk中间件之安装、配置、使用
    Redux优化之JS纯函数(Pure Function)
    浅谈JS纯函数
  • 原文地址:https://www.cnblogs.com/redcoatjk/p/3562354.html
Copyright © 2011-2022 走看看