内容


使用 Rational Application Developer V6.0 开发、测试并部署 Web 服务

引言

本文讨论了包含在 IBM® Rational® Application Developer V6.0 Web 服务向导中与 Web 服务相关的测试工具。这些概念可以在极大程度上应用于通过 WebSphere® Studio Application Developer 来进行的开发。为了让您能够对如何高效地使用测试工具有一个更清晰的了解,在文中加入了对 Web 服务技术和标准以及这些技术和标准如何合并到 Web 服务向导中的说明。

本文的第一部分涉及了关于用 Web 服务向导进行 Web 服务开发的内容。该向导依照了许多关于 Web 服务开发的行业标准。在文章中有关于服务器和运行时扩展以及由 Rational Application Developer V6.0 装载的服务器和运行时的全面讨论。

Web 服务向导有两个关键作用: 1) Web 服务开发, 和 2) 生成客户程序。由 Web 服务向导生成的构件,根据服务器和所选的运行时不同,可能会不同。最终结果都是一个部署在服务器上的 Web 服务。在 Web 服务向导中有许多关键方案。其中一个是由 Java bean 生成 Web 服务的功能。这被称为 自底向上方案。另一种是由 Web 服务描述语言 (Web Service Description Language,WSDL —— 参见 参考资料) 文件生成 Web 服务的功能。这被认为是 自顶向下或者 框架的方案。如果供应商部署了 Web 服务并且您要生成客户程序来使用 Web 服务,那么 Web 服务客户程序向导将从 WSDL 文件开始创建。

Web 服务向导有许多不同方面的可用的测试工具。在开发人员将 Web 服务部署之后,就会生成一张含有测试工具的直接用 WSDL 文件测试服务的测试页面。Web 服务向导提供了一个充分整合的 WSDL 测试客户程序(通常所说的 Web 服务浏览器)。

如先前所讨论的,向导还可以为已部署的 Web 服务创建客户程序。客户程序包含了许多文件,这些文件可以帮助将 XML 信息经开发人员所选的运行时发送到已部署的 Web 服务上。为了使操作对客户程序开发人员更简便,Web 服务上的操作被映射到服务终端接口 (Service Endpoint Interface,SEI)中的 Java 方法上。Java 代理 (Proxy) 是一个可以调用 SEI 中方法的文件。Web 服务向导包含了许多建立在 Java 代理上的客户程序。Generated Sample Test Client (GSTC) 和 Universal Test Client (UTC) 是两个使用已生成的 Java 代理的测试客户程序。GSTC 被设计用来提供给用户一个基于 Web 的测试客户程序的实例。UTC 是一个可以处理许多类型(包括聚集(collection)、映射(map)和数组(array))的基于 Web 的动态引擎。GSTC 不能处理更复杂的能调用开发人员想要的数组、聚集和异常的 Java 方法。但可以将 GSTC 改造成能够处理在非向导生成的开发人员自创的 Web 服务中的那些类型。

本文提供了一个使用 Mortgage Calculator 实例的教程,描述如何修改生成的 GSTC 使之更好的适应 Web 服务。

Web 服务开发概述

图 1 所示,Web 服务一般都是按典型的客户机/服务器的体系结构建立起来的。运行时的两个部分被认为是 RequestorProvider

图 1: Web 服务概述
Web 服务概述
Web 服务概述

Web 服务向导为 Requestor 和 Provider 生成文件。Web 服务向导还支持大量服务器和运行时。 图 2 显示了一个由 Rational Application Developer 装载的运行时列表。

您必须决定选用哪种类型的服务器来运行(Web)服务。该服务器是用来承载运行时的引擎。IBM 以它自己的产品服务器,WebSphere Application Server 在这个领域取得成功。现在一个完全整合的 WebSphere Application Server V6.0 副本装载到了 Rational Application Developer 之上。同样被装载的还有以前的两个版本:WebSphere Application Server versions 5.0 和 5.1。Rational Application Developer Web services 已经在 Apache Tomcat 服务器上得到广泛试验。Apache Tomcat 服务器是一个开放源代码服务器,没有 WebSphere Application Server 产品服务器提供的那么全面的服务功能。推荐您使用 Websphere,因为它具有强大的功能。

Figure 2: Rational Application Developer 运行时和服务器
Rational Application Developer 运行时和服务器

