`

JAVA开发WebService (五)—— JAXB

阅读更多

  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 的过程。可以到 http://jaxb.java.net/ 查看更新情况 。

 

首先看个小例子:

 

定义一个java类

Java代码   收藏代码
  1. package com.why.jaxb;  
  2.   
  3. import javax.xml.bind.annotation.XmlRootElement;  
  4.   
  5. @XmlRootElement  
  6. public class People {  
  7.     public String id = "001";  
  8.     public String name = "灰太狼";  
  9.     public int age = 26;  
  10. }  

Java To XML(Marshal)

Java代码   收藏代码
  1. package com.why.jaxb;  
  2.   
  3. import javax.xml.bind.JAXBContext;  
  4. import javax.xml.bind.JAXBException;  
  5. import javax.xml.bind.Marshaller;  
  6.   
  7. public class Java2XML {  
  8.   
  9.     /** 
  10.      * @param args 
  11.      * @throws JAXBException  
  12.      */  
  13.     public static void main(String[] args) throws JAXBException {  
  14.         JAXBContext context = JAXBContext.newInstance(People.class);  
  15.           
  16.         Marshaller marshaller = context.createMarshaller();  
  17.         marshaller.setProperty(Marshaller.JAXB_ENCODING,"gb2312");//编码格式  
  18.         marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);//是否格式化生成的xml串  
  19.         marshaller.setProperty(Marshaller.JAXB_FRAGMENT, false);//是否省略xml头信息(<?xml version="1.0" encoding="gb2312" standalone="yes"?>)  
  20.           
  21.         People people = new People();  
  22.         marshaller.marshal(people, System.out);  
  23.     }  
  24.   
  25. }  

XML To Java(UnMarshal)

Java代码   收藏代码
  1. package com.why.jaxb;  
  2.   
  3. import java.io.File;  
  4. import javax.xml.bind.JAXBContext;  
  5. import javax.xml.bind.JAXBException;  
  6. import javax.xml.bind.Unmarshaller;  
  7. import org.xml.sax.SAXException;  
  8.   
  9. public class XML2Java {  
  10.     /** 
  11.      * @param args 
  12.      * @throws JAXBException  
  13.      * @throws JAXBException  
  14.      * @throws SAXException  
  15.      */  
  16.     public static void main(String[] args) throws JAXBException {  
  17.         JAXBContext context = JAXBContext.newInstance(People.class);  
  18.         Unmarshaller unmarshaller = context.createUnmarshaller();  
  19.         File file = new File("src/people.xml");  
  20.         People people = (People)unmarshaller.unmarshal(file);  
  21.         System.out.println(people.id);  
  22.         System.out.println(people.name);  
  23.         System.out.println(people.age);  
  24.     }  
  25. }  

 

    其实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文件中。

分享到:
评论

相关推荐

    WebService二——使用Eclipse开发WebService及各种调用方式

    在Java应用程序中,可以使用JAXB(Java Architecture for XML Binding)将Java对象转换为XML,反之亦然,从而方便地调用WebService。 4. **AJAX调用**:在Web前端,可以使用JavaScript的XMLHttpRequest对象或现代...

    JAVA6开发WebService (三)——几个概念

    在Java 6中开发Web服务(WebService)是企业级应用中的常见任务,它允许不同的系统之间通过网络交换数据。本文将深入探讨Web服务的几个关键概念,帮助开发者更好地理解和使用这项技术。 首先,我们来理解什么是Web...

    JAVA6开发WebService (二)——JAX-WS例子

    在Java世界中,WebService是一种基于标准的、平台无关的通信机制,它允许不同的应用程序之间进行交互。本篇文章将深入探讨如何使用JAX-WS(Java API for XML Web Services)在JAVA6环境中开发Web服务。JAX-WS是Java...

    webservice获取List案例

    在本案例中,我们关注的是一个特定的Web服务类型——WebService,它用于获取一个包含泛型对象的List。这个场景在分布式系统、微服务架构或者跨平台数据共享中非常常见。让我们深入探讨一下相关的知识点。 1. **...

    java开发常用jar包之webservice.rar

    本压缩包文件“java开发常用jar包之webservice.rar”很可能包含了与这两种技术相关的库文件,用于简化Java开发者创建和消费Web服务的过程。 JAX-WS是Sun Microsystems推出的用于构建SOAP(Simple Object Access ...

    WebService

    在 MyEclipse 5.0 中,可以创建一种新的工程类型——WebService 工程,这种工程扩展了 MyEclipse Web Project,支持额外的 WebService 配置、开发和部署。使用 WebService Wizard 可以轻松创建和配置 WebService ...

    02.CXF功能概述_CXF发展历史和使用CXF开发WebService服务器端

    【标题】"02.CXF功能概述_CXF发展历史和使用CXF开发WebService服务器端"主要探讨了Apache CXF框架在Web服务领域的应用及其发展历程,同时也涵盖了如何利用CXF来构建一个高效的WebService服务器端。 Apache CXF是一...

    使用XFire发布WebService

    XFire是Apache CXF的前身,它提供了全面的WS-*支持,包括SOAP、WSDL、UDDI、MTOM等标准,以及Java到XML绑定(如JAXB)和数据绑定框架(如Aegis)。本教程将深入探讨如何使用XFire来发布和调用Web服务。 【描述】: ...

    CXF webservice Demo

    这些库文件通常包含了CXF的核心组件,以及对其他相关技术(如JAXB、JAX-WS等)的支持,使得开发者能够在Java环境中方便地构建Web服务。 而`myCXFTest`文件可能是一个包含服务器端和客户端代码的项目。服务器端代码...

    apache-cxf-3.3.4.rar

    wsdl2java -p com.jaxb.client -d ../src -all E:\webService\***.xml (你的wsdl文件或者xml文件) 命令格式: wsdl2java -p 包名 -d 生成代码存放目录 xml的路径 wsdl2java的用法: -p 指的是...

    Quartz Spring整合——附带webservice Demo

    Quartz 是一个开源的作业调度框架,常用于Java应用程序中实现定时任务的管理。Spring 是一个广泛应用的轻量级框架,提供了丰富的功能,包括依赖注入、面向切面编程等。将 Quartz 整合到 Spring 中,可以充分利用 ...

    WebService之Axis2经典教程

    - **项目一**: 使用Java Swing技术实现个人信息管理系统(PIM),重点介绍如何通过WebService传输和下载图像文件等复杂类型。 - **项目二**: 使用Struts2实现Web版的PIM系统,学习如何在Web环境中应用WebService。 - *...

    Web Service 那点事儿(2)—— 使用 CXF 开发 SOAP 服务 - ImportNew1

    【Web Service 那点事儿(2)—— 使用 CXF 开发 SOAP 服务】 Web Service是一种基于标准协议的,用于不同系统间交换数据的技术。SOAP(Simple Object Access Protocol)是Web Service常用的一种通信协议,它定义了...

    实战Web Service —— 使用Apache CXF开发Web服务的教程

    **实战Web Service —— 使用Apache CXF开发Web服务的教程** Apache CXF是一个开源的Java框架,用于构建和部署Web服务。本教程将带你深入理解如何利用CXF来开发高效、灵活的Web服务。我们将从基础概念开始,逐步...

    webservice开发

    本教程将深入探讨Web服务开发,特别是两个常用的开发框架——XFire和Axis。 一、Web服务基础 Web服务的核心思想是通过SOAP(Simple Object Access Protocol)协议进行数据交换,它使用XML作为消息格式,确保了跨...

    webservice cfx客户端配置所需的jar包

    2. **JAXB (Java Architecture for XML Binding)**:用于XML到Java对象的转换,反之亦然,是CXF中数据绑定的基础。 3. **WS-* Stack**:支持诸如WS-Security、WS-Addressing等Web服务标准的实现。 4. **...

    CXF WebService 视频和源码

    - **数据绑定**:理解JAXB(Java Architecture for XML Binding)如何将Java对象与XML文档相互转换,这对于数据的序列化和反序列化至关重要。 - **WSDL第一或代码第一**:理解两种开发模式的差异,前者是从WSDL开始...

    WebService CXF学习-入门篇.pdf

    **WebService CXF 学习——入门篇** **一、WebService CXF 由来与目标** Apache CXF 是一个流行的开源框架,它源自 ObjectWeb Celtix 和 CodeHaus XFire 的合并,这两个项目分别由 IONA 公司和业界知名SOAP堆栈...

    webservice的cfx框架

    3. 数据绑定:CXF支持多种数据绑定技术,如JAXB(Java Architecture for XML Binding)用于SOAP和XML Schema,以及JSON-B(Java JSON-Binding API)用于JSON。这些技术使得Java对象可以直接与XML或JSON文档进行映射...

    cxf webservice 应用

    Apache CXF 是一个开源的Java框架,主要用于构建和开发Web服务。它提供了多种方式来创建和消费Web服务,包括基于Java API for Web Services (JAX-WS) 和 Java API for RESTful Web Services (JAX-RS) 的API。CXF的...

Global site tag (gtag.js) - Google Analytics