`
wuhongyu
  • 浏览: 406946 次
  • 性别: Icon_minigender_1
  • 来自: 哈尔滨
社区版块
存档分类
最新评论

JAVA6开发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类

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)

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)

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

 

 

 

 

7
8
分享到:
评论
2 楼 chxiaowu 2011-12-06  
总结的还行。
1 楼 kimmking 2011-01-25  
用惯了 xmlbeans

对这个表示 鸭梨很大

相关推荐

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

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

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

    本篇文章将深入探讨如何使用JAX-WS(Java API for XML Web Services)在JAVA6环境中开发Web服务。JAX-WS是Java平台上的一个核心API,用于构建和消费Web服务,它简化了SOAP(Simple Object Access Protocol)消息处理...

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

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

    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 ...

    使用XFire发布WebService

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

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

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

    CXF webservice Demo

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

    JDK6 webservice的应用(注意SOAPBinding.Style不同的差异)

    在实际开发中,使用JDK 6创建Web服务时,开发者会编写Java接口,然后使用JAX-WS工具(如wsimport或JAXB)自动生成服务器端实现和客户端存根代码。接口中的方法将映射到SOAP消息的操作,而XSD文件则用来验证输入和...

    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常用的一种通信协议,它定义了...

    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 指的是...

    实战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的cfx框架

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

    WebService CXF学习-入门篇.pdf

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

Global site tag (gtag.js) - Google Analytics