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文件中。
分享到:
相关推荐
在Java 6中开发Web服务(WebService)是企业级应用中的常见任务,它允许不同的系统之间通过网络交换数据。本文将深入探讨Web服务的几个关键概念,帮助开发者更好地理解和使用这项技术。 首先,我们来理解什么是Web...
本篇文章将深入探讨如何使用JAX-WS(Java API for XML Web Services)在JAVA6环境中开发Web服务。JAX-WS是Java平台上的一个核心API,用于构建和消费Web服务,它简化了SOAP(Simple Object Access Protocol)消息处理...
在Java应用程序中,可以使用JAXB(Java Architecture for XML Binding)将Java对象转换为XML,反之亦然,从而方便地调用WebService。 4. **AJAX调用**:在Web前端,可以使用JavaScript的XMLHttpRequest对象或现代...
在本案例中,我们关注的是一个特定的Web服务类型——WebService,它用于获取一个包含泛型对象的List。这个场景在分布式系统、微服务架构或者跨平台数据共享中非常常见。让我们深入探讨一下相关的知识点。 1. **...
本压缩包文件“java开发常用jar包之webservice.rar”很可能包含了与这两种技术相关的库文件,用于简化Java开发者创建和消费Web服务的过程。 JAX-WS是Sun Microsystems推出的用于构建SOAP(Simple Object Access ...
在 MyEclipse 5.0 中,可以创建一种新的工程类型——WebService 工程,这种工程扩展了 MyEclipse Web Project,支持额外的 WebService 配置、开发和部署。使用 WebService Wizard 可以轻松创建和配置 WebService ...
XFire是Apache CXF的前身,它提供了全面的WS-*支持,包括SOAP、WSDL、UDDI、MTOM等标准,以及Java到XML绑定(如JAXB)和数据绑定框架(如Aegis)。本教程将深入探讨如何使用XFire来发布和调用Web服务。 【描述】: ...
【标题】"02.CXF功能概述_CXF发展历史和使用CXF开发WebService服务器端"主要探讨了Apache CXF框架在Web服务领域的应用及其发展历程,同时也涵盖了如何利用CXF来构建一个高效的WebService服务器端。 Apache CXF是一...
这些库文件通常包含了CXF的核心组件,以及对其他相关技术(如JAXB、JAX-WS等)的支持,使得开发者能够在Java环境中方便地构建Web服务。 而`myCXFTest`文件可能是一个包含服务器端和客户端代码的项目。服务器端代码...
在实际开发中,使用JDK 6创建Web服务时,开发者会编写Java接口,然后使用JAX-WS工具(如wsimport或JAXB)自动生成服务器端实现和客户端存根代码。接口中的方法将映射到SOAP消息的操作,而XSD文件则用来验证输入和...
Quartz 是一个开源的作业调度框架,常用于Java应用程序中实现定时任务的管理。Spring 是一个广泛应用的轻量级框架,提供了丰富的功能,包括依赖注入、面向切面编程等。将 Quartz 整合到 Spring 中,可以充分利用 ...
- **项目一**: 使用Java Swing技术实现个人信息管理系统(PIM),重点介绍如何通过WebService传输和下载图像文件等复杂类型。 - **项目二**: 使用Struts2实现Web版的PIM系统,学习如何在Web环境中应用WebService。 - *...
【Web Service 那点事儿(2)—— 使用 CXF 开发 SOAP 服务】 Web Service是一种基于标准协议的,用于不同系统间交换数据的技术。SOAP(Simple Object Access Protocol)是Web Service常用的一种通信协议,它定义了...
wsdl2java -p com.jaxb.client -d ../src -all E:\webService\***.xml (你的wsdl文件或者xml文件) 命令格式: wsdl2java -p 包名 -d 生成代码存放目录 xml的路径 wsdl2java的用法: -p 指的是...
**实战Web Service —— 使用Apache CXF开发Web服务的教程** Apache CXF是一个开源的Java框架,用于构建和部署Web服务。本教程将带你深入理解如何利用CXF来开发高效、灵活的Web服务。我们将从基础概念开始,逐步...
本教程将深入探讨Web服务开发,特别是两个常用的开发框架——XFire和Axis。 一、Web服务基础 Web服务的核心思想是通过SOAP(Simple Object Access Protocol)协议进行数据交换,它使用XML作为消息格式,确保了跨...
2. **JAXB (Java Architecture for XML Binding)**:用于XML到Java对象的转换,反之亦然,是CXF中数据绑定的基础。 3. **WS-* Stack**:支持诸如WS-Security、WS-Addressing等Web服务标准的实现。 4. **...
- **数据绑定**:理解JAXB(Java Architecture for XML Binding)如何将Java对象与XML文档相互转换,这对于数据的序列化和反序列化至关重要。 - **WSDL第一或代码第一**:理解两种开发模式的差异,前者是从WSDL开始...
3. 数据绑定:CXF支持多种数据绑定技术,如JAXB(Java Architecture for XML Binding)用于SOAP和XML Schema,以及JSON-B(Java JSON-Binding API)用于JSON。这些技术使得Java对象可以直接与XML或JSON文档进行映射...
**WebService CXF 学习——入门篇** **一、WebService CXF 由来与目标** Apache CXF 是一个流行的开源框架,它源自 ObjectWeb Celtix 和 CodeHaus XFire 的合并,这两个项目分别由 IONA 公司和业界知名SOAP堆栈...