JAXB 的根本用法mingxing - 威尼斯人

JAXB 的根本用法mingxing

2018-11-10 08:55:35 | 作者: 智晖 | 标签: 办法,特点,节点 | 浏览: 2836

本文转自:https://blog.csdn.net/lw371496536/article/details/6942045

    JAXB(Java API for XML Binding),供给了一个快速快捷的办法将Java目标与XML进行转化。在JAX-WS(Java的WebService标准之一)中,JDK1.6 自带的版别JAX-WS2.1,其底层支撑就是JAXB。

    JAXB 能够完结Java目标与XML的彼此转化,在JAXB中,将一个Java目标转化为XML的进程称之为Marshal,将XML转化为Java目标的进程称之为UnMarshal。咱们能够经过在 Java 类中标示注解的办法将一个Java目标绑定到一段XML,也就是说,在Java类中标示一些注解,这些注解界说了怎么将这个类转化为XML,怎样转化,以及一段XML怎么被解析成这个类所界说的目标;也能够运用JAXB的XJC东西,经过界说schema的办法完结Java目标与XML的绑定(这个下次研讨)。

    下面来了解一下怎么经过标示注解来完结 Marshal 和 UnMarshal 的进程。我用的是 JAXB2_20101209.jar ,能够到https://jaxb.java.net/下载最新版别。

 

首先看个小比如:



界说一个java类

Java代码
package com.why.jaxb;   
  
import javax.xml.bind.annotation.XmlRootElement;   
  
@XmlRootElement  
public class People {   
    public String id = "001";   
    public String name = "灰太狼";   
    public int age = 26;   
}  

//咱们在实践中一般在get办法上增加相关注解
Java To XML(Marshal)

Java代码
package com.why.jaxb;   
  
import javax.xml.bind.JAXBContext;   
import javax.xml.bind.JAXBException;   
import javax.xml.bind.Marshaller;   
  
public class Java2XML {   
  
    /**  
     * @param args  
     * @throws JAXBException   
     */  
    public static void main(String[] args) throws JAXBException {   
        JAXBContext context = JAXBContext.newInstance(People.class);   
           
        Marshaller marshaller = context.createMarshaller();   
        marshaller.setProperty(Marshaller.JAXB_ENCODING,"gb2312");//编码格局

        //我在实践开发中从头封装了JAXB基本类,这儿就运用到了该特点。不过默许的编码格局UTF-8

        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);//是否格局化生成的xml串   
        marshaller.setProperty(Marshaller.JAXB_FRAGMENT, false);//是否省掉xml头信息( ?xml version="1.0" encoding="gb2312" standalone="yes"? )   
           
        People people = new People();   
        marshaller.marshal(people, System.out);   
    }   
  
}  

XML To Java(UnMarshal)

Java代码
package com.why.jaxb;   
  
import java.io.File;   
import javax.xml.bind.JAXBContext;   
import javax.xml.bind.JAXBException;   
import javax.xml.bind.Unmarshaller;   
import org.xml.sax.SAXException;   
  
public class XML2Java {   
    /**  
     * @param args  
     * @throws JAXBException   
     * @throws JAXBException   
     * @throws SAXException   
     */  
    public static void main(String[] args) throws JAXBException {   
        JAXBContext context = JAXBContext.newInstance(People.class);   
        Unmarshaller unmarshaller = context.createUnmarshaller();   
        File file = new File("src/people.xml");   
        People people = (People)unmarshaller.unmarshal(file);   
        System.out.println(people.id);   
        System.out.println(people.name);   
        System.out.println(people.age);   
    }   
}

 

       其实Marshal 和 UnMarshal的进程并不杂乱,只需求从JAXBContext中取得Marshaller或Unmarshaller目标,就能够让JAXB帮咱们来进行转化了。咱们需求操作的首要内容是界说一个规矩,通知JAXB怎么将一个类、依照什么样的格局转化为XML,下面是JAXB中首要的一些注解。



@XmlRootElement   将一个Java类映射为一段XML的根节点

参数:name            界说这个根节点的称号

          namespace   界说这个根节点命名空间



@XmlAccessorType  界说映射这个类中的何种类型需求映射到XML。可接纳四个参数,分别是:

      XmlAccessType.FIELD:映射这个类中的一切字段到XML

      XmlAccessType.PROPERTY:映射这个类中的特点(get/set办法)到XML

      XmlAccessType.PUBLIC_MEMBER:将这个类中的一切public的field或property一起映射到XML(默许)

      XmlAccessType.NONE:不映射



@XmlElement  指定一个字段或get/set办法映射到XML的节点。如,当一个类的XmlAccessorType 被标示为PROPERTY时,在某一个没有get/set办法的字段上标示此注解,即可将该字段映射到XML。

参数:defaultValue  指定节点默许值

         name             指定节点称号

         namespace    指定节点命名空间

         required         是否有必要(默许为false)

         nillable           该字段是否包括 nillable="true" 特点(默许为false)

         type               界说该字段或特点的相关类型



@XmlAttribute  指定一个字段或get/set办法映射到XML的特点。

参数:name             指定特点称号

         namespace    指定特点命名空间

         required         是否有必要(默许为false)



@XmlTransient  界说某一字段或特点不需求被映射为XML。如,当一个类的XmlAccessorType 被标示为PROPERTY时,在某一get/set办法的字段上标示此注解,那么该特点则不会被映射。



@XmlType 界说映射的一些相关规矩

参数:propOrder        指定映射XML时的节点次序

         factoryClass     指定UnMarshal时生成映射类实例所需的工厂类,默许为这个类自身

         factoryMethod  指定工厂类的工厂办法

         name               界说XML Schema中type的称号

         namespace      指定Schema中的命名空间



@XmlElementWrapper  为数组元素或调集元素界说一个父节点。如,类中有一元素为List items,若不加此注解,该元素将被映射为

    items ... /items

    items ... /items

这种方式,此注解可将这个元素进行包装,如:

    @XmlElementWrapper(name="items")
    @XmlElement(name="item")
    public List items;

将会生成这样的XML款式:

    items

        item ... /item

        item ... /item

    /items



@XmlJavaTypeAdapter  自界说某一字段或特点映射到XML的适配器。如,类中包括一个接口,咱们能够界说一个适配器(承继自 javax.xml.bind.annotation.adapters.XmlAdapter类),指定这个接口怎么映射到XML。
@XmlSchema 装备整个包的namespace,这个注解需放在package-info.java文件中。

jaxb编码:

           JAXBContext jaxbContext = JAXBContext.newInstance(clazz);
            Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
            InputStreamReader reader=new InputStreamReader(inputStream,"GBK");   //在此修正编码
            return unmarshaller.unmarshal(reader);

版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表威尼斯人立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章

阅读排行

  • 1
  • 2
  • 3
  • 4
  • 5

    hibernate缓存csdn

    数据,目标,运用
  • 6

    组合优于承继快报

    承继,目标,子类
  • 7

    跳出多层循环sina

    循环,符号,方法
  • 8

    servlet入门2alibaba

    办法,客户端,服务器
  • 9

    JAXB 的根本用法mingxing

    办法,特点,节点