zoukankan      html  css  js  c++  java
  • jaxb

    一、简介

        JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术。该过程中,JAXB也提供了将XML实例文档反向生成Java对象树的方法,并能将Java对象树的内容重新写到XML实例文档。从另一方面来讲,JAXB提供了快速而简便的方法将XML模式绑定到Java表示,从而使得Java开发者在Java应用程序中能方便地结合XML数据和处理函数。

    Java SE中的JAXB

    JAXB 2.0是JDK 1.6的组成部分。JAXB 2.2.3是JDK 1.7的组成部分。

    JDK中JAXB相关的重要Class和Interface:

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

    JDK中JAXB相关的重要Annotation:

    @XmlType,将Java类或枚举类型映射到XML模式类型
    @XmlAccessorType(XmlAccessType.FIELD) ,控制字段或属性的序列化。FIELD表示JAXB将自动绑定Java类中的每个非静态的(static)、非瞬态的(由@XmlTransient标注)字段到XML。其他值还有XmlAccessType.PROPERTY和XmlAccessType.NONE。
    @XmlAccessorOrder,控制JAXB 绑定类中属性和字段的排序。
    @XmlJavaTypeAdapter,使用定制的适配器(即扩展抽象类XmlAdapter并覆盖marshal()和unmarshal()方法),以序列化Java类为XML。
    @XmlElementWrapper ,对于数组或集合(即包含多个元素的成员变量),生成一个包装该数组或集合的XML元素(称为包装器)。
    @XmlRootElement,将Java类或枚举类型映射到XML元素。
    @XmlElement,将Java类的一个属性映射到与属性同名的一个XML元素。
    @XmlAttribute,将Java类的一个属性映射到与属性同名的一个XML属性。
     
     toXml方法是用Marshaller接口将对象转成xml数据
     
     
      //将java对象Car转成xml数据
    1
    static void toXml() throws Exception{ 2 JAXBContext jaxbContext = JAXBContext.newInstance(Car.class); 3 Marshaller marshaller = jaxbContext.createMarshaller(); 4 5 Wheel wheel = new Wheel(); 6 FuelSystem fuelSystem = new FuelSystem(); 7 fuelSystem.setName("燃油系统"); 8 Engine engine = new Engine(); 9 engine.setFuelSystem(fuelSystem); 10 Car car = new Car(); 11 car.setWheel(wheel); 12 car.setEngine(engine); 13 14 marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 15 //marshaller.marshal(car, System.out); 16 marshaller.marshal(car, new FileOutputStream("src/car.xml")); 17 }

    生成的xml文件

     1 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
     2 <car>
     3     <wheel>
     4         <hub>4</hub>
     5         <tire>4</tire>
     6     </wheel>
     7     <engine>
     8         <fuelSystem>
     9             <name>燃油系统</name>
    10         </fuelSystem>
    11     </engine>
    12 </car>
    1 //xml文件转成对象
    2     static void Xml2Obj() throws Exception{
    3         JAXBContext jaxbContext = JAXBContext.newInstance(Car.class);
    4         Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
    5         Car car = (Car) unmarshaller.unmarshal(new File("src/car.xml"));
    6         System.out.println(car);
    7     }

    输出的值为car.toString():

    Car [wheel=Wheel [tire=4, hub=4], engine=Engine [fuelSystem=FuelSystem [name=燃油系统]]]

     1 package com.chen.jaxb;
     2 
     3 import javax.xml.bind.annotation.XmlAccessType;
     4 import javax.xml.bind.annotation.XmlAccessorType;
     5 import javax.xml.bind.annotation.XmlRootElement;
     6 
     7 @XmlRootElement
     8 @XmlAccessorType(XmlAccessType.FIELD)
     9 public class Car {
    10     private Wheel wheel;
    11     private Engine engine;
    12     public Wheel getWheel() {
    13         return wheel;
    14     }
    15     public void setWheel(Wheel wheel) {
    16         this.wheel = wheel;
    17     }
    18     public Engine getEngine() {
    19         return engine;
    20     }
    21     public void setEngine(Engine engine) {
    22         this.engine = engine;
    23     }
    24     @Override
    25     public String toString() {
    26         return "Car [wheel=" + wheel + ", engine=" + engine + "]";
    27     }
    28 }
     1 package com.chen.jaxb;
     2 
     3 public class Engine {
     4     private FuelSystem fuelSystem;
     5 
     6     public FuelSystem getFuelSystem() {
     7         return fuelSystem;
     8     }
     9 
    10     public void setFuelSystem(FuelSystem fuelSystem) {
    11         this.fuelSystem = fuelSystem;
    12     }
    13     @Override
    14     public String toString() {
    15         return "Engine [fuelSystem=" + fuelSystem + "]";
    16     }
    17 }
     1 package com.chen.jaxb;
     2 
     3 public class FuelSystem {
     4     private String name;
     5     
     6     public String getName() {
     7         return name;
     8     }
     9     public void setName(String name) {
    10         this.name = name;
    11     }
    12     @Override
    13     public String toString() {
    14         return "FuelSystem [name=" + name + "]";
    15     }
    16 }
     1 package com.chen.jaxb;
     2 
     3 public class Wheel {
     4     int tire = 4;  //轮胎
     5     int hub = 4;   //轮毂
     6     
     7     public int getTire() {
     8         return tire;
     9     }
    10     public void setTire(int tire) {
    11         this.tire = tire;
    12     }
    13     public int getHub() {
    14         return hub;
    15     }
    16     public void setHub(int hub) {
    17         this.hub = hub;
    18     }
    19     @Override
    20     public String toString() {
    21         return "Wheel [tire=" + tire + ", hub=" + hub + "]";
    22     }
    23 }
  • 相关阅读:
    ffmpeg基本用法
    MySQL中使用like查找汉字 Incorrect string value 解决办法
    mysql存储过程变量的拼接
    解决IIS8中 URLRewriter 不能使用的方法
    Unix系统介绍
    远程控制客户端界面介绍
    远程控制之登录界面设计
    搞了一周,终于把视频流在局域网内传输搞定
    servelet
    前后台贯穿
  • 原文地址:https://www.cnblogs.com/chenxiaocai/p/5253559.html
Copyright © 2011-2022 走看看