应用AXIS开始Web 服务之旅
本文介绍使用
AXIS
作为开发环境来体会
Web
服务的开发过程。
一.介绍
本文并不是想介绍 Web 服务的原理、系统架构等,我们假设您已经了解了关于 Web 服务的一些基本的概念、原理等知识。本文主要是针对那些已经了解 Web 服务概念,但是还没有亲身体会 Web 服务所带来令人欢欣鼓舞的特征的开发人员。在此我们认为你已经具备了 Java 、 XML 等基础知识,如果你还有其他开发环境的经验例如 VB 、 VC 那是再好不过的了。
本文并不是想介绍 Web 服务的原理、系统架构等,我们假设您已经了解了关于 Web 服务的一些基本的概念、原理等知识。本文主要是针对那些已经了解 Web 服务概念,但是还没有亲身体会 Web 服务所带来令人欢欣鼓舞的特征的开发人员。在此我们认为你已经具备了 Java 、 XML 等基础知识,如果你还有其他开发环境的经验例如 VB 、 VC 那是再好不过的了。
1.Web服务
虽然我们并不想详细讲述 Web 服务的体系结构,但是大概的介绍一下还是有必要的。 Web 服务是一种新型的 Web 应用程序。不同于其他 Web 应用程序,它是自适应、自我描述、模块化的应用程序,并可以跨越 Web 进行发布、定位以及调用。简单的 Web 服务可以提供例如天气预报或者航班信息的服务。一旦部署了 Web 服务,其他的应用程序就可以发现和调用所部署的服务。
虽然我们并不想详细讲述 Web 服务的体系结构,但是大概的介绍一下还是有必要的。 Web 服务是一种新型的 Web 应用程序。不同于其他 Web 应用程序,它是自适应、自我描述、模块化的应用程序,并可以跨越 Web 进行发布、定位以及调用。简单的 Web 服务可以提供例如天气预报或者航班信息的服务。一旦部署了 Web 服务,其他的应用程序就可以发现和调用所部署的服务。
2.AXIS项目
Axis 框架来自 Apache 开放源代码组织,它是基于 JAVA 语言的最新的 SOAP 规范( SOAP 1.2 )和 SOAP with Attachments 规范(来自 Apache Group )的开放源代码实现。有很多流行的开发工具都使用 AXIS 作为其实现支持 Web 服务的功能,例如 JBuilder 以及著名的 Eclipse J2EE 插件 Lomboz 。 AXIS 的最新版本是 1.1 ,可以从 http://ws.apache.org/axis/index.html 下载。下图是 AXIS 核心引擎的体系结构图:
Axis 框架来自 Apache 开放源代码组织,它是基于 JAVA 语言的最新的 SOAP 规范( SOAP 1.2 )和 SOAP with Attachments 规范(来自 Apache Group )的开放源代码实现。有很多流行的开发工具都使用 AXIS 作为其实现支持 Web 服务的功能,例如 JBuilder 以及著名的 Eclipse J2EE 插件 Lomboz 。 AXIS 的最新版本是 1.1 ,可以从 http://ws.apache.org/axis/index.html 下载。下图是 AXIS 核心引擎的体系结构图:
图
1
整个
AXIS
项目包括以下几个部分:
1.
消息流子系统
消息流子系统提供了灵活的消息传递框架,这个消息传递框架包括处理程序、链、序列化程序和反序列化程序。处理程序是一个处理请求、响应和故障流的对象。处理程序可被组合在一起成为链,而且可以使用一个灵活的部署描述符来配置这些处理程序的顺序。
消息流子系统提供了灵活的消息传递框架,这个消息传递框架包括处理程序、链、序列化程序和反序列化程序。处理程序是一个处理请求、响应和故障流的对象。处理程序可被组合在一起成为链,而且可以使用一个灵活的部署描述符来配置这些处理程序的顺序。
2.
传输框架子系统
提供了一个传输框架,这个传输框架可以帮助您创建自己的可插式传输发送器和传输侦听器。
提供了一个传输框架,这个传输框架可以帮助您创建自己的可插式传输发送器和传输侦听器。
3.
数据编码子系统
AXIS 完全按照 XML Schema 规范提供各种数据类型的自动序列化,并且提供功能扩展接口来使用您自己定制的序列化器和反序列化器。
AXIS 完全按照 XML Schema 规范提供各种数据类型的自动序列化,并且提供功能扩展接口来使用您自己定制的序列化器和反序列化器。
4.
其他
AXIS 完全支持 WSDL 以及日志记录、出错以及故障处理机制。它同时提供一些工具用来讲 WSDL 文档转换成客户端的调用框架以及根据类来产生 WSDL 定义文档。
AXIS 完全支持 WSDL 以及日志记录、出错以及故障处理机制。它同时提供一些工具用来讲 WSDL 文档转换成客户端的调用框架以及根据类来产生 WSDL 定义文档。
AXIS
目前版本支持的标准是:
W3C SOAP 1.1
和
1.2
;
WSDL 1.1
;
SAAJ 1.1
(
SUN
公司:
SOAP with Attachments API for Java
);
JAX-RPC
(
SUN
公司:
Java API for XML-Based RPC
)
1.0
。
除了前面介绍的
AXIS
外,本文中还将会用到
TOMCAT
,这里不再另行介绍。另外为了演示
Web
服务真正与开发环境无关以及
AXIS
产生的是标准的、符合规范的
Web
服务,我们还将用到微软公司的
SOAP TOOLKIT
以及微软的开发环境
VB
和
VC
来做为
Web
服务的客户端。
二. 环境搭建
由于 AXIS 本身是基于 JAVA 语言开发的项目,并且是以 Web 应用形式发布的,因此它运行时需要一个应用服务器作为支撑。为了方便我们这里选用的是 Tomcat 。由于 AXIS 本身需要用到处理 XML 信息的包,所以我们建议使用 JDK1.4 并安装 Tomcat 4.1.24 。下面是环境搭建步骤,读取根据自身情况进行安装。
由于 AXIS 本身是基于 JAVA 语言开发的项目,并且是以 Web 应用形式发布的,因此它运行时需要一个应用服务器作为支撑。为了方便我们这里选用的是 Tomcat 。由于 AXIS 本身需要用到处理 XML 信息的包,所以我们建议使用 JDK1.4 并安装 Tomcat 4.1.24 。下面是环境搭建步骤,读取根据自身情况进行安装。
1.
安装
JDK1.4.1
2.
安装
Tomcat 4.1.24
到
C:/Tomcat
并验证安装是否成功
3.
下载
AXIS
项目打包文件
axis-1_1.zip
解压缩后将目录中的
webapps
目录下的
axis
子目录拷贝到
C:/Tomcat/webapps
下。
4.
验证
AXIS
的安装:重新启动
Tomcat
服务器后打开浏览器输入网址
http://localhost:8080/axis
后应该出现如下图所示页面,点击链接
"Validate"
来验证
Axis
所需的几个
JAVA
包是否齐全。
图
2
点击超链接
Validate
后,
AXIS
会自动检查所需的每一个
JAVA
组件,这协组件分为:必需组件以及可选组件,必须保证所有必需组件都存在,如下图所示即为验证成功。
图
3
三. Web Service服务端开发
经过了前两步之后我们就可以开始 Web 服务之旅了!大多数人在学习一种编程语言的第一步都是从 Hello world 程序开始的,我们也不例外。我们将提供这样一个 Web 服务,通过给它传入姓名,服务返回:你好 [ 姓名 ] ,欢迎来到 Web 服务的世界。这就是我们的需求。我们将马上根据 AXIS 的要求完成我们的需求,你就会发现原来 Web 服务可以这么简单!
经过了前两步之后我们就可以开始 Web 服务之旅了!大多数人在学习一种编程语言的第一步都是从 Hello world 程序开始的,我们也不例外。我们将提供这样一个 Web 服务,通过给它传入姓名,服务返回:你好 [ 姓名 ] ,欢迎来到 Web 服务的世界。这就是我们的需求。我们将马上根据 AXIS 的要求完成我们的需求,你就会发现原来 Web 服务可以这么简单!
编写
JAVA
类
Hello.java
,内容如下:
|
仅此而已,无需编译,将该文件改名为
Hello.jws
并拷贝到
AXIS
应用目录
C:/Tomcat/webapps/axis
下。
|
点击页面上的链接查看该
Web
服务对应的
WSDL
信息如下所示(我们将在下一小节简单介绍
WSDL
)
|
到此我们已经完成了
hello
的
Web
服务了,那我们怎么告诉用户如何来使用该服务呢?我们只需要告诉用户我们的
Web
服务的
URL
地址:
http://localhost:8080/axis/Hello.jws?wsdl
就可以了!下一节我们将介绍如何通过这个地址来访问对应的
Web
服务。
四. Web Service客户端开发
在这一节中我们将使用三种不同的语言来访问刚刚创建的 Web 服务,分别是 JAVA 、 VB 、 VC 。为了使用 VB 和 VC 访问 Web 服务,我们需要安装微软公司的 Soap Toolkit 开发工具包,这个工具包可以从微软公司的主页
在这一节中我们将使用三种不同的语言来访问刚刚创建的 Web 服务,分别是 JAVA 、 VB 、 VC 。为了使用 VB 和 VC 访问 Web 服务,我们需要安装微软公司的 Soap Toolkit 开发工具包,这个工具包可以从微软公司的主页
下载,下载该软件包并使用默认方式安装即可。
在开始客户端开发之前有两个概念我们必须先粗略的介绍一下。
SOAP
:简单对象访问协议。这是一种在松散的、分布的环境中使用
XML
对等地交换结构化的和类型化的信息提供了一个简单且轻量级的机制,它是一个基于
XML
的协议。它包括四个部分:
SOAP
封装(
envelop
),封装定义了一个描述消息中的内容是什么,是谁发送的,谁应当接受并处理它以及如何处理它们的框架;
SOAP
编码规则(
encoding rules
),用于表示应用程序需要使用的数据类型的实例
; SOAP RPC
表示
(RPC representation)
,表示远程过程调用和应答的协定
;SOAP
绑定(
binding
),使用底层协议交换信息。
虽然这四个部分都作为
SOAP
的一部分,作为一个整体定义的,但他们在功能上是相交的、彼此独立的。特别的,信封和编码规则是被定义在不同的
XML
命名空间
(namespace)
中,这样使得定义更加简单。
SOAP
的主要设计目标是简明性和可扩展性。这就意味着有一些传统消息系统或分布式对象系统中的特性将不包含在
SOAP
的核心规范中。这些特性包括:分布式垃圾收集;批量消息传输
/
处理;对象引用;对象激活。
WSDL
:
Web Service
描述语言。使用了
WSDL
,我们就可以通过这种跨平台和跨语言的方法使
Web Service
代理的产生自动化。就像
COM
和
CORBA
的
IDL
文件,
WSDL
文件由客户和服务器约定。由于
WSDL
设计成可以绑定除
SOAP
以外的其他协议,这里我们主要关注
WSDL
在
HTTP
上和
SOAP
的关系。同样,由于
SOAP
目前主要用来调用远程的过程和函数,
WSDL
支持
SOAP
传输的文档规范。
WSDL
文档可以分为两部分。顶部分由抽象定义组成,而底部分则由具体描述组成。抽象部分以独立于平台和语言的方式定义
SOAP
消息,它们并不包含任何随机器或语言而变的元素。这就定义了一系列服务,截然不同的网站都可以实现。
1. JAVA客户端
使用 AXIS 的工具将使 Web 服务的访问和我们之前介绍的创建一个 Web 服务一样的简单。我们前面安装的 AXIS 环境中已经包含着这样的工具,它是一个 JAVA 类,类名为: org.apache.axis.wsdl.WSDL2Java 。打开命令行窗口,转到 AXIS 目录下的 WEB-INF 子目录。确保 Tomcat 服务已经处于启动状态,键入命令 :
使用 AXIS 的工具将使 Web 服务的访问和我们之前介绍的创建一个 Web 服务一样的简单。我们前面安装的 AXIS 环境中已经包含着这样的工具,它是一个 JAVA 类,类名为: org.apache.axis.wsdl.WSDL2Java 。打开命令行窗口,转到 AXIS 目录下的 WEB-INF 子目录。确保 Tomcat 服务已经处于启动状态,键入命令 :
|
该命令执行的结果是在当前所在目录下产生一个子目录
localhost/axis/Hello_jws
,该目录下有四个
JAVA
源文件,它们分别是:
Hello.java
定义了
Web
服务接口,此例中只有一个
hello
方法。
HelloService.java
定义了用于获取
Web
服务接口的方法。
HelloServiceLocator.java
接口
HelloService
的具体实现。
HelloSoapBindingStub.java Web
服务客户端桩,通过该类与服务器交互。
这四个
JAVA
类帮我们处理了大部分的逻辑,我们需要的仅仅是把这些类加到我们的项目然后创建一个我们自己的类来调用它们即可。为此我们新加一个类
Main.java
,为了方便,让这个类与刚产生的四个类都在同一个包下。内容如下:
|
使用以下命令进行编译:
|
如果编译没有问题的话执行该测试程序:
|
在
WSDL2Java
工具自动产生的几个类中,类
HelloServiceLocator
中保存这一些跟服务器相关的信息,例如
URL
地址等,当服务器的地址更改后但是服务并没有改动的时候直接修改该文件中的字符串定义,而无需重新生成这几个类。具体需要修改的内容,打开该文件便可一目了然。