`
liyuandong
  • 浏览: 329763 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JAXB常用注解

    博客分类:
  • JAVA
 
阅读更多

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 ,可以到http://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;  


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;
}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");//编码格式  
        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);  
    }  
 


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");//编码格式
                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);  
    }  


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注解相关技术

    JAXB注解相关技术JAXB注解相关技术JAXB注解相关技术JAXB注解相关技术JAXB注解相关技术JAXB注解相关技术

    JAXB-XML注解

    Jaxb annotation 使用 Jaxb annotation初步使用

    JAXB-XML注解-应用

    JAXB-XML 注解应用 一、JAXB 概念和特点 JAXB(Java Architecture for XML Binding)是一项业界标准,它可以根据 XML Schema 产生 Java 类的技术。该过程中,JAXB 也提供了将 XML 实例文档反向生成 Java 对象树的...

    JAXB注解命名空间使用到的jar包

    当使用的JDK为1.6版本的时候,JAXB注解命名空间使用到的jar包

    JAXB 生成XML文件

    JAXB注解 java 关于xml的注解,自动生成xml文件

    jaxb生成XML例子

    使用jaxb生成XML例子,含有例子和注解解析

    JAXB的使用JAXB的使用

    JAXB的使用JAXB的使用JAXB的使用JAXB的使用

    jaxb2.2.jar

    JAXB能够使用Jackson对JAXB注解的支持实现(jackson-module-jaxb-annotations),既方便生成XML,也方便生成JSON,这样一来可以更好的标志可以转换为JSON对象的JAVA类。JAXB允许JAVA人员将JAVA类映射为XML表示方式

    jaxb-libs.jar.zip

    jaxb-libs.jar 下载 JAXB能够使用Jackson对JAXB注解的支持实现(jackson-module-jaxb-annotations),既方便生成XML...JAXB允许JAVA人员将JAVA类映射为XML表示方式,常用的注解包括:@XmlRootElement,@XmlElement等等。

    JAXB2 jaxb-api.jar jaxb-xjc.jar jaxb-impl.jar activation.jar

    无需安装,解压后即可。jaxb-api.jar,jaxb-xjc.jar,jaxb-impl.jar,activation.jar等相关jar包在lib文件夹下。

    jaxb-api-2.2.jar.zip

    jaxb-api-2.2.jar 下载 JAXB能够使用Jackson对JAXB注解的支持实现(jackson-module-jaxb-annotations),既方便生成...JAXB允许JAVA人员将JAVA类映射为XML表示方式,常用的注解包括:@XmlRootElement,@XmlElement等等。

    JAXB的安装包及插件

    JAXB的安装包及插件

    jaxb-api jaxb-impl jar

    jaxb-api jaxb-impl jar

    JAXB的 eclipse插件

    JAXB的 eclipse插件 JAXB的 eclipse插件 JAXB的 eclipse插件 JAXB的 eclipse插件 JAXB的 eclipse插件

    jaxb-api-2.2 jaxb-impl

    在使用webservice,mule esb等需要jaxb的项目里经常会出现 JAXB 2.0 API is being loaded from the bootstrap classloader这个错误,按照打出的信息Use the endorsed directory mechanism to place jaxb-api.jar in ...

    maven-jaxb2-plugin-0.14.0.jar

    maven-jaxb2-plugin-0.14.0 下载 maven包 JAXB能够使用Jackson对JAXB注解的支持实现(jackson-module-jaxb-...JAXB允许JAVA人员将JAVA类映射为XML表示方式,常用的注解包括:@XmlRootElement,@XmlElement等等。

    activation.jar jaxb1-impl.jar jaxb-api.jar jaxb-impl.jar jaxb-xjc.jar jsr173_1.0

    activation.jar jaxb1-impl.jar jaxb-api.jar jaxb-impl.jar jaxb-xjc.jar jsr173_1.0_api.jar系列jar下载

    JAXB(JAXB支持、源码、官方说明文档)

    java -jar JAXB2_20060607.jar On Windows, you can just double-click the jar file to execute. Release Notes Browse the release notes online, including what's new. Technical Support Please subscribe to...

    jaxb小项目

    一个jaxb小项目的源码,可以帮助理解jaxb的执行和注解。

    javax.rar(jaxb-impl-2.3.0、jaxb-core-2.3.0、jaxb-api-2.3.0)

    有关Maven项目中缺少jaxb-api的异常报错解决,jaxb-api-2.3.0.jar

Global site tag (gtag.js) - Google Analytics