向导生成了三套构件(参见 图 3): 1) Web 服务 Requestor 端构件,包括代理 Bean, 2) WSDL 文件,和 3) Web 服务 Provider 端文件。 Web 服务可以基于许多不同的类型构件包括 Java bean、Enterprise Java Bean (EJB)组建、DADX 文档等等。

图 3:Web 服务生成的构件
Web 服务生成的构件
Web 服务生成的构件

您可以从向导的不同方面着手,用不同的文件类型创建 Web 服务。一种方式是用 Java Bean。Web 服务会生成 Requestor 端文件,包括代理 bean、WSDL 文件、和 Provider 端文件。这种方式被认为是 自底向上 方案,如 图 4 所示。

Figure 4: 自底向上 Web 服务方案
自底向上 Web 服务方案
自底向上 Web 服务方案

您也可以由 WSDL 文件开始并生成 Requestor 端构件和 Provider 构件,其中包含拥有 WSDL 操作的框架 bean。左边的实现部分等待填充。这被认为是 框架 或者 自顶向下 方案。您可以参见 图 5

图 5: 自顶向下方案
自顶向下方案

在 Rational Application Developer 环境中开发 Web 服务,如您所见,是一件平常事。 虽然有许多选择、选项和整合点,但是通过在 Web 服务向导的第一页上点击 finish 按钮就可以完成 Web 服务的开发。在这种情况下,向导会采用大量缺省值并使用您已经确定过的首选项。

Web 服务部署

当部署 Web 服务时,您所选的运行时和服务器会影响到选择的 J2EE 规范水平,以及生成的文件。WebSphere Application Server V6.0 支持 J2EE 1.4 规范 (参见 参考资料)。 对于 WebSphere Application Server 也有部署到 EAR 文件的 Web 项目的概念。 关于 J2EE 的 Web 服务信息保存在名为 webservices.xml 的文件中。要想了解用 JSR-109 如何创建更互用的 Web 服务,推荐 “用JSR-109构造可互操作的Web服务” 这篇文章(参见 参考资料)。

图 6 中您会见到一个包含在名为 webprojectEAR 的 EAR 中的名为 webproject 的 Web 项目。在包 mortgage.calc 中有五个文件:

图 6: 自底向上方案中的初始文件
自底向上方案中的初始文件
图 7: 已生成的在自底向上方案之后的服务器端文件
已生成的在自底向上方案之后的服务器端文件
已生成的在自底向上方案之后的服务器端文件

图 7 显示了在 Web 服务向导自底向上方案在 MortgageCalculator.java 文件上执行后的同一文件夹。在这种情况下选择 WebSphere 运行时 WebSphere Application Server V6.0。如您所见,生成了包括反序列化(deserializer)、序列化(serializer) 和 helper 文件在内的许多文件类型。这些文件用于将输入的 XML 信息转换成 Java 语言并将输出的 Java 语言转换为 XML。在 Web 服务中还有一个拥有所有操作的 SEI 文件。客户程序代理就是用该文件生成的。 在 Web Content 目录下生成 WSDL 文件。该文件包含了有关刚被部署到服务器上的 Web 服务的信息。WSDL 测试客户程序使用 WSDL 文件对服务直接进行测试。Rational Application Developer 提供了可以用于测试服务的 Web 服务浏览器。

图 8:将服务部署到 EAR 上并将 EAR 部署到服务器上
将服务部署到 EAR 上并将 EAR 部署到服务器上
将服务部署到 EAR 上并将 EAR 部署到服务器上

查看 图 8,您会见到在 Web 服务开发过程中 Web 服务向导中发生了什么。大量文件生成以帮助序列化和反序列化这些进出服务的信息。信息同样被加入到 webservices.xml、web.xml 和 x_mapping.xml 文件中。这些信息描述了服务的部署。这些依据的是 J2EE 1.4 标准。 至此所有关于 Web 服务的信息都已部署到了 EAR 上。然后将 EAR 加入到 WebSphere Application Server 中。

客户程序的生成

要生成一个客户程序,选择 Web 服务向导第一页上标明 generate proxy 的标签旁边的复选框。另一种生成客户程序的途径是用服务中的 WSDL 开始创建。这被认作是客户程序方案(参见 图 9)。在这种情况下假设服务已经被部署了。Web 服务向导创建了一个名为 webprojectClient 的 Web 项目和一个新的包含该项目的 EAR 文件。在 图 10您会见到所有的为客户程序生成的文件。这里也有序列化、反序列化和 helper 类。测试工具关注的关键文件是代理(proxy)文件,即此例中是 AddressBookProxy。

