使用 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 服务
本方法文档向您介绍如何分析以上每种类型的服务。 安装测试工具 - 从 http://www.ws-i.org/Testing/Tools/2005/06/WSI_Test_Java_Final_1.1.zip 下载测试工具的 Java 版本并进行解压缩。这个更新的版本旨在测试 Basic Profile1.1。
- 在 JDeveloper 中,打开 Preferences 对话框 (Tools-->Preferences),导航到 WS-I Testing Tools 首选项。
- 将 Home Location 设置为测试工具的存储位置
- 您需要指定打算使用的测试断言文档。测试断言文档包含在上一步中下载的测试工具中,因此,如果您要使用测试断言文档,请选中 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 文件运行分析器 - 创建 HelloWorld Java 类
public class HelloWorld { public HelloWorld() { } public String sayHello(String name) { return "Hello " + name; } } - 将该类发布为名为 HelloWorldService 的 Oracle J2EE Web 服务
- 如果 Log 窗口尚未打开,则使用菜单 View -> Log Window 显示它
- 使用生成的 HelloWorldService 的上下文菜单分析 WSDL 文件
- 注意,日志窗口返回来自 WS-I 测试工具的消息。WS-I 工具和输出完全集成到 JDeveloper IDE 中
- 注意,生成并打开了 WS-I Profile Conformance Report (wsi-report.html) 以便于查看
![]() 阅读 Conformance Report - 向下滚动至 Summary 部分。注意,该 WSDL 文件已经通过互操作性检查。另请注意,该报告分成四个部分(discovery、description、message 和 envelope)
- 向下滚动至 Artifact:discovery 部分。discovery 部分涵盖了 UDDI 注册表中 Web 服务项的一致性。由于本示例中没有使用 UDDI 注册表,因此所有断言都标记为 Missing Input。注意:遗漏输入不会引发故障,但您应该确定您预期遗漏输入(如该例所示)。
- 向下滚动至 Artifact:description 部分。
- 向下滚动查看 Summary Table,注意 Assertion ID 所使用的颜色方案。通过一致性检查的 Assertion ID 用绿色列出;检查对其并不适用的 Assertion ID 用蓝色列出;缺少一些输入的 Assertion ID 用红色列出。
![]() - 您可以单击任何 Assertion ID 来查看所选断言的详细信息。单击 BP2098 可查看其测试断言的详细信息,从而了解它为什么标记为缺少输入。如下面的屏幕截图中所示,它强调了 WSDL 中 import 元素的 location 属性的值为空的事实。
![]() - 向下滚动至 Entry list 表。通过该表,您可以查看 Web 服务中各种组成部分类型的测试结果。单击 sayHello 消息类型的 Reference Id。
- 注意,该消息中的两个断言均已通过一致性测试。
![]() - 滚动至报告的 Artifact:message 部分。报告的该部分测试在客户端和 Web 服务之间传递的消息的一致性。在本示例中,我们只测试一个 WSDL 文件,因此到该部分的所有输入都标记为缺少
![]() 测试正在运行的服务的消息 要测试 HelloWorldService,您可以使用 JDeveloper 中嵌入的 OC4J 来运行它并生成一个 Java 代理客户端来调用它。有关实现该功能的详细步骤不在本方法文档的讨论范围内,但如果您需要有关如何实现这些步骤的指导,请参阅OTN 上的 OBE 教程“使用 JDeveloper 开发约定驱动的 Web 服务”和“利用 JDeveloper 和 Oracle 应用服务器开发、部署和管理 Web 服务”。 针对 WSDL 文件运行 HTTP Analyzer - 使用嵌入的 OC4J 运行先前创建的 HelloWorldService。
- 生成一个 Web 服务代理并将以下内容添加到 Main 方法中
System.out.println(myPort.sayHello(" to you ")); - 运行该代理并查看 Log 窗口中的输出
hello to you Process exited with exit code 0. - 从 View 菜单打开 HTTP Analyzer,单击绿色的 Start 按钮
- 再次运行客户端。注意,请求/响应数据包将在 HTTP Analyzer 中列出。
- 要查看一个数据包对中的内容,请在 History 页面中选中它,然后单击 Data 选项卡。数据页面将在请求信息(左侧面板)中显示发送给 Web 服务的值,并在响应信息(右侧面板)中显示 Web 服务返回的值。
如果您在 HTTP Analyzer 启动的情况下运行了其他操作,则您可以使用 Previous Request/Response Pair 和 Next Request/Response Pair 按钮来查看其他的数据包对。 - 单击红色的 Stop 按钮停止 HTTP Analyzer。然后单击 WS-I Analyze 按钮(右侧最后一个图标)启动 WS-I Analyze 向导。产生 WS-I Profile Conformance Report。
- 要关闭 HTTP Analyzer 窗口,请单击 HTTP Analyzer 选项卡上的 x。
阅读 Conformance Report - 向下滚动至 Summary 部分。再次注意,该服务已经通过一致性检查。而且,该报告分成四个部分(discovery、description、message 和 envelope)
Description 部分和 Discovery 部分应该与本示例中前面创建的 WSDL 报告相同 - 在 Summary 部分下,单击 message 链接以导航到 Artifact:message 部分。注意,这次大多数断言都通过了检查,只有少数几个报告为 Not Applicable。但是没有故障。
(如果该表中所有断言都显示为 Missing Input,则一致性报告中命名的终端和经由线路返回的终端不匹配。参阅故障诊断)。 通过 UDDI 注册表测试服务的发现 在该版本的 JDeveloper 中,可以在 UD2I 注册表项中测试 Web 服务的 WSDL 文件。不能使用 JDeveloper 分析 Basic Profile(它检查 UDDI 注册表本身的一致性)的 Discovery 部分。 在 UDDI 注册表中找到一个 Web 服务 - 在 JDeveloper Connections Manager 中,展开 UDDI Registry 节点。注意,它包含到 XMethods Public UDDI Registry 的默认连接。右键单击该连接,从上下文菜单中选择 Find Web Services。调用 Find Web Services 向导
- 在该向导中,选择按类别进行搜索,然后选择 UDDI Types 分类,展开 Web Service Specification 和 XML Based Web Service Specification 节点。选择 Web Service Described via WSDL 并将其加入 Selected 窗格中,然后单击 Next。
- 随即显示 tModel 列表。浏览该列表,选择一个 tModel。实际上,该 tModel 是您计划在应用程序中使用的 Web 服务的 tModel, 首先您需要检查它是否符合 WS-I Basic Profile。针对本方法文档,选择 Address Finder(Netherlands) 并单击 Next。
- 该向导的步骤 5 显示您选择的 tModel 的详细信息。单击 Finish 后,JDeveloper 将提供大量选项,供您选择如何处理该 Web 服务。指定您希望在项目中为该服务生成一个代理。
![]() - 调用 Create Web Service Proxy 向导。创建完代理之后,您将在 Connections Navigator 中的 UDDI Registry 节点中看到该服务。
分析 WSDL - 在 UDDI Registry 中,展开新节点以标识 WSDL。右键单击该 WSDL,从上下文菜单中选择 WS-I Analyze WSDL
- 浏览生成的 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 断言,这将影响其环境中特定服务的互操作性。 |