2003 年 9 月
WebSphere SDK for Web Services(简称 WSDK)是一个工具箱,它侧重于编写基于
Java 的 Web 服务和创建 Web 服务客户机。WSDK
旨在作为一种简单而易于使用的途径,通过它来了解
Web 服务,了解如何编写 Web
服务以及如何部署和测试 Web 服务。对 WSDK
的学习会使您了解整个 WebSphere Application Server
运行时和 WebSphere Studio
提供的功能完整的应用程序开发者环境。本文讨论了如何使用
Java 和 .NET 工具来创建 Web 服务以及 Web
服务互操作性和 Web 服务互操作性组织(Web Services
Interoperability Organization,WS-I)活动。
WSDK
中有什么?
WSDK 的主要组成部分有:
- 一个运行时服务器,在该服务器中运行并测试
Web 服务和客户机应用程序。该服务器是 WebSphere
Application Server 的一个子集,能够运行与 Web
服务有关的 J2EE 组件。
该服务器还有一个 UDDI 服务器,用于发布和发现
Web 服务。
- 一系列命令行工具,这些工具处理众多与构建和运行
Web 服务有关的常见任务。
- 一系列划分了等级的样本应用程序,这些应用程序从最基本的开始,逐步深入到更加复杂的方面(如安全性),提供了有关如何编写
Web 服务和 Web 服务客户机的示例。
- 一组综合文档,涵盖了 WSDK
的各个方面,包含了学习 Web
服务概念的整个过程、如何使用 WSDK
工具和对样本应用程序的描述。
一般的开发人员工作站(运行 Windows
或 Linux)都应该能够运行 WSDK,因为 WSDK
对系统没有很苛刻的要求。WSDK 的下载大小大约是
120 MB,展开到磁盘后大约是 200 MB,其中包括 WSDK
所使用的 Java SDK。
WSDK
的设计考虑到了易用性。安装向导提供了以最少量的配置进行快速安装。同时提供了一些简单的命令行工具,来管理运行时服务器以及在该服务器上安装和控制应用程序。
从现有的
Java 组件构建 Web 服务
Web 服务的一个重要特征是,只用 WSDK
提供的工具就可以从现有的 Java 组件构建 Web
服务,而无须重新进行大量的编程。Java
组件可以是一个简单的 Java 类(称为 Bean),也可以是一段更复杂的代码,如无状态会话企业
Java Bean (EJB) 组件。
当代码作为 Web
服务运行时,它在运行时服务器内执行。这一点不仅适用于原来设计成应用程序服务器中运行的代码(如
EJB 组件),同样也适用于原来设计成独立运行的代码。WSDK
工具负责将代码打包成可以部署到服务器上的形式(EAR
文件),包括生成所有其它必需的文件,如部署描述符和
WSDL 文件。
WSDK
所包含的样本应用程序显示了如何使现有的 Java
组件作为 Web 服务公开。清单
1 中显示了一个最简单的样本,它实际上只是 Web
服务的 Hello
World 。以下是 Hello.java 类的代码,它位于
C:\\WSDK_v5\\apps\\Sample1\\src\\provider 目录中:
清单 1. Hello.java
package com.ibm.wsdk.Sample1;
public class Hello {
String msg="Hello";
public String getGreeting(String name) {
return msg+" "+name+"!";
}
}
|
上面这个类接收一个作为参数的 name
— 在 name 的前面加上 Hello,然后返回这个
name。
使用 Bean2WebService
工具可以将这个简单的 Java 类变成 Web
服务。Bean2WebService 创建一个包含原来的 Hello 类的
EAR 文件,另外还创建将该类部署为 Web
服务所必需的一组其它文件。该工具还将 EAR
文件部署到运行时服务器。所需要做的全部操作只是使用与
WSDK 一起提供的另一个命令来让该 Web
服务应用程序开始运行:
appserver startapp Sample1WebService
|
和大多数样本应用程序一样,清单
1
也包含一个已经编写好的客户机应用程序,它可以调用
Web
服务。十分方便的是,C:\\WSDK_v5\\apps\\Sample1\\classes\\requester
目录中以预先构建的形式提供了该客户机应用程序,不过作为指南,其中也提供了该客户机的源代码和构建命令。
与 WSDK
一起提供的其它样本程序涉及更高级的 Web
服务,包括从 EJB 组件构建的 Web
服务,以及在客户机和 Web 服务之间使用安全性的
Web 服务。WSDK
文档中涵盖了所有这些样本程序,同时还包含了如何运行这些样本程序以及如何从头构建这些样本程序。
从 WSDL
定义创建 Web 服务
至此,我们已经讨论了如何从一些现有的
Java 代码创建 Web 服务。您也可以以另一种方式创建
Web 服务 — 从保存在 WSDL 文件中的 Web
服务接口的定义创建 Web 服务。当 Web
服务的定义已经提前由(例如)供应链中的某个业务伙伴制定好了,或者当需要用于另一家企业所编写的
Web 服务的客户机时,第二种 Web
服务构建方法就显得十分重要。
WSDL 文件定义了 Web 服务接口。WSDL 是 Web
服务描述语言(Web Services Description Language)的缩写,它是由
w3c.org 定义的一个标准。WSDL 是以 XML
格式保存的一个或多个 Web
服务的定义。按照操作描述每个服务,该操作作用于一个输入消息,然后产生一个输出消息。这些消息可以很简单(例如,清单
1
中的一个文本字符串),也可以更复杂(例如,表示一个订单的文档)。操作和消息的格式以及
Web 服务在 Web 上的位置(类似于
http://localhost:6080/Sample1WebService/services/Sample1 这样的
URL)都定义在 WSDL 文件中。
在从 Java 代码创建 Web
服务时,Bean2WebService 或 EJB2WebService 工具生成 WSDL
文件。清单
2 显示了清单
1 的 WSDL 文件,这个 WSDL
文件定义了服务的位置、可能的操作以及输入和输出参数:
清单 2. Hello.java 的 WSDL
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions targetNamespace="http://Sample1.wsdk.ibm.com" xmlns=
"http://schemas.xmlsoap.org/wsdl/"
xmlns:apachesoap="http://xml.apache.org/xml-soap"
xmlns:impl="http://Sample1.wsdk.ibm.com" xmlns:intf=
"http://Sample1.wsdk.ibm.com"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<wsdl:types>
<schema targetNamespace="http://Sample1.wsdk.ibm.com" xmlns=
"http://www.w3.org/2001/XMLSchema">
<element name="getGreeting">
<complexType>
<sequence>
<element name="in0" type="xsd:string"/>
</sequence>
</complexType>
</element>
<element name="getGreetingResponse">
<complexType>
<sequence>
<element name="getGreetingReturn" type="xsd:string"/>
</sequence>
</complexType>
</element>
</schema>
</wsdl:types>
<wsdl:message name="getGreetingRequest">
<wsdl:part element="intf:getGreeting" name="parameters"/>
</wsdl:message>
<wsdl:message name="getGreetingResponse">
<wsdl:part element="intf:getGreetingResponse" name="parameters"/>
</wsdl:message>
<wsdl:portType name="Sample1Interface">
<wsdl:operation name="getGreeting">
<wsdl:input message="intf:getGreetingRequest" name=
"getGreetingRequest"/>
<wsdl:output message="intf:getGreetingResponse" name=
"getGreetingResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="Sample1SoapBinding" type="intf:Sample1Interface">
<wsdlsoap:binding style="document" transport=
"http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="getGreeting">
<wsdlsoap:operation soapAction=""/>
<wsdl:input name="getGreetingRequest">
<wsdlsoap:body use="literal"/>
</wsdl:input>
<wsdl:output name="getGreetingResponse">
<wsdlsoap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="Sample1InterfaceService">
<wsdl:port binding="intf:Sample1SoapBinding" name="Sample1">
<wsdlsoap:address location=
"http://localhost:6080/Sample1WebService/services/Sample1"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
|
WSDK
包含一个工具,该工具可以帮助从这种类型的 WSDL
文件构建 Web 服务或 Web 服务客户机。这个工具名为
WSDL2WebService。
分两步使用 WSDL2WebService:
- 用 -createService 选项使用
WSDL2WebService,该工具读取 WSDL 文件,创建 Web
服务的框架实现以及(可选地)创建 Web
服务客户机作为一系列 Java
文件。该框架提供了将功能作为 Web
服务公开所必需的所有接口代码。
在创建完框架实现文件之后,将实际实现服务的
Java 代码添加到框架文件中 —
这是一个由程序员提供业务逻辑的任务。
- 准备好 Web 服务实现以后,再次使用
WSDL2WebService,但这次使用 -createEar 选项。这会将
Web 服务代码打包成一个 EAR 文件,该 EAR
文件随后被部署到运行时服务器。
WSDK 中的样本程序 6 和样本程序 7
显示了以这种方式从 WSDL 定义构建 Web 服务的过程。
Web
服务互操作性和 WS-I
Web
服务的一个吸引人之处在于它对互操作性的承诺 —
具有从一个系统调用另一个系统上 Web
服务的潜力,而不用关心实现 Web
服务所使用的技术。Web
服务与采用哪种编程语言无关,与操作系统无关,而且还与运行
Web 服务所使用的应用程序服务器的供应商无关。
Web
服务互操作性在很大程度上是可行的,因为 Web
服务是根据客户机和 Web
服务提供者之间传输的消息定义的,而不是根据编程接口定义的。消息是用
XML 定义的 — XML
是一种数据格式,本身就与编程语言和操作系统这些考虑事项无关。
为了确保在不同平台上由不同供应商提供的
Web 服务实现之间的 Web 服务互操作性,Web
服务互操作性组织(WS-I.org)应运而生。WS-I
是一个开放性的业界组织,它得到了与 Web
服务有关的各大公司的支持。WS-I 并不定义标准 —
相反,WS-I
定义了一些概要文件,这些概要文件定义了应该如何使用各
Web 服务标准(如 WSDL、 SOAP 和 UDDI)以保证互操作性。
WS-I 正在完成基本概要文件 1.0(Basic
Profile 1.0)— 处理标准 Web
服务的第一个概要文件。在撰写本文时(2003 年 5
月),基本概要文件 1.0(Basic Profile
1.0)还处于委员会审批(Board
Approval)的草案阶段,预计会在几个月内会出版正式的概要文件。
WSDK V5.0.1 对基本概要文件 1.0(Basic
Profile 1.0)的草案版本提供了支持。WSDK
工具可以生成一致的 Web
服务,所编写的样本应用程序也符合草案基本概要文件
1.0。这能够帮助确保与其它相符合的 Web
服务实现之间的互操作性,这是一个重要且有价值的目标。
为 WebSphere
Web 服务构建 Microsoft .NET 客户机
作为互操作性的一个实际示例,WSDK
V5.0.1 已经构建了一些样本 Web 服务,用 Microsoft .NET
工具构建的运行在 Windows 上的客户机可以使用这些
Web 服务。之所以选择让 Microsoft .NET
客户机调用运行在 WebSphere 服务器中的 Web
服务这一组合,是因为这很有可能是许多安装中常见的配置。
WSDK 文档包含使用 Visual Basic .NET
工具构建 Microsoft .NET
客户机的指南。里面一步步地讲述了清单
1 Web
服务客户机的创建过程,包括图形界面以及用于调用
Web 服务和返回结果的底层代码。
您可以为 WSDK 中更复杂的 Web
服务样本应用程序构建类似的 .NET
客户机应用程序。
下一步
IBM 网站上提供了 WebSphere SDK for
WebServices V5.0.1 的免费下载(请参阅参考资料以获取链接)。
可以使用 WSDK 来开发和测试 Web
服务,它是学习所有有关 Web
服务知识的优秀工具箱,但其目的并不是打算用于任何类型的生产。如果想将您的
Web 服务用于生产,那么就需要在 WebSphere Application
Server 的生产版本上运行这些服务。更多关于 WebSphere
Application Server 的信息,请参阅参考资料。
WSDK 是一个侧重于 Web
服务的工具箱,它基于命令行工具。对于涉及全部开发活动的开发环境,包括带有大量向导和代码调试工具的图形化开发环境,请尝试使用
WebSphere Studio — 特别是 WebSphere Studio Application
Developer。
参考资料
来源:中国系统分析员
|