一、Web Service基本概念

Web Service由两部分组成

·
SOAP--Web Service
之间的基本通信协议。

WSDL--Web Service描述语言,它定义了Web Service做什么,怎么做和查询的信息。

二、什么是 Webservice?

Web 是使应用程序可以与平台和编程语言无关的方式进行相互通信的一项技术。Web 服务是一个软件接口,它描述了一组可以在网络上通过标准化的 XML 消息传递访问的操作。它使用基于 XML 语言的协议来描述要执行的操作或者要与另一个 Web 服务交换的数据。一组以这种方式交互的 Web 服务在面向服务的体系结构(Service-Oriented Architecture,SOA)中定义了特殊的 Web 服务应用程序。


三、什么是SOAP?

SOAP(Simple Object Access Protocol )简单对象访问协议是在分散或分布式的环境中交换信息并执行远程过程调用的轻量级协议,是一个基于XML的协议。使用SOAP,不用考虑任何特定的传输协议(最常用的还是HTTP协议),可以允许任何类型的对象或代码,在任何平台上,以任何一种语言相互通信。

SOAP包括四个部分:SOAP封装(envelop),封装定义了一个描述消息中的内容是什么,是谁发送的,谁应当接受并处理它以及如何处理它们的框架;SOAP编码规则(encoding rules),用于表示应用程序需要使用的数据类型的实例;SOAP RPC表示(RPC representation),表示远程过程调用和应答的协定;SOAP绑定(binding),使用底层协议交换信息。

应用中比较关注的是envelop,由一个或多个Header和一个Body组成

SOAP在可互操作的基础 Web 服务协议栈中的位置。

四、 什么是WSDL?

WSDL(Web Service Description Language)Web服务器描述语言是用XML文档来描述Web服务的标准,是Web服务的接口定义语言,由Ariba、Intel、IBM、MS等共同提出,通过WSDL,可描述Web服务的三个基本属性:

·服务做些什么——服务所提供的操作(方法)

·如何访问服务——和服务交互的数据格式以及必要协议

·服务位于何处——协议相关的地址,如URL

WSDL文档以端口集合的形式来描述Web服务,WSDL 服务描述包含对一组操作和消息的一个抽象定义,绑定到这些操作和消息的一个具体协议,和这个绑定的一个网络端点规范。

WSDL在Web 服务概念性协议栈中的位置。

WSDL描述语言一般包含三部分

l         What部分:包括了type、message和portType元素

Type:定义了Web Service使用的数据结构(使用XML Schema定义)

Message:一个Message是SOAP的基本通信元素。每个Message可以有一个或多个Part,每个Part代表一个参数。

PortType:消息汇总为不同的操作并归入到一个被称为portType的实体中。一个portType代表一个接口(Web Service支持的操作集合),每个Web Service可以有多个接口,它们都使用portType表示。每个操作又包含了input和 output部分。

2     How部分:包含binding元素
binding
元素将portType绑定到特定的通信协议上(如HTTP上的SOAP协议)

3       Where部分:由service元素组成

它将portType,binding以及Web Service实际的位置(URI)放在一起描述

五、什么是WSDD?

WSDD就是WEB服务分布描述(Web Service Deployment Descriptor), 它定义了WEB服务的接口,如服务名、提供的方法、方法的参数等信息。

六、什么是UDDI?

UDDI就是统一描述、发现和集成(Universal Description, Discovery, and Integration)。UDDI用于集中存放和查找WSDL描述文件,起着目录服务器的作用。

Web 服务中的角色、操作和构件。

服务提供者。从企业的角度看,这是服务的所有者。从体系结构的角度看,这是托管访问服务的平台。

服务请求者。从企业的角度看,这是要求满足特定功能的企业。从体系结构的角度看,这是寻找并调用服务,或启动与服务的交互的应用程序。服务请求者角色可以由浏览器来担当,由人或无用户界面的程序(例如,另外一个 Web 服务)来控制它。

服务注册中心。

