使用 WS-I 测试工具

Oracle JDeveloper 方法文档
作者:Susan Duncan
2004 年 3 月
由 Kate Heap 更新
2006 年 9 月

目录

简介
安装测试工具
测试服务的 WSDL 说明
测试正在运行的服务的消息
通过 UDDI 注册表测试服务的发现

故障诊断
结论

简介

Web 服务互操作性组织 (WS-I) 是由 Oracle 和其他业界领军者创建的,其目的是促进不同平台、操作系统和编程语言上 Web 服务技术的互操作性。使用 JDeveloper 提供的工具,您可以通过检查 Web 服务是否符合 WS-I Basic Profile(当前版本 1.1)来测试 Web 服务的互操作性。

WS-I 从以下四个方面分析 Web 服务的互操作性:

  • 通过 UDDI 注册表项发现服务
  • 使用 WSDL 文件描述服务
  • 通过正在运行的服务交换的消息(通常跨网络)
  • 用于传输消息的信封

使用一组测试断言来测试 Web 服务在这些方面是否符合要求。

本方法文档描述使用 JDeveloper 集成的 WS-I 测试环境来分析服务是否符合 Basic Profile 的步骤。HTTP Analyzer 用于监视和记录运行的 Web 服务,您可以使用任何符合 WS-I 的分析器和测试断言(称为测试工具)来检查是否符合 Basic Profile。在本文档中,使用 WS-I 提供的工具。

使用 JDeveloper 时,测试的 Web 服务可以是:

  • 导航器中列出的已创建的 Web 服务(WSDL 文件或 Web 服务容器)
  • 使用客户端代理调用的已部署的、正在运行的 Web 服务
  • UDDI 连接节点中列出的 Web 服务

本方法文档向您介绍如何分析以上每种类型的服务。

安装测试工具

  1. http://www.ws-i.org/Testing/Tools/2005/06/WSI_Test_Java_Final_1.1.zip 下载测试工具的 Java 版本并进行解压缩。这个更新的版本旨在测试 Basic Profile1.1。
  2. 在 JDeveloper 中,打开 Preferences 对话框 (Tools-->Preferences),导航到 WS-I Testing Tools 首选项。
    1. 将 Home Location 设置为测试工具的存储位置
    2. 您需要指定打算使用的测试断言文档。测试断言文档包含在上一步中下载的测试工具中,因此,如果您要使用测试断言文档,请选中 Specify Test Assertions Document 复选框,然后导航至已下载文件的解压缩位置的 \common\profiles 子目录。选择 BasicProfile_1.1_TAD.xml 文件并单击 Open。然而,如果您希望使用自己的一组断言,则在此指定其位置。

测试服务的 WSDL 说明

本方法文档使用一个 Oracle J2EE Web 服务作为示例。您也可以使用 OTN 上提供的 JAX-RPC 扩展生成一个 Apache SOAP Web 服务和 JAX-RPC Web 服务。提供有关发布和运行 Web 服务的详细说明不在本文讨论范围内。

针对 WSDL 文件运行分析器

  1. 创建 HelloWorld Java 类

    public class HelloWorld
    {
    public HelloWorld()
    {
    }
    public String sayHello(String name)
    {
    return "Hello " + name;
    }
    }

  2. 将该类发布为名为 HelloWorldService 的 Oracle J2EE Web 服务
  3. 如果 Log 窗口尚未打开,则使用菜单 View -> Log Window 显示它
  4. 使用生成的 HelloWorldService 的上下文菜单分析 WSDL 文件

  5. 注意,日志窗口返回来自 WS-I 测试工具的消息。WS-I 工具和输出完全集成到 JDeveloper IDE 中

  6. 注意,生成并打开了 WS-I Profile Conformance Report (wsi-report.html) 以便于查看

