WSI 方法文档
使用 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 断言,这将影响其环境中特定服务的互操作性。