这是可搜索的服务描述注册中心,服务提供者在此发布他们的服务描述。在静态绑定开发或动态绑定执行期间,服务请求者查找服务并获得服务的绑定信息(在服务描述中)。对于静态绑定的服务请求者,服务注册中心是体系结构中的可选角色,因为服务提供者可以把描述直接发送给服务请求者。同样,服务请求者可以从服务注册中心以外的其它来源得到服务描述,例如本地文件、FTP 站点、Web 站点、广告和服务发现(Advertisement and Discovery of Services,ADS)或发现 Web 服务(Discovery of Web Services,DISCO)。

七、客户端和服务器端

客户端

根据wsdl文件生成的一组相关的客户端类。然后,通过wsdl地址可以访问其他系统或应用所提供的功能。

通常Web Service可以有三种类型的客户

l         商业伙伴(Business Partner)--包括分发商,零售商以及大型消费者)

此类客户通过SOAP、WSDL、ebXML、UDDI等XML技术与Web Service连接

l         瘦客户--包括Web浏览器、PDA以及无线设备

该类客户通常经由轻量协议(如HTTP)与Web Service连接

l         肥客户--包括Applet、各类应用以及现存系统
通常使用重量级协议(如IIOP)连接Web Service

服务器端

也就是对外提供的一个接口(本质上就是:方法),让其他不同的系统或应用可以来进行访问,本系统的功能。它包括的内容:

1.一个对外接口

2.该接口的实现类

3.一个部署描述文件,描述这个服务(接口)。部署文件中的服务的信息,是可以通过axis的命令来生成的。

这些文件都是将包含在一个完整的web应用中的,当启动web容器的时候,就可以其他系统进行访问了。

 

 

Webservice开发全程技术指导(二)

一、文件格式介绍

1.JWS (Java Web Service) Files - Instant Deployment 它是格式正确的java文件,文件的后缀是.jws。如果发布,可以直接把它放到发布的工程根目录下。它不能指定包名。如果引用其他类,只能其他类也不能指定包名。

二、Axis工具简单操作命令和基本概念

1显示帮助信息:java -Djava.ext.dirs=lib org.apache.axis.wsdl.WSDL2Java

生成客户端代码实例:前提是必须的在dos切换到axis的lib目录。然后执行这个命令。j java -Djava.ext.dirs=lib org.apache.axis.wsdl.WSDL2Java -a -H -d -s -t -S true -p com.qnuse.zj114.webservice http://134.96.71.58/QnInterface/HzGsyj.asmx?wsdl

2.WSDL2Java工具用于从WSDL文件生成客户端存根(stub)代码,服务端框架(skeleton)代码以及WSDL中的数据类型文件(生成与之对应的Java代码)。

3.server-config.wsdd记录了axis已发布的Web服务的描述信息。

二、Axis工具wsdl2java命令参数解释

1.    -N, --NStoPkg <argument>=<value>

mapping of namespace to package

2.    -a, --all

generate code for all elements, even unreferenced ones

3.    -p, --package <argument>

         override all namespace to package mappings, use this package

          name instead

4.    -h, --help

         print this message and exit

5.    -v, --verbose

         print informational messages

6.    -t, --testCase

      为web service发行junit测试用例类


四、 server-config.wsdd文件解释

它是AXIS的配置文件,所有发布的服务都会在里面描述。

如果还没有server-config.wsdd文件,可以先写一个发布描述文件,然后用axis来生成,以后需要发布新的服务,直接往里面添加即可。

比如有一个HelloWorld.class类,里面有sayHello(String msg)方法,想把它发布webservices,先写发布文件deploy.wsdd文件,即SOAP服务发布描述文件deploy.wsdd
http://xml.apache.org/axis/wsdd/" xmlns:java="
http://xml.apache.org/axis/wsdd/providers/java">

然后,进入dos窗口,执行下列命令:

java -cp %AXISCLASSPATH% org.apache.axis.client.AdminClient deploy.wsdd 即可生成server-config.wsdd文件。

如果想发布新的服务,也可以直接往server-config.wsdd里面添加service描述。