图 9: 客户程序方案
客户程序方案
图 10: 生成后的客户程序文件夹
生成后的客户程序文件夹
生成后的客户程序文件夹

SEI 包含的方法与 WSDL 文件中的等价,并且 proxy 类 实现了 SEI。为了测试 Web 服务,需要做的是调用代理中包含的方法。当然需要为每个方法加入具体的输入参数并处理结果。您可以设计自己的客户程序或者依赖 Rational Application Developer 提供的两个测试客户程序中的一个。这两个测试客户程序是 Generated Sample Test Client(GSTC)和 Universal Test Client(UTC)。

Web 服务测试

Rational Application Developer Web 服务向导中包含了广泛的 Web 服务功能。在使用 Web 服务向导创建 Web 服务的过程中,有两个可以进行测试的阶段:

  • 在最初创建完服务并将服务部署到 服务测试页上面之后。
  • 如果用户选择了生成客户程序,那么就等到在 客户程序测试页面上创建了客户程序之后。

如果查看 图 11 您会见到两种不同的测试 Web 服务的方法。这些方法对应于 Web 服务向导中的不同测试页面。对于第一种测试方法,可以直接使用 WSDL 中的信息。客户程序要获得服务的位置并形成正确的 XML 信息发回到 Web 服务。Web 服务浏览器使用这种方法来测试 Web 服务。该选项会在用向导创建 Web 服务之后立即出现。通常使用这种方法来确保 Web 服务像设计中一样工作(在生成客户程序之前)。

图 11: Web 测试应用程序概述
Web 测试应用程序概述
Web 测试应用程序概述

另一种测试 Web 服务的方法是生成包含 Java 代理的 Requestor 文件并用 Java 客户程序调用 Java 代理中的方法。要记住向导生成的 Requestor 文件是基于 WSDL 的。 像其他服务测试页一样,客户程序测试页也有扩展点,这些会提供将测试客户程序包含到向导中的功能。这个实例提供了两个 Java 测试应用程序:GSTC 和 UTC。 这两个测试客户程序都将复杂 bean 作为参数处理。复杂 bean 中有除基本类型和字符串的其他类型。

GSTC 由四个基于代理中所包含的方法的 Java Server Page (JSP) 组件组成。对于用户来说,GTSC 就是一个有关如何设计基于 Web 的客户程序的指南。GTSC 使您键入输入参数信息并调用操作。因为很容易使用,所以在做简单测试时,它经常是受欢迎的选择。

UTC 同样是一个基于 Web 的测试方案。它动态地加载代理中的 Java 操作并提供调用操作的功能。UTC 能够处理大多数复杂类型且是复杂测试的最好选择。

Java 测试客户程序

当在 Web 服务向导中生成 Requestor 时,有大量文件自动生成.这些文件的生成使得访问 Web 服务变得很容易.现在可以在一个 Java 文件上直接 build 您的客户应用程序.顶层文件称为代理文件.在 Rational Application Developer 环境中,该文件被创建到客户应用程序项目中。用服务来命名代理并将其放置于客户端的文件夹中(包(文件夹)名是根据 WSDL 名称空间而定)。

Rational Java 测试客户程序客户端

在客户程序生成之后,您可能想要建立自己的符合特定需要的 Java 客户程序(基于实例提供的代理)。这需要花费时间,并且您可能想要测试已生成的客户程序以确保其能像设计中一样工作。Rational 提供了 GSTC 和 UTC 来实现该目标。二者都有优势和劣势,这些将在本文最后进行讨论。根据要做的内容,您可以选择其中一种。

那么 Java 测试客户程序是如何工作的呢?答案很简单。Java 测试客户程序的主要目的是在运行时调用 Java 代理上的方法。查看 图 12 您会看到在代理中生成了两个方法。您会发觉在 SEI 文件中的这些方法和在端口部件下的 WSDL 文件中的这些方法是不同的。这两种方法存在于最初自底向上方案中的 Java 类中。

图 12:MortgageCalculatorProxy (代理 bean)类中的方法
MortgageCalculatorProxy (代理 bean)类中的方法
MortgageCalculatorProxy (代理 bean)类中的方法
图 13: 最初的 MortgageCalculator (服务 bean)类中的方法
最初的 MortgageCalculator (服务 bean)类中的方法
最初的 MortgageCalculator (服务 bean)类中的方法

