CXF之JAXB
通常情况下我们不直接传对象,因为直接传递对象安全性差,而且暴露了实体对象。所以我们选择传递XML文件,当然也可以传递JSON对象。对于传递XML,JAX-WS采用的是JAXB工具。
JAXB(Java Architecture for XML Binding)提供了一个快速而方便的方式绑定XML Schemas和java,使java程序员能够很方便的在java应用程序中处理XML数据。JAXB提供了将XML文档解组为java内容树的方法, 以及将java内容树重新编组回XML文档的方法。JAXB同样也提供了一种从java对象生成XML Schema的方式。
Java Architecture for XML Binding (JAXB)
这里有几个重要的定义:
编组(Marshalling)是把内存中的数据转化到存储媒介上的过程。因此在 Java 和 XML 环境中,编组就是把一些 Java 对象转化成一个(或多个) XML 文档。在数据库环境中,则是把 Java 表示的数据存入数据库。显然,编组的秘密在于把 Java 实例中的面向对象结构转化成适用于 XML 的 扁平结构,或者 RDBMS 中的关系结构(使用 Java 技术转换到 OODBMS 实际上很简单)。
工作原理如下图所示:
解组(Unmarshalling) 是把数据从存储媒介转换到内存中的过程--正好与编组相反。因此需要把 XML 文档解组到 Java VM 中。这里的复杂性不是在扁平数据中,因为这不是必需的,而在于从正确的数据到正确的 Java 代码变量的映射。如果映射是错误的,就不可能正确地访问数据。当然,如果再尝试重新编组还会造成更大的问题,并且问题传播得很快。
工作原理如下图所示:
JAXB 数据类型相互映射
JAXB 2.0 Default Data Type Mapping
JAVA 2.0 other Date Type Mapping
JAXBElement Object:当xml element不能用Java表示时,此时提供一个JAXBElement,用于getting/setting object name 和object value 。
Java-to-Schema Mapping(here list the mapping of Java classes to XML data types):在Java EE5 中的JAXB注解元素在 javax.xml.bind.annotation包中。
JAXB annotation
XmlRootElement
|
@XmlRootElement 注解用于标注类或枚举类型,用它标注的类在映射后的 schema 中会以一个全局元素的形式出现,元素的类型是一个包含 Java 类属性的 XML 复杂数据类型。我们可以通过 @XmlRootElement 注解的 name 属性来定制映射的 schema 全局元素的名称,一般来说以 @XmlRootElement 标注的类在相应的 XML 文档中会以最外层或根节点形式出现。
|
XmlAccessorType
|
@XmlElement 注解用于标注 Javabean 的属性,用它标注的属性在映射后的 schema 中以元素的形式出现,所有 Javabean 属性映射的元素组合成为 @XmlType 映射的复杂数据类型。我们可以通过 @XmlElement 注解的 name 属性定制映射后的 XML 元素的名称,用 required 属性来指定该元素是否必须出现,用 nillable 属性来指明该元素是否允许空值。
|
XmlAccessType
|
用于控制字段或属性的序列化。
FIELD ,JAXB 绑定类中的每个非静态、非瞬态字段将会自动绑定到 XML
NONE, 只有使用一些 JAXB 注释专门对它们进行注释的所有字段或属性才绑定到 XML。
PROPERTY, JAXB 绑定类中的每个获取方法/设置方法对将会自动绑定到 XML。
PUBLIC_MEMBER, 每个公共获取方法/设置方法对和每个公共字段将会自动绑定到 XML。
|
XmlType
|
@XmlType 注解用于标注类或枚举类型,用它标注的类在映射后的 schema 中中会以一个 XML 复杂数据类型的形式出现。可以通过 @XmlType 注解的 name 属性来定制映射的 XML 数据类型的名称,用 propOrder 属性来定制映射后的复杂数据类型的内容顺序等。
|
XmlElement
|
@XmlElement 注解用于标注 Javabean 的属性,用它标注的属性在映射后的 schema 中以元素的形式出现,所有 Javabean 属性映射的元素组合成为 @XmlType 映射的复杂数据类型。我们可以通过 @XmlElement 注解的 name 属性定制映射后的 XML 元素的名称,用 required 属性来指定该元素是否必须出现,用 nillable 属性来指明该元素是否允许空值。
|
XmlTransient
|
@XmlTransient表明当前字段不用映射成为xml的属性
|
XmlAttribute
|
@XmlAttribute 注解用于标注 Javabean 属性,用它标注的属性在映射后的 schema 中以元素属性形式表现。我们可以通过 @XmlAttribute 注解的 name 属性来定制映射后的名称,用 required 属性来指定是否映射后的属性为必须出现的。
|
XmlJavaTypeAdapter
XmlAdapter
|
使用这两个主要是为了那种 xml data type无法映射为Java object而准备的,比如Collection和Map及实现类等。
例:@XmlJavaTypeAdapter(AdapterPurchaseListToHashMap.class)// 使用自定义的实现 XmlAdapter 接口的适配器 for custom marshaling。
|
对于基本类型(如int, long, double, string),不需要添加任何的annotation就可以进行把java data type映射到web service schema data type,即使是自定义的class来包装基本类型也不需要添加任何的annotation就可以进行把java data type映射到web service schema data type。
但总是有一些特殊的data type,如
1. BigDecimal Type
2. java.net.URI Type
3. Duration
4. Binary Types
5. XMLGregorianCalendar Type
6. UUID Type
7. Typed Variables
8. Collections Types
9. Array Types
10. Enum type
请参考:
² http://docs.sun.com/app/docs/doc/820-1072/ahigx?l=zh_TW&a=view
² http://www.ibm.com/developerworks/cn/webservices/1003_sunzg_jaxb/
具体请参考j2EE API是如下两个包:
² javax.xml.bind.annotation
² javax.xml.bind.annotation.adapters
分享到:
相关推荐
3. **配置CXF**:在Spring配置文件中配置CXF,包括服务端点地址、服务类等。 ```xml xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:cxf="http://cxf.apache.org/core" xsi:schemaLocation=...
**Apache CXF详解** Apache CXF是一个开源的Web服务框架,它将原本复杂的Web服务开发流程简化,提供了丰富的API和工具,让开发者能够快速构建出高性能、高质量的Web服务。其主要特点包括: 1. **支持多种协议**:...
**WebService CXF 详解** **一、WebService简介** WebService是一种基于标准的,可以在不同操作系统、编程语言之间交换数据的Web应用程序。它通过WSDL(Web服务描述语言)定义了服务接口,利用SOAP(简单对象访问...
**Spring3整合CXF2.7.10详解** 在Java世界中,Spring框架和Apache CXF都是极为重要的工具。Spring作为一个全面的轻量级应用框架,提供了强大的依赖注入、AOP(面向切面编程)等功能,而CXF则是一个优秀的服务端和...
CXF与Axis2框架区别详解 CXF和Axis2是两个流行的Webservice框架,都是由现有的项目逐渐演化而来的。Axis2是由Axis1.x系列演化而来,而Apache CXF则是由Celtix和XFire项目整合而生。在本文中,我们将探讨CXF和Axis2...
在提供的压缩包文件中,`WebService_CXF_Interceptor_Client_3`和`WebService_CXF_Interceptor_Server_3`可能包含了客户端和服务端的示例代码。这些示例可能展示了如何创建自定义拦截器,以及如何在`EndpointImpl`中...
Apache CXF 和 Spring 整合详解 在 Java 开发领域,Apache CXF 是一个流行的开源框架,用于构建和开发服务导向架构(SOA)的应用程序。它提供了多种方式来实现 Web 服务,包括 JAX-WS 和 JAX-RS。另一方面,Spring ...
**Spring整合CXF详解** Spring框架与Apache CXF的整合是企业级Java应用中常见的实践,主要用于构建基于SOAP和RESTful服务。这个"Spring整合CXF demo"项目提供了一个直观的例子,帮助开发者理解如何在Spring环境中...
【WebService CXF详解与入门】 WebService是一种允许不同系统之间进行通信和交互的标准协议,它基于HTTP协议,使得应用程序可以无视具体实现细节地调用互联网上的服务。这种技术使得分布式应用程序的发展成为可能,...
#### 三、代码实现详解 ##### 1. 创建自定义拦截器`InInterceptor` ```java package com.util; import java.io.IOException; import java.io.InputStream; import org.apache.cxf.helpers.IOUtils; import org....
【CXF技术详解】 CXF,全称CXF Commons eXtensible Services Framework,是一个开源的Java服务框架,主要用于构建和开发服务导向架构(SOA)中的Web服务。CXF支持多种Web服务标准,包括WS-*(如SOAP、WSDL、WS-...
### CXF生成的WSDL详解 #### 一、概述 WSDL(Web Services Description Language)是一种用于描述Web服务的标准XML格式。它包含了服务提供者如何访问该服务的信息,包括服务的位置、服务可用的方法以及这些方法...
**JDK21集成CXF详解** 在Java开发中,CXF是一个广泛使用的开源框架,主要用于构建和开发服务导向架构(SOA)的应用程序。它提供了SOAP和RESTful Web服务的支持,同时也支持WS-*规范。CXF允许开发者利用Java语言的...
【Java编写的CXF实例详解】 Java编程语言在企业级应用开发中占据着重要的地位,尤其是在Web服务领域。CXF,全称为CXF框架(Apache CXF),是一个强大的开源Java框架,用于构建和消费Web服务。它允许开发者通过Java ...
3. 配置Spring:在Spring配置文件中声明CXF服务,包括端点地址、服务类等信息。 4. 启动服务:通过Spring启动CXF服务,使其对外提供服务。 【Dubbo服务提供与消费】 1. 创建服务提供者:定义服务接口,实现接口...
【CXF与Spring整合Web服务详解】 在Java世界中,Apache CXF是一个广泛使用的开源框架,用于构建和部署Web服务。它提供了丰富的功能,包括SOAP、RESTful API的支持,以及与Spring框架的深度集成。本篇文章将深入探讨...
**WebService CXF 对象传递详解** 在Web服务领域,CXF是一个非常重要的开源框架,它允许开发者创建和消费各种Web服务。CXF支持SOAP、RESTful等多种通信模式,并且能够处理复杂的对象传递,使得Web服务的数据交换...
3. **Web服务开发**:使用CXF开发Web服务通常涉及以下步骤: - 创建服务接口:定义服务的公共操作。 - 实现服务类:提供接口方法的具体实现。 - 配置服务:通过XML配置文件或者注解方式声明服务及其接口。 - ...
**CXF入门实例详解** Apache CXF 是一个开源的Java框架,主要用于构建和开发Web服务。它提供了多种方式来创建和消费SOAP以及RESTful服务,是Java世界中广泛使用的Web服务实现工具。在这个"CXF HelloWorld"入门实例...