阅读 Conformance Report

  1. 向下滚动至 Summary 部分。注意,该 WSDL 文件已经通过互操作性检查。另请注意,该报告分成四个部分(discovery、description、message 和 envelope)

  2. 向下滚动至 Artifact:discovery 部分。discovery 部分涵盖了 UDDI 注册表中 Web 服务项的一致性。由于本示例中没有使用 UDDI 注册表,因此所有断言都标记为 Missing Input。注意:遗漏输入不会引发故障,但您应该确定您预期遗漏输入(如该例所示)。

  3. 向下滚动至 Artifact:description 部分。
  4. 向下滚动查看 Summary Table,注意 Assertion ID 所使用的颜色方案。通过一致性检查的 Assertion ID 用绿色列出;检查对其并不适用的 Assertion ID 用蓝色列出;缺少一些输入的 Assertion ID 用红色列出。

  5. 您可以单击任何 Assertion ID 来查看所选断言的详细信息。单击 BP2098 可查看其测试断言的详细信息,从而了解它为什么标记为缺少输入。如下面的屏幕截图中所示,它强调了 WSDL 中 import 元素的 location 属性的值为空的事实。

  6. 向下滚动至 Entry list 表。通过该表,您可以查看 Web 服务中各种组成部分类型的测试结果。单击 sayHello 消息类型的 Reference Id。
  7. 注意,该消息中的两个断言均已通过一致性测试。

  8. 滚动至报告的 Artifact:message 部分。报告的该部分测试在客户端和 Web 服务之间传递的消息的一致性。在本示例中,我们只测试一个 WSDL 文件,因此到该部分的所有输入都标记为缺少

测试正在运行的服务的消息

要测试 HelloWorldService,您可以使用 JDeveloper 中嵌入的 OC4J 来运行它并生成一个 Java 代理客户端来调用它。有关实现该功能的详细步骤不在本方法文档的讨论范围内,但如果您需要有关如何实现这些步骤的指导,请参阅OTN 上的 OBE 教程“使用 JDeveloper 开发约定驱动的 Web 服务”和“利用 JDeveloper 和 Oracle 应用服务器开发、部署和管理 Web 服务”。

针对 WSDL 文件运行 HTTP Analyzer

  1. 使用嵌入的 OC4J 运行先前创建的 HelloWorldService。
  2. 生成一个 Web 服务代理并将以下内容添加到 Main 方法中

    System.out.println(myPort.sayHello(" to you "));


  3. 运行该代理并查看 Log 窗口中的输出

    hello to you
    Process exited with exit code 0.


  4. 从 View 菜单打开 HTTP Analyzer,单击绿色的 Start 按钮

  5. 再次运行客户端。注意,请求/响应数据包将在 HTTP Analyzer 中列出。

  6. 要查看一个数据包对中的内容,请在 History 页面中选中它,然后单击 Data 选项卡。数据页面将在请求信息(左侧面板)中显示发送给 Web 服务的值,并在响应信息(右侧面板)中显示 Web 服务返回的值。



    如果您在 HTTP Analyzer 启动的情况下运行了其他操作,则您可以使用 Previous Request/Response Pair 和 Next Request/Response Pair 按钮来查看其他的数据包对。
  7. 单击红色的 Stop 按钮停止 HTTP Analyzer。然后单击 WS-I Analyze 按钮(右侧最后一个图标)启动 WS-I Analyze 向导。产生 WS-I Profile Conformance Report。

  8. 要关闭 HTTP Analyzer 窗口,请单击 HTTP Analyzer 选项卡上的 x。

阅读 Conformance Report

  1. 向下滚动至 Summary 部分。再次注意,该服务已经通过一致性检查。而且,该报告分成四个部分(discovery、description、message 和 envelope)
    Description 部分和 Discovery 部分应该与本示例中前面创建的 WSDL 报告相同
  2. 在 Summary 部分下,单击 message 链接以导航到 Artifact:message 部分。注意,这次大多数断言都通过了检查,只有少数几个报告为 Not Applicable。但是没有故障。


    (如果该表中所有断言都显示为 Missing Input,则一致性报告中命名的终端和经由线路返回的终端不匹配。参阅故障诊断)。

通过 UDDI 注册表测试服务的发现

在该版本的 JDeveloper 中,可以在 UD2I 注册表项中测试 Web 服务的 WSDL 文件。不能使用 JDeveloper 分析 Basic Profile(它检查 UDDI 注册表本身的一致性)的 Discovery 部分。