五、 查看发布的webservice

1.首先要查看工程的web.xml的配置情况,例如:zj114boss的web.xml中对axis的配置是:

    <servlet>

       <servlet-name>axis</servlet-name>     <servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class>

       <load-on-startup>5</load-on-startup>

    </servlet>

    <servlet-mapping>

       <servlet-name>axis</servlet-name>

       <url-pattern>/webservice/*</url-pattern>

    </servlet-mapping>

2.启动容器,或看测试环境。在IE上键入:http://134.96.71.27:8080/zj114boss-1.0/webservice 你将看到全部发布的service。

3.看详细的wsdl内容。例如:查看生产环境http://134.96.71.73/usboss/webservice/ssoService?wsdl

六、序列化与反序列化

序列化/反序列化器在英文中的对应翻译是Serializer/Deserializer,一个序列化器的功能是遵循一定的映射规则和编码风格,将一种类型的JAVA对象通过某种特定的机制,转换成为XML描述的形式;反序列化器的功能是序列化器所做工作的逆操作,两者相辅相成,成对出现。Axis中的序列化/反序列化器采用设计范式中的工厂模式,每一个Serializer唯一对应一个SerializerFactory;每一个Deserializer唯一对应一个DeserializerFactory。

Axis已经为开发者提供了丰富的序列化/反序列化器,对于java的基本数据类型,绝大部分常用的容器类(比如数组类型,Vector类型等)都提供了实现,特别是提供了对W3C的DOM对象(比如Document, Element等)和符合Bean规范的JAVA对象提供了功能完善的序列化/反序列化器,但对于一些特殊类型的对象,需要通过Web服务进行传递,我们不得不开发自己的序列化/反序列化器。

八、Axis相比Soap v2的优点

Axis是第三代Apache SOAP的实现,从2000年起,SOAP v2开发小组开始讨论如何让Axis更加灵活、可配置,以及能够处理SOAP和来自W3C的各种XML标准。通过不断地讨论和代码编写,Axis目前相比SOAP V2取得了如下成果:

速度提高。 Axis通过基于事件的SAX对XML文档进行处理,从而在速度和效率上比Apache SOAP有所提高。

灵活性提高。

稳定性提高。

提供面向组件的部署。

提供一个简洁的传输抽象框架。其核心引擎完全于传输方式独立。从而使基于何种协议传输的选择更加灵活。

支持WSDL。包括WSDL和客户端代码生成等。

九、性能

axis使用1.3版,xfire使用1.0版。xfire使用spring的servicesbean方式发布web服务。web services客户端使用delphi 7开发,分别对通过axis发布的web services及通过xfire发布的web services进行1万次连续调用(即一次获取wsdl后连续使用)。axis调用1万次内存占用48M,用时1分40秒 xfire调用1万次内存占用38M,用时1分05秒。使用axis2测试时发现通过axis2发布的web services 在delphi中可以导入,但是运行时会报错。

十、 开发和测试工具

开发工具

1.      采用axis的相关eclipse插件、或者其他形式的插件。例如:ObjectWeb Lomboz An Eclipse based IDE for J2EE Development

2.      采用axis代码本身工具(dos命令行或ant脚本)来开发。

测试webservice接口工具

1.      vb脚本来测试。这种方式操作比较方便。

微软公司的Soap Toolkit 开发工具包,这个工具包可以从微软公司的主页:http://download.microsoft.com/download/xml/soap/2.0/W98NT42KMe/EN-US/SoapToolkit20.exe

2.生成的*testCase.java文件来进行测试。

详细测试代码,参见测试webservice用例代码。

采用eclipse插件开发

通过这个ObjectWeb Lomboz工具来实现代码开发。这个是最简单的方式。效率非常高,但是对webservice一些基础知识的理解帮助不大。步骤如下:

1.建一个新的工程。

2.把wsdl文件放到工程中。

3.点击右键,新建一个webservice客户端或服务器端代码。可以选择axis、proxy两种方式来实现。