如果您建立自己的客户程序,就要有一个用户接口,或者决定要一个直接调用这些方法的自动系统。出于测试的目的,假设您要输入信息并手动调用方法。

图 14: 用 Java 测试客户程序在运行时测试基于类的 Java Web 服务
用 Java 测试客户程序在运行时测试基于类的 Java Web 服务
用 Java 测试客户程序在运行时测试基于类的 Java Web 服务

有效地使用 Java 测试客户程序

以下是一些单凭经验的方法,这些方法可以帮助您创建与 Java 测试客户程序友好的 Web 服务。在极大程度上,顶层的服务 bean 可以有一些不符合 bean 的规范格式的方法 (参见 参考资料)。建议所有类型结构都依照 bean 的规范。

Generated Sample Test Client (GSTC)

GSTC 是一个基于 Web 的关于如何利用 JSP 页面创建客户程序来调用服务的示例。实际上 GSTC 只对 Web 服务进行了一点点测试,因为它的接口很简单,但是它的目的是提供一个用客户端文件建立基于 Web 的客户程序的着手点。

GSTC 由四个 JSP 页面组成 (参见 参考资料)。JSP 技术允许 HTML 与 Java 代码混合存在。JSP 需要寄放在 Web 服务器上。 图 15 显示了一个 GSTC JSP 页面如何工作的概述。服务器通过 JSP 页面读取(数据)并生成一张用户在浏览器中见到的 HTML 页面。用户选择方法,输入与服务相关的数据并提交给 Web 服务。 服务器把数据传到 JSP 页面上,JSP 页面会处理数据并向 Java 代理发送请求。Java 代理将这些信息通过 webservice 运行时发送给真正的 Web 服务。

图 15: GSTC JSP 页面概述
Generated Sample Test Client JSP 页面概述
Generated Sample Test Client JSP 页面概述

自定义 GSTC

在 Web 服务向导中建立的客户程序实例处理了许多在 Web 服务中常用的类型,但是对于某些类型,特别是在处理某些如输入(input)的类型时,示例没有为其生成代码。一些普通的例子如数组、聚集和映射。可能还要确定某些未处理的异常。

Mortgage Calculator 实例

抵押计算器是一个实例,任何考虑过买房的人都会对它很熟悉。用户输入所有的财务信息并得到一个用户可以负担的金额数量。实例中的抵押计算器接收月收入、账单、租金、百分比例和抵押期限。如您在 图 16 中所见,数组表示 income 和 bills。为贴近事实,要有多于一笔的收入和多于一张的账单。

图 16:MortgageInfo bean
MortgageInfo bean
MortgageInfo bean

如果查看 图 16 中的代码,您会看到这个 bean 符合 bean 的规范。每个属性都是由小写字母组成,并且根据 bean 的规范,所有属性都有获取方法 (getter)和 设置方法(setter)。该类在极大程度上延续了 Java 测试客户程序中最好的实现部分。然而,数组导致了 GSTC 出现问题。您可以自定义 GSTC 来调整这一点,如我待会要展示的一样。

图 17 中显示了一个做了所有工作的类并且是真正的 Web 服务类。MortgageCalculator 有两个方法分别称为 calculateMortageMortageInfo,如 图 15 中看到的。calculateMortgage 有一个输入参数。Calculate 有两个 double 型的输入参数。只有在方法中的参数需要遵照 bean 规范。因此,calculateMortgage 方法得到从 MortgageInfo 类收集来的信息并计算用户每月所能负担的金额。当抵押期限大于二十五年时,程序还会抛出 TermException 异常。

图 17:MortgageCalculator 类
MortgageCalculator 类
MortgageCalculator 类

因为我在一个 Java 类中设计了这个 Web 服务,所以我将说明如何用自底向上方案创建这个 Web 服务。这就意味着您将创建 Web 服务的服务器端构件、WSDL 文件和 Web 服务的客户端构件。代理类是客户程序的一部分,并且 GSTC 将会调用该类来存取服务。

现在创建 MortgageCalculator Web 服务,并且您将在操作中详细了解 Web 服务向导。首先,通过选择 File > New > Other > Web > Dynamic web project 在 Web 项目中创建 Mortgage 类。

在 Java Source 目录下,通过选择 File > New > Other > Java > Class 来新建 Java 类,或者,如果您已经拥有这些类,就通过选择 File > Import 将这些类导入。