在 UDDI 注册表中找到一个 Web 服务

  1. 在 JDeveloper Connections Manager 中,展开 UDDI Registry 节点。注意,它包含到 XMethods Public UDDI Registry 的默认连接。右键单击该连接,从上下文菜单中选择 Find Web Services。调用 Find Web Services 向导
  2. 在该向导中,选择按类别进行搜索,然后选择 UDDI Types 分类,展开 Web Service Specification 和 XML Based Web Service Specification 节点。选择 Web Service Described via WSDL 并将其加入 Selected 窗格中,然后单击 Next

  3. 随即显示 tModel 列表。浏览该列表,选择一个 tModel。实际上,该 tModel 是您计划在应用程序中使用的 Web 服务的 tModel, 首先您需要检查它是否符合 WS-I Basic Profile。针对本方法文档,选择 Address Finder(Netherlands) 并单击 Next

  4. 该向导的步骤 5 显示您选择的 tModel 的详细信息。单击 Finish 后,JDeveloper 将提供大量选项,供您选择如何处理该 Web 服务。指定您希望在项目中为该服务生成一个代理。

  5. 调用 Create Web Service Proxy 向导。创建完代理之后,您将在 Connections Navigator 中的 UDDI Registry 节点中看到该服务。

分析 WSDL

  1. 在 UDDI Registry 中,展开新节点以标识 WSDL。右键单击该 WSDL,从上下文菜单中选择 WS-I Analyze WSDL

  2. 浏览生成的 wsi-report.html Description 部分,查看一致性故障和警告

故障诊断

问题 可能的解决方案
消息断言都缺少输入 您正在运行一个 WSDL 分析,因此只测试 Description 断言

wsi-report.html 中捕获的计算机名称和端口与“通过线路”返回的名称和端口不一致。当您在嵌入的 OC4J 中运行服务时,很有可能发生这种情况。确定端口号为 8988(在 WSDL 文件中),然后再开始运行 TCP Packet Monitor。并且尝试将计算机名称更改为 IP 地址或主机名(使用小写)。有关更多详细信息,请参阅 JDeveloper 联机帮助主题 Analyzing Web Services Running in the Embedded Server

WS-I Analyze Web Service Wizard 中的 Service Name 和 Port No. 为空 Web 服务未运行。部署并启动服务,或者使用嵌入的 OC4J
计算机名称和端口号不一致(请参见上述内容)
HTTP Analyzer 不捕获请求和响应数据 检查您的代理设置。如果从 JDeveloper 进行连接时有问题,您可能需要更改您使用的代理服务器设置。例如,如果您要连接到某个代理服务器中的 IP 地址,而您的计算机也工作于该代理服务器下,则确保 JDeveloper 的 Web 代理首选项不包括您尝试连接的 IP 地址。有关更多信息,请参阅 JDeveloper 联机帮助主题 Proxy Settings and the HTTP Analyzer
展开 UDDI Registry and XMethods 节点将显示“Failed to Find Business Entites”消息 如上所述,您需要检查您的代理设置。如果从 JDeveloper 进行连接时有问题,您可能需要更改您使用的代理服务器设置。例如,如果您要连接到某个代理服务器中的 IP 地址,而您的计算机也工作于该代理服务器下,则确保 JDeveloper 的 Web 代理首选项不包括您尝试连接的 IP 地址。
wsi-report.html 的 Discovery 部分中缺少某些输入 JDeveloper 不测试 WS-I Basic Profile 1.0 的 Discovery 断言
按类别查找 IBM/Microsoft Public 注册表未返回足够的行 有时,供应商限制类别搜索返回的行数。无法避免此问题。类别搜索对于私有 UDDI 实例最有效。

结论

JDeveloper 无缝集成了根据 WS-I Basic Profile 1.1 进行的 Web 服务测试。您既可以测试服务的说明,也可以测试服务的消息。由用户决定故障是否符合特定的 Basic Profile 断言,这将影响其环境中特定服务的互操作性。

更多信息
WS-I
JDeveloper JAX-RPC 扩展
OTN Web 服务技术中心
Left Curve
Java SDK 和工具
Right Curve
Left Curve
Java 资源
Right Curve