`
ootabc
  • 浏览: 110827 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

CXF详解三

阅读更多

CXFJAXB

通常情况下我们不直接传对象,因为直接传递对象安全性差,而且暴露了实体对象。所以我们选择传递XML文件,当然也可以传递JSON对象。对于传递XMLJAX-WS采用的是JAXB工具。

JAXBJava Architecture for XML Binding)提供了一个快速而方便的方式绑定XML Schemasjava,使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 Mappinghere 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而准备的,比如CollectionMap及实现类等。

例:@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

10Enum 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

 

 

分享到:
评论

相关推荐

    CXF实现WebService详解实例

    3. **配置CXF**:在Spring配置文件中配置CXF,包括服务端点地址、服务类等。 ```xml xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:cxf="http://cxf.apache.org/core" xsi:schemaLocation=...

    cxf_webservice

    **Apache CXF详解** Apache CXF是一个开源的Web服务框架,它将原本复杂的Web服务开发流程简化,提供了丰富的API和工具,让开发者能够快速构建出高性能、高质量的Web服务。其主要特点包括: 1. **支持多种协议**:...

    WebService CXF 详细教程

    **WebService CXF 详解** **一、WebService简介** WebService是一种基于标准的,可以在不同操作系统、编程语言之间交换数据的Web应用程序。它通过WSDL(Web服务描述语言)定义了服务接口,利用SOAP(简单对象访问...

    Spring3整合CXF2.7.10

    **Spring3整合CXF2.7.10详解** 在Java世界中,Spring框架和Apache CXF都是极为重要的工具。Spring作为一个全面的轻量级应用框架,提供了强大的依赖注入、AOP(面向切面编程)等功能,而CXF则是一个优秀的服务端和...

    cxf与axis2区别

    CXF与Axis2框架区别详解 CXF和Axis2是两个流行的Webservice框架,都是由现有的项目逐渐演化而来的。Axis2是由Axis1.x系列演化而来,而Apache CXF则是由Celtix和XFire项目整合而生。在本文中,我们将探讨CXF和Axis2...

    CXF使用EndpointImpl发布WebService加入拦截器

    在提供的压缩包文件中,`WebService_CXF_Interceptor_Client_3`和`WebService_CXF_Interceptor_Server_3`可能包含了客户端和服务端的示例代码。这些示例可能展示了如何创建自定义拦截器,以及如何在`EndpointImpl`中...

    cxf和springnvc整合

    Apache CXF 和 Spring 整合详解 在 Java 开发领域,Apache CXF 是一个流行的开源框架,用于构建和开发服务导向架构(SOA)的应用程序。它提供了多种方式来实现 Web 服务,包括 JAX-WS 和 JAX-RS。另一方面,Spring ...

    Spring整合CXF demo

    **Spring整合CXF详解** Spring框架与Apache CXF的整合是企业级Java应用中常见的实践,主要用于构建基于SOAP和RESTful服务。这个"Spring整合CXF demo"项目提供了一个直观的例子,帮助开发者理解如何在Spring环境中...

    WebService_CXF范例.

    【WebService CXF详解与入门】 WebService是一种允许不同系统之间进行通信和交互的标准协议,它基于HTTP协议,使得应用程序可以无视具体实现细节地调用互联网上的服务。这种技术使得分布式应用程序的发展成为可能,...

    CXF打印SOAP报文,记录WebService日志

    #### 三、代码实现详解 ##### 1. 创建自定义拦截器`InInterceptor` ```java package com.util; import java.io.IOException; import java.io.InputStream; import org.apache.cxf.helpers.IOUtils; import org....

    CXF各种资料.rar

    【CXF技术详解】 CXF,全称CXF Commons eXtensible Services Framework,是一个开源的Java服务框架,主要用于构建和开发服务导向架构(SOA)中的Web服务。CXF支持多种Web服务标准,包括WS-*(如SOAP、WSDL、WS-...

    CXF生成的WSDL详解

    ### CXF生成的WSDL详解 #### 一、概述 WSDL(Web Services Description Language)是一种用于描述Web服务的标准XML格式。它包含了服务提供者如何访问该服务的信息,包括服务的位置、服务可用的方法以及这些方法...

    jdk21集成cxf示例程序

    **JDK21集成CXF详解** 在Java开发中,CXF是一个广泛使用的开源框架,主要用于构建和开发服务导向架构(SOA)的应用程序。它提供了SOAP和RESTful Web服务的支持,同时也支持WS-*规范。CXF允许开发者利用Java语言的...

    java写的cxf实例

    【Java编写的CXF实例详解】 Java编程语言在企业级应用开发中占据着重要的地位,尤其是在Web服务领域。CXF,全称为CXF框架(Apache CXF),是一个强大的开源Java框架,用于构建和消费Web服务。它允许开发者通过Java ...

    spring_cxf_dubbo

    3. 配置Spring:在Spring配置文件中声明CXF服务,包括端点地址、服务类等信息。 4. 启动服务:通过Spring启动CXF服务,使其对外提供服务。 【Dubbo服务提供与消费】 1. 创建服务提供者:定义服务接口,实现接口...

    CXF Spring Web Service 程序

    【CXF与Spring整合Web服务详解】 在Java世界中,Apache CXF是一个广泛使用的开源框架,用于构建和部署Web服务。它提供了丰富的功能,包括SOAP、RESTful API的支持,以及与Spring框架的深度集成。本篇文章将深入探讨...

    WebService CXF 对象传递 附

    **WebService CXF 对象传递详解** 在Web服务领域,CXF是一个非常重要的开源框架,它允许开发者创建和消费各种Web服务。CXF支持SOAP、RESTful等多种通信模式,并且能够处理复杂的对象传递,使得Web服务的数据交换...

    cxf开发教程

    3. **Web服务开发**:使用CXF开发Web服务通常涉及以下步骤: - 创建服务接口:定义服务的公共操作。 - 实现服务类:提供接口方法的具体实现。 - 配置服务:通过XML配置文件或者注解方式声明服务及其接口。 - ...

    CXF的入门实例

    **CXF入门实例详解** Apache CXF 是一个开源的Java框架,主要用于构建和开发Web服务。它提供了多种方式来创建和消费SOAP以及RESTful服务,是Java世界中广泛使用的Web服务实现工具。在这个"CXF HelloWorld"入门实例...

Global site tag (gtag.js) - Google Analytics