一旦完成了这些步骤,这些类就应当出现在 Web 项目中,在 Java Source 文件夹里。如 图 18 所示。下一个步骤是选择 MortgageCalculator Java 文件,因为这是服务类。选择 File > New > Other > Web services

图 18: Java 服务类
Java 服务类
Java 服务类

查看 图 19 您会看到七个 Web 服务选项是可用的。 必须选择 Unit Test UDDI 项以发现新的 Web 服务。 Web Service Client 项允许您创建客户端构件(假设已经部署了 Web 服务)。在本例中用到的选项, Web Service,创建并部署服务,并且提供选项来创建客户程序并部署 GSTC。

图 19:Web 服务向导入口
Web 服务向导入口
Web 服务向导入口

点击 Next 按钮,您会见到 Web 服务页面,如 图 20 所示。确保选取了 Generate a proxyTest the Web service 项。并且选择 Overwrite files without warning项。 如果确信在 Web 服务首选项中是 GSTC 默认的 Web 服务测试客户程序,就点击 Finish 按钮。 如果不确信,则点击 Next 直到您达到了客户程序测试页并从测试工具下拉框中选择 Web Service JSP page,如 图 21 所示。

图 20: Web 服务页面
Web 服务页面
Web 服务页面
图 21: Web 服务客户程序测试页
Web 服务客户程序测试页
Web 服务客户程序测试页

在点击 Finish 之后,应该出现一个通知该示例不支持数组类型的警告。在 图 22可以见到该错误。特别是,GSTC 不支持数组类型的输入。

图 22: 警告:GSTC 不支持 double[]
警告:GSTC 不支持 double[]
警告:GSTC 不支持 double[]

这个通知表明在生成 GSTC 时会排除数组类型的属性。如果查看 MortgageInfo 中的代码(在 图 16 中)会看到两个属性:income 和 bills。这两个导致 GSTC 出现问题的属性都是 double 型数组。因为 income 和 bills 是计算中用到的最必要的部分,所以不能使用数组是很糟糕的。幸运的是有办法解决,您可以自定义 JSP 页来适应您的需求。点击警告对话框上的 OK 按钮,然后 MortgageCalculator GSTC 将生成。

图 23: GSTC MortgageCalculator 连接到 MortgageCalculator Web 服务上
GSTC MortgageCalculator 连接到 MortgageCalculator Web 服务上
GSTC MortgageCalculator 连接到 MortgageCalculator Web 服务上

查看 图 23 您初次见到运行中的 MortgageCalculator。GSTC 有三个窗格;方法在左边、输入在右边并且结果在下面。四个由 Web 服务向导生成的 JSP 页面控制着这三个区域。这些文件生成并放在 WebContent 文件夹中(此文件夹在 Web 服务向导创建的客户程序项目中)。文件被置于名为 sampleMortgageCalculatorProxy 的文件夹中。

图 24:将 GSTC 文件创建到新的客户程序项目的 WebContent 目录下
将 GSTC 文件创建到新的客户程序项目的 WebContent 目录下
将 GSTC 文件创建到新的客户程序项目的 WebContent 目录下

MortgageCalculatorProxy 是由 Web 服务向导生成的客户端 Java 文件,并且 GSTC 用这个文件来生成自己。可以在 图 24 中看到这个新的客户程序项目和创建于 WebContent/sampleMortgageCalculatorProxy 路径下的四个新的 JSP 文件。 GSTC 中的 calculateMortgage 方法还不能运行,因为 GSTC 不能处理 MortgageInfo 中的数组。第二个 calculate 方法得到两个 double 型数值,把他们相加,并返回合并后的 double 型结果。下 图 25 显示了在选择了 calculate 方法之后的输入窗格。然后在输入表单中键入两个值:10.2 和 15.5,并点击 Invoke。在用 15.7 进行请求之后,结果窗格便显示出从服务返回的值。

图 25:calculate 方法的输入
calculate 方法的输入
calculate 方法的输入

图 26 中可以看到当选择 calculateMortgage 方法时发生了什么。回忆在 图 16 中 MortgageInfo bean 有 5 个属性。 可是输入窗格只显示出三个输入框。GSTC 除去了这些属性,因为它不能处理数组。两个被除去的属性是 bills 和 income。您可以改变 JSP 页来为这两个数组属性获取输入。

图 26: calculateMortgage 方法的输入
calculateMortgage 方法的输入
calculateMortgage 方法的输入

