简介: Validator for WS-Policy
in Eclipse 是一个插件,可帮助对 WS-Policy 问题进行故障诊断。了解如何使用该插件调试
IBM WebSphere Application Server 使用的一些 WS-Policy 中的问题。此外,了解如何创建自己的架构,将该验证器用于其他
WS-Policy 断言。
使用 Validator for WS-Policy in Eclipse
本节阐述如何使用 Validator for WS-Policy in
Eclipse 调试无效 WS-Policy 导致的错误。这会使用到本文包含的样例应用程序,还要使用 IBM?
Rational? Application Developer 8.0.2 和 IBM WebSphere?
Application Server 7.0.0.17。
设置 IBM WebSphere Application Server
和 IBM Rational Application Developer
要识别测试项目错误时将用到的运行时环境,则必须在 IBM Rational
Application Developer 中创建一个服务器。这将创建一个从工作台到现有应用服务器安装或服务器配置文件的指针。在本文中,IBM
WebSphere Application Server 7.0.0.17 安装将用作样例应用程序的应用服务器。但是,在创建这个服务器之前,还必须创建合适的
Server Runtime Environment 和 IBM WebSphere Application
Profile,如果它们还不存在的话。最后,必须启动服务器,准备好安装和启动应用程序。
- 使用一个新工作空间中启动 IBM Rational Application Developer
8.0.2。
- 关闭 Welcome 页。您现在应该位于 Java? EE 透视图中。
- 创建一个 Server Runtime Environment:选择 Window >
Preferences
- Server / Runtime Environments > Add
图 1. 添加一个 Server Runtime Environment
选择 "WebSphere Application Server
v7.0" > Next
图 2. 选择 Runtime Environment
的类型
名称 = "WebSphere Application Server
v7.0.0.17",安装目录 = <WAS_HOME>(例如, C:\Program
Files\IBM\WebSphere\AppServer)> Finish
图 3. 指定 IBM WebSphere Application
Server 安装目录
创建一个 IBM WebSphere Application Server
Profile:选择 Window > Preferences
Server / WebSphere Application Server
> Run Profile Management Tool
图 4. 运行 Profile Management Tool
在打开 Profile Management Tool 之后,单击 Launch
Profile Management Tool。
图 5. 启动 Profile Management Tool
单击 Create...
图 6. 新建一个配置文件
确保已选中 "Application Server"
> Next
图 7. 指定要创建的环境的类型
确保已选中 "Typical profile creation"
> Next
图 8. 选择 Typical profile creation
流程
取消选中 "Enable administrative security"
复选框 > Next。
图 9. 禁用管理安全性
检查配置文件细节 > Next
图 10. 检查配置文件创建摘要
配置文件创建后,取消选中 "Launch the First
steps console" 复选框 > Finish。
图 11. 完成配置文件创建向导
关闭 Profile Management Tool。
检查新配置文件现在是否已在底部面板中列出。然后单击 OK 关闭 Preferences
窗口。
创建并启动一个服务器
Servers 选项卡 > 右键单击 > New >
Server。
图 12. 新建一个服务器
选择 "WebSphere Application Server
v7.0" > Next。
图 13. 选择服务器类型
确保选择刚刚创建的配置文件的名称 > Finish。
图 14. IBM WebSphere Application
Server 设置
Servers 选项卡 > 右键单击 "WebSphere
Application Server v7.0.0.17 at localhost" >
start。
图 15. 启动服务器
导入并运行样例应用程序
样例应用程序使用了一个 Policy Set,默认情况下,IBM WebSphere
Application Server 和 IBM Rational Application Developer
中没有安装它,因此必须先导入它。然后,可以将样例应用程序 EAR 文件导入 IBM Rational Application
Developer 工作空间,并在上一节中创建的服务器上启动它。应用程序运行后,就可用于发送一个同步 Web
服务请求。但是,这将产生一个异常,而不是返回一条成功响应消息,因为样例应用程序中的 WS-Policy
是无效的。
将样例应用程序所需的提供者策略集导入 IBM WebSphere Application
Server:选择 Servers 选项卡 > 右键单击 "WebSphere Application
Server v7.0.0.17 at localhost" > Administration
> Run Administrative Console...
图 16. 运行 Administrative Console
Administrative Console > Services
/ Policy Sets / Application Policy Sets > Import...
> From default repository...
图 17. 导入 Policy Set
滚动到页面底部,单击箭头移动到第 2 页。
选中 "WS-Security default"
旁边的复选框 > OK > Save。
图 18. 选择 WS-Security 默认 Policy
Set
退出并关闭 Administrative Console。
将样例应用程序所需的提供者策略集导入 IBM Rational Application
Developer 并下载本文包含的 WSSecurity default.zip 文件。
在 Enterprise Explorer 视图中右键单击 >
Import > Import...
图 19. 打开导入向导
Web services / WebSphere Policy Sets
> Next
图 20. 导入 Policy Set
浏览导入的文件 > Finish
图 21. 导入下载的 Policy Set
导入已破坏的样例应用程序并下载本文包含的 InvalidPolicy.ear
文件。
右键单击 Enterprise Explorer > Import
> EAR File。
图 22. 导入一个 EAR 文件
浏览您下载的文件,确认目标运行库 = "WebSphere Application
Server v7.0.0.17" > Finish
图 23. 导入下载的 EAR 文件
注意,使用 IBM Rational Application Developer
附带的默认插件时,样例应用程序的编译没有错误。
图 24. 导入的样例应用程序编译没有错误
运行已破坏的样例应用程序并选择 Servers 选项卡 > 右键单击
"WebSphere Application Server v7.0.0.17 at localhost"
> Add and Remove...
图 25. 打开 Add and Remove 向导
选择 Available 列中的 InvalidPolicy >
Add > Finish
图 26. 添加已破坏的样例应用程序
应用程序成功发布后,请注意,服务器状态已经更改为 [Started, Synchronized]。
图 27. 检查服务器状态
打开一个 Web 浏览器,导航到 http://<WAS_HOST>:<WAS_PORT>/wssamplesei/demo,例如
http://localhost:9080/wssamplesei/demo。
选择 Message Type = Synchronous Echo,
Message String = hello > Send Message。一个异常会出现。
图 28. 调用已破坏的样例应用程序 Web 服务
分析错误并定位无效 WS-Policy
当 Server Runtime Environment 中出现错误时,错误日志会显示在
IBM Rational Application Developer 中的控制台视图中。在本例中,将有一个错误指出客户端上的
WS-Security 配置中有问题,需要确定客户端是否是使用提供者 WSDL 文档中的 WS-Policy
配置的。
查看 IBM Rational Application Developer
中的控制台并观察下面的消息:
清单 1. 运行已破坏的样例应用程序后的错误
[23/05/11 14:40:12:906 BST] 0000001f
SystemOut O >> CLIENT: ERROR: SEI Echo EXCEPTION.
[23/05/11 14:40:12:906 BST] 0000001f
SystemErr R javax.xml.ws.WebServiceException:
com.ibm.wsspi.wssecurity.core.SoapSecurityException:
CWWSS5400E: algorithm attribute is
required but found:
com.ibm.ws.wssecurity.confimpl.PrivateCommonConfig$AlgorithmConfImpl(algorithm=[null],
type=[null], properties=[{}]).
注意,生成策略集配置时,客户端上出现了错误:
清单 2. 错误堆栈跟踪
[23/05/11 14:40:12:921 BST] 0000001f
SystemErr R at
com.ibm.ws.wspolicy.runtime.handler.ClientWSPolicyHandlerImpl.
generatePolicySetConfigurations(ClientWSPolicyHandlerImpl.java:282)
注意,Web 服务客户端被配置为使用提供者策略。
选择 Services 视图 > JAX-WS/Clients/SampleClientSei:
{http://com/ibm/was/wssample/sei/echo/}EchoService >
Manage Policy Set Attachment...
图 29. 管理客户端 Policy Set 附件
注意,所有服务都被设置为 "Acquire Provider
Policy"。
图 30. 查看每个服务的策略获取
单击 "Use Provider Policy...",观察是否使用
HTTP GET 从默认 WSDL URL 中获取策略。
图 31. 查看提供者策略 WSDL URL
定位包含提供者策略的 WSDL 文件并导航到 http://<WAS_HOST>:<WAS_PORT>/WSSampleSei/EchoService?wsdl,例如
http://localhost:9080/WSSampleSei/EchoService?wsdl。
注意,这个 URL 重定向到 http://<WAS_HOST>:<WAS_PORT>/WSSampleSei/EchoService/WEB-INF/wsdl/Echo.wsdl,这是因为正在使用的
WSDL 是提供者 WAR 中的一个已打包的文件(InvalidPolicy/SampleServicesSei/WebContent/WEB-INF/wsdl/Echo.wsdl)。
图 32. 定位 Echo.wsdl 文件
安装 Validator for WS-Policy in Eclipse
插件
由于已经确认提供者 WSDL 文档中的 WS-Policy 有问题,但
Eclipse 中的现有验证器没有发现原因所在,因此将安装 Validator for WS-Policy
in Eclipse 插件。安装将通过其他 Eclipse 插件使用的标准更新机制来完成。
从 alphaWorks 下载 VWPE.zip,这个 Zip 文件包含
Validator for WS-Policy in Eclipse 1.0。
在一个本地目录中解压 VWPE.zip,在指定目录中创建一个本地更新站点。
Help > Install New Software...
单击 Add...
图 33. 新增一个存储库
单击 Local...,选择前面解压的 VWPE 目录。
图 34. 选择 VWPE 目录
输入 Name VWPE 并单击 OK。
选择 Validator for WS-Policy in Eclipse
插件并单击 Next。
图 35. 选择要安装的插件
检查安装细节并单击 Next。
图 36. 检查要安装的项目
检查并接受许可,单击 Finish。
图 37. 检查许可
单击 OK 忽略安全警告。
图 38. 忽略安全警告
安装完成后,单击 Restart Now 重启带有新插件的 IBM Rational
Application Developer。
图 39. 重启 IBM Rational Application
Developer
配置 Validator for WS-Policy in Eclipse
要验证是否已经正确安装该插件,则应该检查配置,确保验证器已经启用并且会在
WSDL 文档上运行。
重启 IBM Rational Application Developer
后,请转到 Window > Preferences。
Validation > 确保 WS-Policy 验证器已经启用("Manual"
和 "Build" 复选框均已选中)。
图 40. 确保已启用 WS-Policy 验证器
单击 "WS-Policy validator" 旁边的
"..." 按钮打开 Settings。
检查 WS-Policy Validator 是否会在所有扩展名为 wsdl
和 xml 的文件上运行。单击 Cancel。
图 41. 验证器使用的文件类型
Validation / WS Policy Validator。注意,这个子页允许使用自定义架构文件。默认情况下,这个架构目录是空的,以便使用插件提供的架构。下面的
“测试架构” 将详细介绍相关内容。
图 42. WS Policy Validator 架构目录
验证已破坏的样例应用程序中的无效 WS-Policy
项目中的所有文件都将将获得验证,提供者 WSDL 文档中会出现一个 WS-Policy
错误,此前将该文档标识为客户端配置错误的根源。可以使用一个标记来标识无效的特定 WS-Policy 断言,错误消息会说明有一个断言缺失。可以使用规范和提供者配置作为指导,通过添加缺失的断言来解决这个问题。
图 43. 验证 WS-Policy
验证结束时,单击 OK 关闭 Validation Results 对话框。
图 44. 验证结果
注意,会有一个新的 Invalid WS-Policy 错误出现在 Markers
选项卡中。该错误指出 AlgorithmSuite 断言至少必须出现一次。
图 45. Markers 选项卡中的 Invalid
WS-Policy 错误
双击错误会打开 InvalidPolicy/SampleServicesSei/WebContent/WEB-INF/wsdl/Echo.wsdl
文件,并会突出显示相关的行。注意,这是我们前面指出的那个文件。它包含 Web 服务提供者发布的 WS-Policy,客户端正在使用这个提供者策略来配置自己。
注意,错误位于一个 AsymmetricBinding 断言中。
图 46. 无效 AsymmetricBinding 断言
注意 WS-Security Policy 1.2 规范 中的 AsymmetricBinding
断言的语法。正如错误中说明的那样,AlgorithmSuite 是必需的,但它缺少以下内容:
清单 3. AsymmetricBinding 断言语法
<sp:AsymmetricBinding xmlns:sp="..."
... >
<wsp:Policy xmlns:wsp="...">
(
<sp:InitiatorToken>
<wsp:Policy>
... </wsp:Policy>
</sp:InitiatorToken>
) | (
<sp:InitiatorSignatureToken>
<wsp:Policy>
... </wsp:Policy>
</sp:InitiatorSignatureToken>
<sp:InitiatorEncryptionToken>
<wsp:Policy>
... </wsp:Policy>
</sp:InitiatorEncryptionToken>
)
(
<sp:RecipientToken>
<wsp:Policy>
... </wsp:Policy>
</sp:RecipientToken>
) | (
<sp:RecipientSignatureToken>
<wsp:Policy>
... </wsp:Policy>
</sp:RecipientSignatureToken>
<sp:RecipientEncryptionToken>
<wsp:Policy>
... </wsp:Policy>
</sp:RecipientEncryptionToken>
)
<sp:AlgorithmSuite
... => ... </sp:AlgorithmSuite>
<sp:Layout
... => ... </sp:Layout> ?
<sp:IncludeTimestamp
... /> ?
<sp:EncryptBeforeSigning
... /> ?
<sp:EncryptSignature
... /> ?
<sp:ProtectTokens
... /> ?
<sp:OnlySignEntireHeadersAndBody
... /> ?
...
</wsp:Policy>
...
</sp:AsymmetricBinding>
注意 AlgorithmSuite Assertion 的语法:
清单 4. AlgorithmSuite Assertion
的语法
<sp:AlgorithmSuite xmlns:sp="..."
... >
<wsp:Policy xmlns:wsp="...">
(<sp:Basic256 ... /> |
<sp:Basic192
... /> |
<sp:Basic128
... /> |
<sp:TripleDes
... /> |
<sp:Basic256Rsa15
... /> |
<sp:Basic192Rsa15
... /> |
<sp:Basic128Rsa15
... /> |
<sp:TripleDesRsa15
... /> |
<sp:Basic256Sha256
... /> |
<sp:Basic192Sha256
... /> |
<sp:Basic128Sha256
... /> |
<sp:TripleDesSha256
... /> |
<sp:Basic256Sha256Rsa15
... /> |
<sp:Basic192Sha256Rsa15
... /> |
<sp:Basic128Sha256Rsa15
... /> |
<sp:TripleDesSha256Rsa15
... /> |
...)
<sp:InclusiveC14N
... /> ?
<sp:SOAPNormalization10
... /> ?
<sp:STRTransform10
... /> ?
(<sp:XPath10
... /> |
<sp:XPathFilter20
... /> |
<sp:AbsXPath
... /> |
...)?
...
</wsp:Policy>
...
</sp:AlgorithmSuite>
Servers 选项卡 > 右键单击 "WebSphere
Application Server v7.0.0.17 at localhost" >
Administration > Run Administrative Console...
Services / Policy sets / Application
policy sets > WS-Security default
图 47. WS-Security 的默认策略
单击 WS-Security
图 48. WS-Security 策略
单击 Main Policy
图 49. Main policy
单击 Algorithms for asymmetric tokens。注意,提供者正在使用
Basic128Rsa15。
图 50. Algorithms
退出并关闭 Administrative Console。
将以下 WS-Policy 断言添加到 Echo.wsdl 中,以便使用
Basic128Rsa15 断言(在 Layout 断言上面的 AsymmetricBinding/Policy
断言中):
清单 5. 样例应用程序的 Algorithm Suite
策略
<ns2:AlgorithmSuite>
<wsp:Policy>
<ns2:Basic128Rsa15 />
</wsp:Policy>
</ns2:AlgorithmSuite>
保存更改。注意,Invalid WS-Policy 错误消失了。
重新运行修改后的样例应用程序
要使 WS-Policy 更改在客户端配置上生效,必须重启服务器。应用程序重新运行后,会发送另一个
Web 服务请求,这次会收到一条成功响应消息。WS-Security 配置错误不会再出现在控制台日志中。
Servers 选项卡 > 右键单击 "WebSphere
Application Server v7.0.0.17 at localhost" >
Restart。这可以确保重新创建的是客户端策略集,而不是使用前面的无效配置的缓存副本。
图 51. 重启服务器
导航到 http://<WAS_HOST>:<WAS_PORT>/WSSampleSei/EchoService?wsdl,例如
http://localhost:9080/WSSampleSei/EchoService?wsdl,确保
WSDL 已经刷新,AlgorithmSuite 断言存在。
导航到 http://<WAS_HOST>:<WAS_PORT>/wssamplesei/demo,例如
http://localhost:9080/wssamplesei/demo。
选择 Message Type = Synchronous Echo,
Message String = hello > Send Message。
响应成功返回,字符串 hello 返回。
图 52. 调用修改后的样例应用程序 Web 服务
注意,这个错误不再出现在控制台记录中。
总结
样例应用程序在提供者 WSDL 文档中包含无效 WS-Policy。由于客户端被配置为读取
WS-Policy 并使用它配置客户端的 WS-Security 设置,因此 Web 服务调用会失败。
要调试这个失败,请检查控制台中的日志中的错误。日志中显示的一个错误表明问题出现在客户端策略集配置中。客户端被配置为使用来自
WSDL 文档的提供者策略,这意味着 WS-Policy 存在无效的可能性。
安装 Validator for WS-Policy in Eclipse
插件后,要验证项目中的所有文件。唯一的错误出现在提供者的 WSDL 文件中,错误指出缺少一个 AlgorithmSuite
断言。当打开文件时,错误标记也会指出 Assymmetric 绑定断言中缺失 AlgorithmSuite
断言。
为修复此错误,我们添加了与提供者的配置相对应的 AlgortithmSuite
断言。这个插件提供的文档还包含更多 WS-Policy 验证错误示例,并介绍了如何修复这些错误。
提供者的 WSDL 文档中的 WS-Policy 的长度超过 100
行,没有一个标准 Eclipse 验证器能够识别其中的错误。而且,WS-Security Policy
非常复杂,因此手动验证每个断言非常耗时,而且手动验证很容易出错。显然,如果没有 Validator for
WS-Policy in Eclipse,这个小错误将花费大量时间和精力才能得以解决。
创建自己的架构
Validator for WS-Policy in Eclipse
由一些现有的架构提供,这些架构可用于支持 IBM WebSphere Application Server
7.0 的所有 WS-Policy 断言。但是,可以通过其他规范使用的用户定义架构来扩展该插件。例如,您可能想在您的
WSDL 中包含一些 WS-Policy 断言,供另一个平台上的端点使用。本节将展示如何为 Validator
for WS-Policy in Eclipse 构造一个支持 WS-Eventing 规范 的架构。
WS-Eventing 描述了使用 Web 服务在另一个 Web 服务或应用程序中注册您感兴趣的活动的方法。它描述了允许服务管理其事件相关订阅的订阅管理器。为了表明对
WS-Eventing 的支持,指定了两个 WS-Policy 断言。EventSource 断言用于表明服务接受创建订阅的请求,SubscriptionManager
断言表明服务支持代表其他服务管理订阅。这两个断言的结构都比较简单,因此可以作为展示如何创建架构的简单示例。验证器的架构文件的格式是经过预先设计的,以便从一个正式规范创建架构成为一个简单任务。因此,这种格式主要基于
WS-Security Policy 等 OASIS 规范中使用的语法惯例。但是,验证器的确需要向这个语法信息添加一些额外的元数据并对其结构实施一些限制。架构文件被划分为很多部分,每个部分都以一个位于方括号中的标题开头。
前两个部分关注与规范有关的 XML 命名空间。第一个部分是 [Namespaces],它列示架构中使用的命名空间前缀及其对应的经过限定的命名空间,类似于基本
XML 文档中的 xmlns 属性。注意,与 xmlns 不同,使用的每个命名空间都必须通过其前缀进行声明,并在架构的其余部分通过前缀引用;不支持使用完全限定的断言。对于
WS-Eventing,我们只关心一个命名空间,即 WS-Eventing 命名空间;在规范的 3.5
节 中提供了这个命名空间,它使用了前缀 wse。我们将这部分编码如下:
清单 6. 架构的命名空间部分
[Namespaces]
<
wse = "http://www.w3.org/2011/03/ws-evt"
>
我们还必须在 [PolicyNamespaces] 部分中指定规范支持的
WS-Policy 规范的版本。这允许验证器验证断言中嵌入的 WS-Policy 是否使用正确的规范版本,并对
WS-Policy 断言的属性使用正确的验证(WS-Policy 1.2 和 1.5 之间有区别)。WS-Eventing
规范只提到 WS-Policy 1.5,因此我们将这个部分编码如下:
清单 7. 架构的 PolicyNamespace 部分
[PolicyNamespaces]
<
"http://www.w3.org/ns/ws-policy"
>
架构的其余部分关注断言本身。每个顶级断言都应该在一个单独的 [Syntax]
部分中描述。这些部分的语法非常类似于 Web 服务规范中使用的语法,通常可以从那些部分进行轻松修改。对于在几个顶级断言中包含重复断言片段的规范,可以在
[Referenced] 部分中包含这些片段。但是,WS-Eventing 规范不需要这种设置。
为创建 EventSource 断言的 [Syntax] 部分,我们要先复制规范的
9.1 节 中展示的语法,如下所示:
清单 8. 规范中展示的 EventSource 断言的语法
<wse:EventSource ...>
<wse:FilterDialect
URI="xs:anyURI" ...>
xs:any*
</wse:FilterDialect>
*
<wse:FormatName URI="xs:anyURI"
...>
xs:any*
</wse:FormatName>
*
<wse:DateTimeSupported
.../> ?
<wse:Expires
min="xs:duration"? max="xs:duration"?.../>
?
<wse:EndToSupported
.../> ?
<wse:NotificationPolicy
...>
xs:any
</wse:NotificationPolicy> ?
xs:any*
</wse:EventSource>
然后,我们需要进行以下修改,以便使其遵守验证器支持的架构格式:
- 在 <wse:EventSource ...> 之后添加基数指示符 ?,指出顶级断言在策略中不是必需的。如果不这样做,验证器会期望在其验证的每个策略中找到这个断言。
- 移动基数指示符,使其出现在 <wse:FilterDialect>、<wse:FormatName>
和 <wse:NotificationPolicy> 的起始标记而不是结束标记之后。
- 从标记集合中移除 xs:any*。通过阅读规范中给出的描述,我们发现这些标记旨在表明元素的可扩展性,因此我们使用省略号...替代它们。
- 替换为 Expires 断言的属性提供的 xs:duration 类型,因为验证器不支持该类型。xs:unsignedLong
是一个合适的替代类型。
修改后的语法如下所示:
清单 9. 架构中将包含的 EventSource 断言的经过修改的语法
[Syntax]
<wse:EventSource ...>?
<wse:FilterDialect
URI="xs:anyURI" ...>*
...
</wse:FilterDialect>
<wse:FormatName
URI="xs:anyURI" ...>*
...
</wse:FormatName>
<wse:DateTimeSupported
.../> ?
<wse:Expires
min="xs:unsignedLong"? max="xs:unsignedLong"?.../>
?
<wse:EndToSupported
.../> ?
<wse:NotificationPolicy
...> ?
...
</wse:NotificationPolicy>
...
</wse:EventSource>
还必须针对 SubscriptionManager 断言创建一个 [Syntax]
部分,这可以通过应用上面的规则来完成。这些规则普遍适用于以这种形式提供语法的架构。现在就完成了我们的架构;完成的文件作为一个下载本文提供。
测试架构
创建支持 WS-Eventing 的架构后,现在可以使用安装了 Validator
for WS-Policy in Eclipse 的 IBM Rational Application
Developer 来测试它。验证器将默认情况下会使用 Eclipse 插件 jar 中分发的架构文件。要使用您自己的架构文件,则必须将验证器配置为指向从中读取架构文件的目录:
Window > Preferences
从列表中选择 WS-Policy Validator。
单击首选项页上的浏览按钮,选择一个目录。然后,验证器将读取选中目录中所有扩展名为
.schema 的文件。删除这个字段的内容会导致验证器再次使用默认位置。
如果您想将您自己的架构添加到验证器提供的架构中,请将验证器分发的 .schema
文件复制到您配置的目录中。这些文件可以从插件 jar 文件中的架构文件夹提取。
重启 IBM Rational Application Developer
使更改生效。
图 53. 配置验证器使用的架构目录
现在我们创建一些 WS-Policy 来进行验证:
- 切换到 Resource 透视图。
- File > New... > Project
- 在 New Project 对话框中选择 General > Project。然后单击
Next。
- 输入一个项目名称并单击 Finish。
- File > New > File
- 选择您的项目并输入一个合适的文件名,例如 policy.xml。
- 向您的文件添加一些策略。下面的策略应该够用:
清单 10. 测试架构的基本策略
<wsp:Policy xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
xmlns:wse="http://www.w3.org/2011/03/ws-evt"
xmlns:test="http://www.ibm.com/websphere/policy/blueop/testing">
<wse:EventSource ...>
<wse:FormatName URI="...">
<mex:Location
Type="wsdl:definitions"
URI="http://example.com/Notif_WSDL_Metadata"
/>
</wse:FormatName>
</wse:EventSource>
</wsp:Policy>
如果架构正确,则不会出现验证错误。您将看到一个关于 mex:Location
元素的警告,因为该元素不是架构的一部分。
图 54. WS-Eventing 断言的正确验证
要确保验证正在工作,可以通过插入两个 DateTimeSupported
元素使我们的策略无效,其中一个元素应该会导致错误。
图 55. 重复的 DateTimeSupported
断言导致的验证错误
故障诊断
如果验证结果不是预期的,可以查看 Eclipse 错误日志(Window
> Show View > General > Error Log)。架构解析器将生成异常,它们应该有助于您诊断问题。例如,如果我们忘记更改
xs:Duration 属性类型,则会看到以下异常:
com.ibm.alphaworks.wspolicy.validator.SchemaParsingException:
Unrecognised attribute key: duration
图 56. 架构解析器生成的一个异常
|