`
xltgod
  • 浏览: 16651 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

jax-ws小结

 
阅读更多
在本章我会向大家介绍下jax-ws到底是个什么东西,另外也会用jax-ws做个简单的示例给大家看看。

Java API for XML Web Services (JAX-WS)是Java程序设计语言一个用来创建Web服务的API。 JAX-WS是在JAX-RPC 1.1的标准上实现的。JAX-RPC是 Java 方面的 Web 服务的原始标准。.JAX-RPC 1.0 对 Web 服务功能的认识有一定的局限。从其名称可以看出,最初的目的是为了支持使用 XML 的远程过程调用(Remote Procedure Call,RPC)操作。Java 当时已经有了一项面向 Java 应用程序间的 RPC 调用的现有技术,即远程方法调用(Remote Method Invocation,RMI)。该规范团队选择了在现有 RMI 接口上对 JAX-RPC 进行建模。只要通过请求-响应操作使用 rpc/enc SOAP,此模型就可相当接近地进行匹配,不过映射到异步操作或其他传输的效果并不理想。到 2003 年底,有关人员认识到,总要对 JAX-RPC 进行大幅修订,以处理这些问题和其他问题,因此 Sun 组成了一个专家组开始进行 JAX-RPC 2.0 规范的开发。
     JAX-RPC 2.0 开发工作的主要目标是对各项标准进行更新,以支持 JAX-RPC 1.X 的强制要求(基于 Java 5 特性,如 Annotation 和泛型),改进消息传递支持(包括除 HTTP 外的异步操作和传输),并通过使用 JAXB 2.0 绑定替代 JAX-RPC 1.X 的简单(但局限性很强)内置绑定来改进模式支持。出于对更改范围的强调和其他原因,这个后续标准的名称更改成了 JAX-WS 2.0。
     JDK5中提供的是jax-ws 2.0。JDK6中提供的jax-ws 2.1 ,现在jax-ws已经步入2.2版本,JDK7中即可支持。

Java 中的webservice规范:
JAXM&SAAJ (比jax-ws暴露了更多底层的细节,例如可以更灵活的处理SOAP消息)
JAX-WS(JAX-RPC)
JAX-RS(针对REST(表述性状态转移)式WebService 所制定的规范)

Jax-ws支持的数据类型
1:原始类型(任何Java支持的数据类型,如int);
Java原始数据类型 XML 数据类型
boolean          xsd:boolean
byte          xsd:byte
short          xsd:short
int          xsd:int
long          xsd:long
float          xsd:float
double          xsd:double

注意:这里的原始数据类型中没有char类型。

我们知道,在Java语言中,每个原始数据类型都有一个对应的Object类,如int和Integer对应,
但事实上如果它们表示同一个整数时对于XML来说是一样的,所以XML把它们统一对待。

2:标准java类
Java Class       XML 数据类型
java.lang.String          xsd:string
java.math.BigInteger xsd:integer
java.math.BigDecimal xsd:decimal
java.util.Calendar xsd:dateTime
java.util.Date          xsd:dateTime
javax.xml.namespace.QName xsd:QName
java.net.URI          xsd:anyURI
(注意:xml时间类型的数据转换成JAVA对象为javax.xml.datatype.XMLGregorianCalendar)

3:由支持的Java类型组成的数组(Array)
JAX-WS支持由JAX-WS支持的数据类型组成的数组。比如int[],String[]等。多维数组同样可以被支持,比如:int[][],String[][]。
另外,byte[] 和 Byte[] 都映射为xsd:base64Binary 类型。

4:异常类
   JAX-WS规定Web服务抛出的一样类必须直接或者间接从java.lang.Exception类继承,这个异常必须是可检查的异常(checked Exception),必须不能直接或者间接继承自java.lang. RuntimeException类。
       异常和XML数据类型映射:
   <complexType name="InvalidPointException">
<sequence>
<element name="message" type="string" nillable="true" />
</sequence>
   </complexType>

可以看出,异常类实际上通过string类型来发送的,其实发送的string就是异常的
错误堆栈,在客户端获得XML形式的错误堆栈后,由可以通过这个错误堆栈重新构造一个新的异常类,它和服务端抛出的异常类是等价的。

5:JAX-WS值类型
   JAX-WS值类型是能够在客户端和服务端点之间传递的Java类,它被映射为xsd:complexType。JAX-WS值类型必须遵守以下规则:
1:Java类必须提供默认的构造方法;
3:可以实现任何Java接口或者扩展自其它 类;
4:它可以包含公共的、私有的、受保护的字段,并且公共的字段必须是JAX-WS支持的数据类型;
5:Java类可以包含静态或者transient字段;
6:Java类可以包含一些方法;
7:Java类可能被设计成JavaBean。在这种情况下,JavaBean必须依照JavaBeans组件规则,为它的属性提供getter和setter方法;并且JavaBean的属性必须是JAX-WS支持的数据类型。
同时jax-ws还支持以下类型的序列化:
    List(ArrayList、LinkedList、Stack、Vector);
    Map(HashMap、HashTable、Properties、TreeMap);
    Set(HashSet、TreeSet)。

JAX-RPC 1.1为什么会被取代?    
  JAX-RPC会被舍弃主要是因为它采用的rpc/enc格式来就行SOAP的编码。SOAP 规范中由style与use这两个属性决定SOAP数据的编码样式。 style属性可是两个值中的一个: rpc 或 document 。当属性被设定为文档样式时,客户端使用 XML 模式调用约定;当属性设置成rpc,客户端使用远程过程调用约定。use属性值决定消息的编码方式:可以是encoded或者是 literal。encoded值表示使用Section 5编码(SOAP规范第五章定义的编码)进行xml的序列化和反序列化。Literal值表示根据具体的Schema将内存对象序列化成XML消息。
       rpc/enc样式的缺点是耦合度高,跨平台的支持不是很好,另外rpc/enc样式下的SOAP协议栈除了单纯的XML处理之外,还要处理SOAP编码的逻辑,还原多引用的对象图。所以没有doc/lit简单快捷。
             因为最近几年rpc/enc遭受了不少质疑和反对声浪。在WS-I 基本概要1.1(WS-I Basic Profile Version 1.1)中,已经禁止使用这种编码样式。WS-I 基本概要1.1要求使用 WSDL SOAP 绑定的 RPC/literal 或 Document/literal形式。WS-I 基本概要禁止对 soap:Envelope 或派生的 soap:Body 元素使用 soap:encodingStyle 属性。因此, RPC/literal 和 Document/literal 是 WS-I 标准唯一支持的 2 种格式。

(有兴趣的同学可以自己详细了解下rpc/enc与doc/lit的区别,在这我只是简单讲下)

Document/literal wrapped   
  在标准Document/literal 方式下,程序员不得不处理所有的事务,包括基于 XML 的 SOAP 消息的序列化和逆序列化。标准的Document/literal不是面向RPC的,也没有定义与远程调用相关的信息,对仍然酷爱RPC调用的开发者来说无疑是欠缺的,在SOAP工具开发者看来Document/literal标准方式主要是缺乏函数的方法名。
   于是微软提出了使用Document/literal模拟RPC的方法调用,定义了一种用特殊的Document/literal使用方法,有名称叫做Document/literal wrapped。其实就是故意在WSDL中定义一个复杂类型complexType节点,该节点的名称与远程调用的方法名相同,该节点把发送的所有参数再封装一层。这样,SOAP的开发工具可以在接受到XML消息的时候根据节点上的方法名将XML消息处理后分发到具体的处理函数中。
    这种编码样式,兼顾了Document/literal和RPC的好处,具有更好的跨平台互操作性,目前许多类库都是采用这种方案,例如,大名鼎鼎的XFire。当然,这个方案肯定也有一些问题。
     1、 这其实不是真正的RPC样式,方法名不能重载。
    2、 WSDL文件比标准的Document/literal要复杂一些。

   好了。。蹩脚的理论讲完了。现在做个简单的例子,我之所以选用jax-ws和XFire来做实例是因为myeclipse6.5及其以上版本都自带上面2个框架,非常容易创建项目。而且我觉得关于webservice的框架也不用学太多。因为webservice本身就是为了解决不同程序之间互相调用而产生。你完全可以不必理会你的服务器端或者客户端所用的webservice框架是否和你一样。能够熟练使用一种webservice框架进行webservice项目的开发就可以了。由于内容过长,所以讲示例放在第二小章。请大家谅解。
分享到:
评论

相关推荐

    Web Service学习小结——基于JDK自带JAX-WS实现的web service

    在本篇文章中,我们将探讨如何利用Java SDK中的JAX-WS(Java API for XML Web Services)来创建和消费Web服务。 JAX-WS是Java平台上的一个标准组件,用于构建和部署SOAP Web服务。它简化了Web服务开发过程,提供了...

    (六)Java Ee平台上实现Web服务及多种客户端实例-小结.rar

    本资源的标题"Java EE平台上实现Web服务及多种客户端实例-小结"表明它聚焦于总结如何在Java EE环境中创建和消费Web服务,并提供了不同客户端的应用示例。 Web服务是一种通过HTTP协议传输数据的方式,它允许不同...

    Java测试新技术TestNG和高级概念.part1

    4.9 Java API for XML Web Services(JAX-WS) 4.10 Servlets 4.11 XML 4.12 本章小结 第5章 集成 5.1 Spring 5.2 Guice 5.3 DbUnit 5.4 HtmlUnit 5.5 Selenium 5.6 Swing UI测试 5.7 针对画图代码的测试 5.8 持续...

    Java测试新技术TestNG和高级概念.part2

    4.9 Java API for XML Web Services(JAX-WS) 4.10 Servlets 4.11 XML 4.12 本章小结 第5章 集成 5.1 Spring 5.2 Guice 5.3 DbUnit 5.4 HtmlUnit 5.5 Selenium 5.6 Swing UI测试 5.7 针对画图代码的测试 5.8 持续...

    Spring中文帮助文档

    14.5.2. 小结 14.6. 文档视图(PDF/Excel) 14.6.1. 简介 14.6.2. 配置和安装 14.7. JasperReports 14.7.1. 依赖的资源 14.7.2. 配置 14.7.3. 构造ModelAndView 14.7.4. 使用子报表 14.7.5. 配置Exporter的...

    Spring API

    14.5.2. 小结 14.6. 文档视图(PDF/Excel) 14.6.1. 简介 14.6.2. 配置和安装 14.7. JasperReports 14.7.1. 依赖的资源 14.7.2. 配置 14.7.3. 构造ModelAndView 14.7.4. 使用子报表 14.7.5. 配置Exporter的...

    Documentum 6.5 Architecture Overview

    #### 小结 Documentum 6.5 的架构设计充分体现了 SOA 的思想,通过提供一系列标准化的服务接口和支持工具,使得开发者可以轻松地构建、管理和维护复杂的企业内容管理系统。这种架构不仅提高了系统的可扩展性和灵活...

    Spring攻略(第二版 中文高清版).part2

    1.15 小结 56 第2章 高级Spring IoC容器 57 2.1 调用静态工厂方法创建Bean 57 2.1.1 问题 57 2.1.2 解决方案 57 2.1.3 工作原理 57 2.2 调用一个实例工厂方法创建Bean 58 2.2.1 问题 58 2.2.2 ...

    Spring攻略(第二版 中文高清版).part1

    1.15 小结 56 第2章 高级Spring IoC容器 57 2.1 调用静态工厂方法创建Bean 57 2.1.1 问题 57 2.1.2 解决方案 57 2.1.3 工作原理 57 2.2 调用一个实例工厂方法创建Bean 58 2.2.1 问题 58 2.2.2 ...

    第十五章 开发XFire Web Service应用22.pdf

    #### 15.10 小结 通过本章的学习,开发者不仅掌握了使用XFire和MyEclipse开发Web服务的基础知识,还深入了解了Web服务的原理、开发流程和技术要点。无论是创建简单的“Hello World”服务,还是构建复杂的天气预报...

Global site tag (gtag.js) - Google Analytics