图 27 是 Input.jsp。 用 JSP 页面源码编辑器打开您自己的 Input.jsp 并且您会见到相似的内容。第 97 行所显示的方法出现在 case 25 中。这是一个列举每种方法的庞大 switch 语句中的一部分,这些内容待会就变得很重要。如您所见,在 104 行有个名为 mortgageInfo 的标题,还有三个其它的带有文本输入的标题。这是标准的 HTML,非常容易使用。加入另两个输入,income 和 bills。您需要提供给用户添加多于一项内容的能力,因此,为每一个属性(income 和 bills)添加一些文本框。

图 27:调整之前的 calculateMortgage 方法的输入
调整之前的 calculateMortgage 方法的输入
调整之前的 calculateMortgage 方法的输入

按照您的意愿添加多少 bill 和 income 都行。我打算加入两个 income 和三个 bill 文本框。您可以看到下 图 28 中的附加内容;新的代码从 106 行开始。

Figure 28: Input.jsp 控制输入信息
Input.jsp 控制输入信息
Input.jsp 控制输入信息

我还为原来的三个输入添加了额外的标签以改进 GSTC 的外观,如 图 29 137 行。

图 29:添加其它标签到 inputs.jsp 中
添加其它标签到 inputs.jsp 中
添加其它标签到 inputs.jsp 中

现在所有您想要在新输入窗格中见到的信息都已添加到 input.jsp 中。您需要重新启动服务器中项目。为了进行这些操作您需要确保服务器窗口是激活的。要激活服务器窗口,选择 Window > Show view > Other > Server > Servers。现在选择应用程序服务器,点击右键,并选择 Restart project > webprojectClientEAR

图 30:重新启动服务器
重新启动服务器
重新启动服务器

为了解服务器中的改变,刷新浏览器并选择方法窗格中的 calculateMortgage 方法。输入窗格将会如 图 31 中所示。

图 31:重启服务器后的输入窗格
重启服务器后的输入窗格
重启服务器后的输入窗格

最后一步是通过添加代码改变 Result.jsp 文件以适应后来添加的新输入。下 图 32 是在添加代码之前 Result.jsp 的屏幕快照。

图 32:result.jsp 的图象 —— 添加新代码到 case 25 的位置
result.jsp 的图象 —— 添加新代码到 case 25 的位置
result.jsp 的图象 —— 添加新代码到 case 25 的位置

图 27 中 Input.jsp 被 switch 语句分开,同时对应 calculateMortgage 方法的是 case 25。为确保您的代码是在 result.jsp 中的正确位置上,代码必须添加到与 input.jsp 中相同的 case 处——本例中是 case 25。 如您所见 图 32 中 Result.jsp 内有与您所熟悉的在 Input.jsp 中见到过的项。 在 result.jsp 中,使用 getParameter 方法来检索用户输入的抵押期限、百分比和租金。这些出现在 79、81 和 83 行上。在 86 行 useBean 命令创建了一个新的 MortgageInfo 实例。通过 88、89 和 90 行上的设置方法,用从输入页面收集来的信息设置 MortgageInfo bean。接下来在 91 行上,通过 MortgageInfo bean 调用了一个方法。方法返回一个 double 型数值,并显示在浏览器中。

要连接新的输入参数,您需要添加代码从输入页中获取参数值。添加代码以创建数组并向数组中添加值。最后,设置 MortageInfo bean 中的新数组,用名为 mortgage1calc1MortgageInfo_1id 的 id 表示.

图 33:result.jsp 中的新代码
result.jsp 中的新代码
result.jsp 中的新代码

图 33 中可以见到被添加到 result.jsp 中的新代码。新数组、bills 和 income 被放置在 Result.jsp 中 79 到 90 行之间。然后这些数组将在 MortgageInfo bean 的 101 和 102 行被设置。现在准备好对 MortgageCalculator 进行测试。 那么您需要重启服务器并刷新浏览器。

图 34 显示了抵押计算器的完整输入表单。点击 Invoke 并检查结果窗格中的结果。记住您可以改变所有这些标题,所以如果您相信要为用户提供更多说明,尽一切办法将其放上去。期望在结果窗格中显示出一个表示月偿还金额的 int 型数据。一个更实用的实例会返回一个提供月偿还金额和贷款总数量的 bean。查看 图 35 能看到该家庭每月能负担得总金额是 1400 美元。 这些是一大笔费用,根据惯例将会改变以上的计算(方案)。

图 34: 已填完的 MortgageCalculator 表单
已填完的 MortgageCalculator 表单
已填完的 MortgageCalculator 表单
图 35: 根据图 34 中的输入数据抵押贷款计算器计算出的结果
根据图 34 中的输入数据抵押贷款计算器计算出的结果

异常处理

为了使抵押计算器具有友好的用户界面,我将在最初的 MortgageCalculator 类中加入异常(处理)。当贷款期限超过 25 年时则抛出 TermException 异常。这只是一种处理过程中的限制。还有更多的限制,例如不出现负数或百分比不大于 15 的限制。不过设计者解决了此问题。另一个可能出现的异常是 JavaFormatException。当没有填写输入框时就会出现该异常。提供给用户的信息仅仅是异常的名称。您可以捕获这些异常并给出更易懂的信息。

图 36: 抵押期限超过 25 年
抵押期限超过 25 年
抵押期限超过 25 年

图 36 中可以看到抵押期限是 27 年,因此这将引发放置在 MortgageCalculator 中的异常。

图 37: TermException
TermException

图 37 是一幅抛出由于抵押期限大于 25 年而引发了 TermException 异常的画面。 图 38 显示了在 result.jsp 底部尚未更改的代码。这就是异常被捕获并且显示出原始的信息的位置。

图 38: Result.jsp 中的 catch 语句
Result.jsp 中的 catch 语句

图 39 是一幅放置在 result.jsp 中的 TermException 代码的画面。代码从 113 行开始到 118 结束。这段代码捕获 TermException 异常并显示消息 “Enter a value less than 25 for the mortgage value。”

图 39:Result.jsp 中关于 TermException 的 catch 语句
Result.jsp 中关于 TermException 的 catch 语句
Result.jsp 中关于 TermException 的 catch 语句

为了见到 result.jsp 中新代码生成的效果,需要在服务器上重新启动该项目。然后需要在 input.jsp 页面上的 mortgageTerm 文本框中输入一个大于 25 的值。

图 40: 抛出的 TermException 异常显示给用户一则新的消息
抛出的 TermException 异常显示给用户一则新的消息
抛出的 TermException 异常显示给用户一则新的消息

结束语

Rational Application Developer V6.0 具有良好的配备,用于处理所有适应 J2EE 的 Web 服务的开发和客户程序的生成。它提供了服务器和运行时来帮助您快速创建并部署 Web 服务。

当使用 Rational Application Developer 时,您会很快发现开发 Web 服务具有极好的简易和选择间的平衡。您可以以不同的入手点创建 Web 服务。这些包括从 WSDL 文件(自顶向下或客户程序方案)开始或从 Java 文件(自底向上方案)开始。

一旦您部署了 Web 服务,您就可以立即使用 Web 服务浏览器进行测试。这个浏览器是能从 WSDL 中读取信息并能直接连接到服务上的测试工具。

如果 web 服务已经部署并且您对为服务创建客户程序非常感兴趣,您可在 Rational Application Developer Web 服务向导中由 WSDL 文件开始进行创建。为了使开发客户程序变得容易,向导生成了许多客户端文件,这些文件可以帮忙将客户程序信息转换成适当的 XML 信息。为 Web 服务控制操作调用的顶层文件是一个名为 Java Proxy 的 Java 文件。用户程序要使用代理中的方法并在 Web 服务上调用(代理中的)方法。两个可用的 Java 测试客户程序为 Generated Sample Test Client (GSTC) 和 Universal Test Client (UTC)。GSTC 是静态的基于 Web 的测试客户端,它是由 Web 服务向导生成,用来提供一个对于特殊 Web 服务进行测试客户程序细节处理的实例。UTC 是一个为适用许多类型而设计的动态引擎。

自定义 GSTC 以适应您正在开发的 Web 服务。本文使用了抵押计算器实例来说明 IBM Rational Application Developer V6.0 Web 服务向导的多功能性。了解到,虽然生成程序不能处理每种可能存在的类型(包括数组),但是您可以修改 GSTC 来解决这个问题。您还可以通过显示来自异常(在修改 TermException 时了解到的)的更多信息来修改 GSTC 以提高可用性。


相关主题

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=SOA and web services
ArticleID=162622
ArticleTitle=使用 Rational Application Developer V6.0 开发、测试并部署 Web 服务
publish-date=01182005