日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

在 Eclipse 中結(jié)合 IBM WebSphere Application Server 使用 Validator for WS

 一本正經(jīng)地胡鬧 2019-05-14
Matthew Wilson 和 Katherine Sanders
2011 年 10 月 13 日發(fā)布


使用 Validator for WS-Policy in Eclipse

本節(jié)闡述如何使用 Validator for WS-Policy in Eclipse 調(diào)試無效 WS-Policy 導(dǎo)致的錯誤。這會使用到本文包含的樣例應(yīng)用程序,還要使用 IBM? Rational? Application Developer 8.0.2 和 IBM WebSphere? Application Server 7.0.0.17。

設(shè)置 IBM WebSphere Application Server 和 IBM Rational Application Developer

要識別測試項目錯誤時將用到的運行時環(huán)境,則必須在 IBM Rational Application Developer 中創(chuàng)建一個服務(wù)器。這將創(chuàng)建一個從工作臺到現(xiàn)有應(yīng)用服務(wù)器安裝或服務(wù)器配置文件的指針。在本文中,IBM WebSphere Application Server 7.0.0.17 安裝將用作樣例應(yīng)用程序的應(yīng)用服務(wù)器。但是,在創(chuàng)建這個服務(wù)器之前,還必須創(chuàng)建合適的 Server Runtime Environment 和 IBM WebSphere Application Profile,如果它們還不存在的話。最后,必須啟動服務(wù)器,準備好安裝和啟動應(yīng)用程序。

  1. 使用一個新工作空間中啟動 IBM Rational Application Developer 8.0.2。

  2. 關(guān)閉 Welcome 頁。您現(xiàn)在應(yīng)該位于 Java? EE 透視圖中。

  3. 創(chuàng)建一個 Server Runtime Environment:選擇 Window > Preferences

  4. Server / Runtime Environments > Add

圖 1. 添加一個 Server Runtime Environment
添加一個 Server Runtime Environment
  1. 選擇 "WebSphere Application Server v7.0" > Next

圖 2. 選擇 Runtime Environment 的類型
選擇 Runtime Environment 的類型
  1. 名稱 = "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 安裝目錄
  1. 創(chuàng)建一個 IBM WebSphere Application Server Profile:選擇 Window > Preferences

  2. Server / WebSphere Application Server > Run Profile Management Tool

圖 4. 運行 Profile Management Tool
運行 Profile Management Tool
  1. 在打開 Profile Management Tool 之后,單擊 Launch Profile Management Tool。

圖 5. 啟動 Profile Management Tool
啟動 Profile Management Tool
  1. 單擊 Create...

圖 6. 新建一個配置文件
新建一個配置文件
  1. 確保已選中 "Application Server" > Next

圖 7. 指定要創(chuàng)建的環(huán)境的類型
指定要創(chuàng)建的環(huán)境的類型
  1. 確保已選中 "Typical profile creation" > Next

圖 8. 選擇 Typical profile creation 流程
選擇 Typical profile creation 流程
  1. 取消選中 "Enable administrative security" 復(fù)選框 > Next。

圖 9. 禁用管理安全性
禁用管理安全性
  1. 檢查配置文件細節(jié) > Next

圖 10. 檢查配置文件創(chuàng)建摘要
檢查配置文件創(chuàng)建摘要
  1. 配置文件創(chuàng)建后,取消選中 "Launch the First steps console" 復(fù)選框 > Finish。

圖 11. 完成配置文件創(chuàng)建向?qū)?/h5>完成配置文件創(chuàng)建向?qū)? height=
  1. 關(guān)閉 Profile Management Tool。

  2. 檢查新配置文件現(xiàn)在是否已在底部面板中列出。然后單擊 OK 關(guān)閉 Preferences 窗口。

創(chuàng)建并啟動一個服務(wù)器

  1. Servers 選項卡 > 右鍵單擊 > New > Server。

圖 12. 新建一個服務(wù)器
新建一個服務(wù)器
  1. 選擇 "WebSphere Application Server v7.0" > Next。

圖 13. 選擇服務(wù)器類型
選擇服務(wù)器類型
  1. 確保選擇剛剛創(chuàng)建的配置文件的名稱 > Finish。

圖 14. IBM WebSphere Application Server 設(shè)置
IBM WebSphere Application Server 設(shè)置
  1. Servers 選項卡 > 右鍵單擊 "WebSphere Application Server v7.0.0.17 at localhost" > start。

圖 15. 啟動服務(wù)器
啟動服務(wù)器

導(dǎo)入并運行樣例應(yīng)用程序

樣例應(yīng)用程序使用了一個 Policy Set,默認情況下,IBM WebSphere Application Server 和 IBM Rational Application Developer 中沒有安裝它,因此必須先導(dǎo)入它。然后,可以將樣例應(yīng)用程序 EAR 文件導(dǎo)入 IBM Rational Application Developer 工作空間,并在上一節(jié)中創(chuàng)建的服務(wù)器上啟動它。應(yīng)用程序運行后,就可用于發(fā)送一個同步 Web 服務(wù)請求。但是,這將產(chǎn)生一個異常,而不是返回一條成功響應(yīng)消息,因為樣例應(yīng)用程序中的 WS-Policy 是無效的。

  1. 將樣例應(yīng)用程序所需的提供者策略集導(dǎo)入 IBM WebSphere Application Server:選擇 Servers 選項卡 > 右鍵單擊 "WebSphere Application Server v7.0.0.17 at localhost" > Administration > Run Administrative Console...

圖 16. 運行 Administrative Console
運行 Administrative Console
  1. Administrative Console > Services / Policy Sets / Application Policy Sets > Import... > From default repository...

圖 17. 導(dǎo)入 Policy Set
導(dǎo)入 Policy Set
  1. 滾動到頁面底部,單擊箭頭移動到第 2 頁。

  2. 選中 "WS-Security default" 旁邊的復(fù)選框 > OK > Save。

圖 18. 選擇 WS-Security 默認 Policy Set
選擇 WS-Security 默認 Policy Set
  1. 退出并關(guān)閉 Administrative Console。

  2. 將樣例應(yīng)用程序所需的提供者策略集導(dǎo)入 IBM Rational Application Developer 并下載本文包含的 WSSecurity default.zip 文件。

  3. 在 Enterprise Explorer 視圖中右鍵單擊 > Import > Import...

圖 19. 打開導(dǎo)入向?qū)?/h5>打開導(dǎo)入向?qū)? height=
  1. Web services / WebSphere Policy Sets > Next

圖 20. 導(dǎo)入 Policy Set
導(dǎo)入 Policy Set
  1. 瀏覽導(dǎo)入的文件 > Finish

圖 21. 導(dǎo)入下載的 Policy Set
導(dǎo)入下載的 Policy Set
  1. 導(dǎo)入已破壞的樣例應(yīng)用程序并下載本文包含的 InvalidPolicy.ear 文件。

  2. 右鍵單擊 Enterprise Explorer > Import > EAR File。

圖 22. 導(dǎo)入一個 EAR 文件
導(dǎo)入一個 EAR 文件
  1. 瀏覽您下載的文件,確認目標運行庫 = "WebSphere Application Server v7.0.0.17" > Finish

圖 23. 導(dǎo)入下載的 EAR 文件
導(dǎo)入下載的 EAR 文件
  1. 注意,使用 IBM Rational Application Developer 附帶的默認插件時,樣例應(yīng)用程序的編譯沒有錯誤。

圖 24. 導(dǎo)入的樣例應(yīng)用程序編譯沒有錯誤
導(dǎo)入的樣例應(yīng)用程序編譯沒有錯誤
  1. 運行已破壞的樣例應(yīng)用程序并選擇 Servers 選項卡 > 右鍵單擊 "WebSphere Application Server v7.0.0.17 at localhost" > Add and Remove...

圖 25. 打開 Add and Remove 向?qū)?/h5>打開 Add and Remove 向?qū)? height=
  1. 選擇 Available 列中的 InvalidPolicy > Add > Finish

圖 26. 添加已破壞的樣例應(yīng)用程序
添加已破壞的樣例應(yīng)用程序
  1. 應(yīng)用程序成功發(fā)布后,請注意,服務(wù)器狀態(tài)已經(jīng)更改為 [Started, Synchronized]。

圖 27. 檢查服務(wù)器狀態(tài)
檢查服務(wù)器狀態(tài)
  1. 打開一個 Web 瀏覽器,導(dǎo)航到 http://<WAS_HOST>:<WAS_PORT>/wssamplesei/demo,例如 http://localhost:9080/wssamplesei/demo。

  2. 選擇 Message Type = Synchronous Echo, Message String = hello > Send Message。一個異常會出現(xiàn)。

圖 28. 調(diào)用已破壞的樣例應(yīng)用程序 Web 服務(wù)
調(diào)用已破壞的樣例應(yīng)用程序 Web 服務(wù)

分析錯誤并定位無效 WS-Policy

當 Server Runtime Environment 中出現(xiàn)錯誤時,錯誤日志會顯示在 IBM Rational Application Developer 中的控制臺視圖中。在本例中,將有一個錯誤指出客戶端上的 WS-Security 配置中有問題,需要確定客戶端是否是使用提供者 WSDL 文檔中的 WS-Policy 配置的。

  1. 查看 IBM Rational Application Developer 中的控制臺并觀察下面的消息:

清單 1. 運行已破壞的樣例應(yīng)用程序后的錯誤
1
2
3
4
5
6
[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=[{}]).
  1. 注意,生成策略集配置時,客戶端上出現(xiàn)了錯誤:

清單 2. 錯誤堆棧跟蹤
1
2
3
[23/05/11 14:40:12:921 BST] 0000001f SystemErr     R    at
com.ibm.ws.wspolicy.runtime.handler.ClientWSPolicyHandlerImpl.
generatePolicySetConfigurations(ClientWSPolicyHandlerImpl.java:282)
  1. 注意,Web 服務(wù)客戶端被配置為使用提供者策略。

  2. 選擇 Services 視圖 > JAX-WS/Clients/SampleClientSei: {http://com/ibm/was/wssample/sei/echo/}EchoService > Manage Policy Set Attachment...

圖 29. 管理客戶端 Policy Set 附件
管理客戶端 Policy Set 附件
  1. 注意,所有服務(wù)都被設(shè)置為 "Acquire Provider Policy"。

圖 30. 查看每個服務(wù)的策略獲取
查看每個服務(wù)的策略獲取
  1. 單擊 "Use Provider Policy...",觀察是否使用 HTTP GET 從默認 WSDL URL 中獲取策略。

圖 31. 查看提供者策略 WSDL URL
查看提供者策略 WSDL URL
  1. 定位包含提供者策略的 WSDL 文件并導(dǎo)航到 http://<WAS_HOST>:<WAS_PORT>/WSSampleSei/EchoService?wsdl,例如 http://localhost:9080/WSSampleSei/EchoService?wsdl。

  2. 注意,這個 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 文件
定位 Echo.wsdl 文件

安裝 Validator for WS-Policy in Eclipse 插件

由于已經(jīng)確認提供者 WSDL 文檔中的 WS-Policy 有問題,但 Eclipse 中的現(xiàn)有驗證器沒有發(fā)現(xiàn)原因所在,因此將安裝 Validator for WS-Policy in Eclipse 插件。安裝將通過其他 Eclipse 插件使用的標準更新機制來完成。

  1. alphaWorks 下載 VWPE.zip,這個 Zip 文件包含 Validator for WS-Policy in Eclipse 1.0。

  2. 在一個本地目錄中解壓 VWPE.zip,在指定目錄中創(chuàng)建一個本地更新站點。

  3. Help > Install New Software...

  4. 單擊 Add...

圖 33. 新增一個存儲庫
新增一個存儲庫
  1. 單擊 Local...,選擇前面解壓的 VWPE 目錄。

圖 34. 選擇 VWPE 目錄
選擇 VWPE 目錄
  1. 輸入 Name VWPE 并單擊 OK。

  2. 選擇 Validator for WS-Policy in Eclipse 插件并單擊 Next。

圖 35. 選擇要安裝的插件
選擇要安裝的插件
  1. 檢查安裝細節(jié)并單擊 Next。

圖 36. 檢查要安裝的項目
檢查要安裝的項目
  1. 檢查并接受許可,單擊 Finish。

圖 37. 檢查許可
檢查許可
  1. 單擊 OK 忽略安全警告。

圖 38. 忽略安全警告
忽略安全警告
  1. 安裝完成后,單擊 Restart Now 重啟帶有新插件的 IBM Rational Application Developer。

圖 39. 重啟 IBM Rational Application Developer
重啟 IBM Rational Application Developer

配置 Validator for WS-Policy in Eclipse

要驗證是否已經(jīng)正確安裝該插件,則應(yīng)該檢查配置,確保驗證器已經(jīng)啟用并且會在 WSDL 文檔上運行。

  1. 重啟 IBM Rational Application Developer 后,請轉(zhuǎn)到 Window > Preferences。

  2. Validation > 確保 WS-Policy 驗證器已經(jīng)啟用("Manual" 和 "Build" 復(fù)選框均已選中)。

圖 40. 確保已啟用 WS-Policy 驗證器
確保已啟用 WS-Policy 驗證器
  1. 單擊 "WS-Policy validator" 旁邊的 "..." 按鈕打開 Settings。

  2. 檢查 WS-Policy Validator 是否會在所有擴展名為 wsdl 和 xml 的文件上運行。單擊 Cancel。

圖 41. 驗證器使用的文件類型
驗證器使用的文件類型
  1. Validation / WS Policy Validator。注意,這個子頁允許使用自定義架構(gòu)文件。默認情況下,這個架構(gòu)目錄是空的,以便使用插件提供的架構(gòu)。下面的 “測試架構(gòu)” 將詳細介紹相關(guān)內(nèi)容。

圖 42. WS Policy Validator 架構(gòu)目錄
WS Policy Validator 架構(gòu)目錄

驗證已破壞的樣例應(yīng)用程序中的無效 WS-Policy

項目中的所有文件都將將獲得驗證,提供者 WSDL 文檔中會出現(xiàn)一個 WS-Policy 錯誤,此前將該文檔標識為客戶端配置錯誤的根源。可以使用一個標記來標識無效的特定 WS-Policy 斷言,錯誤消息會說明有一個斷言缺失。可以使用規(guī)范和提供者配置作為指導(dǎo),通過添加缺失的斷言來解決這個問題。

圖 43. 驗證 WS-Policy
驗證 WS-Policy
  1. 驗證結(jié)束時,單擊 OK 關(guān)閉 Validation Results 對話框。

圖 44. 驗證結(jié)果
驗證結(jié)果
  1. 注意,會有一個新的 Invalid WS-Policy 錯誤出現(xiàn)在 Markers 選項卡中。該錯誤指出 AlgorithmSuite 斷言至少必須出現(xiàn)一次。

圖 45. Markers 選項卡中的 Invalid WS-Policy 錯誤
Markers 選項卡中的 Invalid WS-Policy 錯誤
  1. 雙擊錯誤會打開 InvalidPolicy/SampleServicesSei/WebContent/WEB-INF/wsdl/Echo.wsdl 文件,并會突出顯示相關(guān)的行。注意,這是我們前面指出的那個文件。它包含 Web 服務(wù)提供者發(fā)布的 WS-Policy,客戶端正在使用這個提供者策略來配置自己。

  2. 注意,錯誤位于一個 AsymmetricBinding 斷言中。

圖 46. 無效 AsymmetricBinding 斷言
無效 AsymmetricBinding 斷言
  1. 注意 WS-Security Policy 1.2 規(guī)范 中的 AsymmetricBinding 斷言的語法。正如錯誤中說明的那樣,AlgorithmSuite 是必需的,但它缺少以下內(nèi)容:

清單 3. AsymmetricBinding 斷言語法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<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>
  1. 注意 AlgorithmSuite Assertion 的語法:

清單 4. AlgorithmSuite Assertion 的語法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<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>
  1. Servers 選項卡 > 右鍵單擊 "WebSphere Application Server v7.0.0.17 at localhost" > Administration > Run Administrative Console...

  2. Services / Policy sets / Application policy sets > WS-Security default

圖 47. WS-Security 的默認策略
WS-Security 的默認策略
  1. 單擊 WS-Security

圖 48. WS-Security 策略
WS-Security 策略
  1. 單擊 Main Policy

圖 49. Main policy
Main policy
  1. 單擊 Algorithms for asymmetric tokens。注意,提供者正在使用 Basic128Rsa15。

圖 50. Algorithms
Algorithms
  1. 退出并關(guān)閉 Administrative Console。

  2. 將以下 WS-Policy 斷言添加到 Echo.wsdl 中,以便使用 Basic128Rsa15 斷言(在 Layout 斷言上面的 AsymmetricBinding/Policy 斷言中):

清單 5. 樣例應(yīng)用程序的 Algorithm Suite 策略
1
2
3
4
5
<ns2:AlgorithmSuite>
 <wsp:Policy>
 <ns2:Basic128Rsa15 />
 </wsp:Policy>
</ns2:AlgorithmSuite>
  1. 保存更改。注意,Invalid WS-Policy 錯誤消失了。

重新運行修改后的樣例應(yīng)用程序

要使 WS-Policy 更改在客戶端配置上生效,必須重啟服務(wù)器。應(yīng)用程序重新運行后,會發(fā)送另一個 Web 服務(wù)請求,這次會收到一條成功響應(yīng)消息。WS-Security 配置錯誤不會再出現(xiàn)在控制臺日志中。

  1. Servers 選項卡 > 右鍵單擊 "WebSphere Application Server v7.0.0.17 at localhost" > Restart。這可以確保重新創(chuàng)建的是客戶端策略集,而不是使用前面的無效配置的緩存副本。

圖 51. 重啟服務(wù)器
重啟服務(wù)器
  1. 導(dǎo)航到 http://<WAS_HOST>:<WAS_PORT>/WSSampleSei/EchoService?wsdl,例如 http://localhost:9080/WSSampleSei/EchoService?wsdl,確保 WSDL 已經(jīng)刷新,AlgorithmSuite 斷言存在。

  2. 導(dǎo)航到 http://<WAS_HOST>:<WAS_PORT>/wssamplesei/demo,例如 http://localhost:9080/wssamplesei/demo。

  3. 選擇 Message Type = Synchronous Echo, Message String = hello > Send Message。

  4. 響應(yīng)成功返回,字符串 hello 返回。

圖 52. 調(diào)用修改后的樣例應(yīng)用程序 Web 服務(wù)
調(diào)用修改后的樣例應(yīng)用程序 Web 服務(wù)
  1. 注意,這個錯誤不再出現(xiàn)在控制臺記錄中。

總結(jié)

樣例應(yīng)用程序在提供者 WSDL 文檔中包含無效 WS-Policy。由于客戶端被配置為讀取 WS-Policy 并使用它配置客戶端的 WS-Security 設(shè)置,因此 Web 服務(wù)調(diào)用會失敗。

要調(diào)試這個失敗,請檢查控制臺中的日志中的錯誤。日志中顯示的一個錯誤表明問題出現(xiàn)在客戶端策略集配置中??蛻舳吮慌渲脼槭褂脕碜?WSDL 文檔的提供者策略,這意味著 WS-Policy 存在無效的可能性。

安裝 Validator for WS-Policy in Eclipse 插件后,要驗證項目中的所有文件。唯一的錯誤出現(xiàn)在提供者的 WSDL 文件中,錯誤指出缺少一個 AlgorithmSuite 斷言。當打開文件時,錯誤標記也會指出 Assymmetric 綁定斷言中缺失 AlgorithmSuite 斷言。

為修復(fù)此錯誤,我們添加了與提供者的配置相對應(yīng)的 AlgortithmSuite 斷言。這個插件提供的文檔還包含更多 WS-Policy 驗證錯誤示例,并介紹了如何修復(fù)這些錯誤。

提供者的 WSDL 文檔中的 WS-Policy 的長度超過 100 行,沒有一個標準 Eclipse 驗證器能夠識別其中的錯誤。而且,WS-Security Policy 非常復(fù)雜,因此手動驗證每個斷言非常耗時,而且手動驗證很容易出錯。顯然,如果沒有 Validator for WS-Policy in Eclipse,這個小錯誤將花費大量時間和精力才能得以解決。

創(chuàng)建自己的架構(gòu)

Validator for WS-Policy in Eclipse 由一些現(xiàn)有的架構(gòu)提供,這些架構(gòu)可用于支持 IBM WebSphere Application Server 7.0 的所有 WS-Policy 斷言。但是,可以通過其他規(guī)范使用的用戶定義架構(gòu)來擴展該插件。例如,您可能想在您的 WSDL 中包含一些 WS-Policy 斷言,供另一個平臺上的端點使用。本節(jié)將展示如何為 Validator for WS-Policy in Eclipse 構(gòu)造一個支持 WS-Eventing 規(guī)范 的架構(gòu)。

WS-Eventing 描述了使用 Web 服務(wù)在另一個 Web 服務(wù)或應(yīng)用程序中注冊您感興趣的活動的方法。它描述了允許服務(wù)管理其事件相關(guān)訂閱的訂閱管理器。為了表明對 WS-Eventing 的支持,指定了兩個 WS-Policy 斷言。EventSource 斷言用于表明服務(wù)接受創(chuàng)建訂閱的請求,SubscriptionManager 斷言表明服務(wù)支持代表其他服務(wù)管理訂閱。這兩個斷言的結(jié)構(gòu)都比較簡單,因此可以作為展示如何創(chuàng)建架構(gòu)的簡單示例。驗證器的架構(gòu)文件的格式是經(jīng)過預(yù)先設(shè)計的,以便從一個正式規(guī)范創(chuàng)建架構(gòu)成為一個簡單任務(wù)。因此,這種格式主要基于 WS-Security Policy 等 OASIS 規(guī)范中使用的語法慣例。但是,驗證器的確需要向這個語法信息添加一些額外的元數(shù)據(jù)并對其結(jié)構(gòu)實施一些限制。架構(gòu)文件被劃分為很多部分,每個部分都以一個位于方括號中的標題開頭。

前兩個部分關(guān)注與規(guī)范有關(guān)的 XML 命名空間。第一個部分是 [Namespaces],它列示架構(gòu)中使用的命名空間前綴及其對應(yīng)的經(jīng)過限定的命名空間,類似于基本 XML 文檔中的 xmlns 屬性。注意,與 xmlns 不同,使用的每個命名空間都必須通過其前綴進行聲明,并在架構(gòu)的其余部分通過前綴引用;不支持使用完全限定的斷言。對于 WS-Eventing,我們只關(guān)心一個命名空間,即 WS-Eventing 命名空間;在規(guī)范的 3.5 節(jié) 中提供了這個命名空間,它使用了前綴 wse。我們將這部分編碼如下:

清單 6. 架構(gòu)的命名空間部分
1
2
3
4
[Namespaces]
<
    wse = "http://www./2011/03/ws-evt"
>

我們還必須在 [PolicyNamespaces] 部分中指定規(guī)范支持的 WS-Policy 規(guī)范的版本。這允許驗證器驗證斷言中嵌入的 WS-Policy 是否使用正確的規(guī)范版本,并對 WS-Policy 斷言的屬性使用正確的驗證(WS-Policy 1.2 和 1.5 之間有區(qū)別)。WS-Eventing 規(guī)范只提到 WS-Policy 1.5,因此我們將這個部分編碼如下:

清單 7. 架構(gòu)的 PolicyNamespace 部分
1
2
3
4
[PolicyNamespaces]
<
   "http://www./ns/ws-policy"
>

架構(gòu)的其余部分關(guān)注斷言本身。每個頂級斷言都應(yīng)該在一個單獨的 [Syntax] 部分中描述。這些部分的語法非常類似于 Web 服務(wù)規(guī)范中使用的語法,通常可以從那些部分進行輕松修改。對于在幾個頂級斷言中包含重復(fù)斷言片段的規(guī)范,可以在 [Referenced] 部分中包含這些片段。但是,WS-Eventing 規(guī)范不需要這種設(shè)置。

為創(chuàng)建 EventSource 斷言的 [Syntax] 部分,我們要先復(fù)制規(guī)范的 9.1 節(jié) 中展示的語法,如下所示:

清單 8. 規(guī)范中展示的 EventSource 斷言的語法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<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>

然后,我們需要進行以下修改,以便使其遵守驗證器支持的架構(gòu)格式:

  • <wse:EventSource ...> 之后添加基數(shù)指示符 ?,指出頂級斷言在策略中不是必需的。如果不這樣做,驗證器會期望在其驗證的每個策略中找到這個斷言。

  • 移動基數(shù)指示符,使其出現(xiàn)在 <wse:FilterDialect>、<wse:FormatName><wse:NotificationPolicy> 的起始標記而不是結(jié)束標記之后。

  • 從標記集合中移除 xs:any*。通過閱讀規(guī)范中給出的描述,我們發(fā)現(xiàn)這些標記旨在表明元素的可擴展性,因此我們使用省略號...替代它們。

  • 替換為 Expires 斷言的屬性提供的 xs:duration 類型,因為驗證器不支持該類型。xs:unsignedLong 是一個合適的替代類型。

修改后的語法如下所示:

清單 9. 架構(gòu)中將包含的 EventSource 斷言的經(jīng)過修改的語法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[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 斷言創(chuàng)建一個 [Syntax] 部分,這可以通過應(yīng)用上面的規(guī)則來完成。這些規(guī)則普遍適用于以這種形式提供語法的架構(gòu)?,F(xiàn)在就完成了我們的架構(gòu);完成的文件作為一個下載本文提供。

測試架構(gòu)

創(chuàng)建支持 WS-Eventing 的架構(gòu)后,現(xiàn)在可以使用安裝了 Validator for WS-Policy in Eclipse 的 IBM Rational Application Developer 來測試它。驗證器將默認情況下會使用 Eclipse 插件 jar 中分發(fā)的架構(gòu)文件。要使用您自己的架構(gòu)文件,則必須將驗證器配置為指向從中讀取架構(gòu)文件的目錄:

  1. Window > Preferences

  2. 從列表中選擇 WS-Policy Validator。

  3. 單擊首選項頁上的瀏覽按鈕,選擇一個目錄。然后,驗證器將讀取選中目錄中所有擴展名為 .schema 的文件。刪除這個字段的內(nèi)容會導(dǎo)致驗證器再次使用默認位置。

  4. 如果您想將您自己的架構(gòu)添加到驗證器提供的架構(gòu)中,請將驗證器分發(fā)的 .schema 文件復(fù)制到您配置的目錄中。這些文件可以從插件 jar 文件中的架構(gòu)文件夾提取。

  5. 重啟 IBM Rational Application Developer 使更改生效。

圖 53. 配置驗證器使用的架構(gòu)目錄
配置驗證器使用的架構(gòu)目錄

現(xiàn)在我們創(chuàng)建一些 WS-Policy 來進行驗證:

  1. 切換到 Resource 透視圖。

  2. File > New... > Project

  3. 在 New Project 對話框中選擇 General > Project。然后單擊 Next。

  4. 輸入一個項目名稱并單擊 Finish。

  5. File > New > File

  6. 選擇您的項目并輸入一個合適的文件名,例如 policy.xml。

  7. 向您的文件添加一些策略。下面的策略應(yīng)該夠用:

清單 10. 測試架構(gòu)的基本策略
1
2
3
4
5
6
7
8
9
10
11
<wsp:Policy xmlns:wsp="http://schemas./ws/2004/09/policy"
xmlns:wse="http://www./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:///Notif_WSDL_Metadata" />
</wse:FormatName>
</wse:EventSource>
</wsp:Policy>

如果架構(gòu)正確,則不會出現(xiàn)驗證錯誤。您將看到一個關(guān)于 mex:Location 元素的警告,因為該元素不是架構(gòu)的一部分。

圖 54. WS-Eventing 斷言的正確驗證
WS-Eventing 斷言的正確驗證

要確保驗證正在工作,可以通過插入兩個 DateTimeSupported 元素使我們的策略無效,其中一個元素應(yīng)該會導(dǎo)致錯誤。

圖 55. 重復(fù)的 DateTimeSupported 斷言導(dǎo)致的驗證錯誤
重復(fù)的 DateTimeSupported 斷言導(dǎo)致的驗證錯誤

故障診斷

如果驗證結(jié)果不是預(yù)期的,可以查看 Eclipse 錯誤日志(Window > Show View > General > Error Log)。架構(gòu)解析器將生成異常,它們應(yīng)該有助于您診斷問題。例如,如果我們忘記更改 xs:Duration 屬性類型,則會看到以下異常:

com.ibm.alphaworks.wspolicy.validator.SchemaParsingException: Unrecognised attribute key: duration

圖 56. 架構(gòu)解析器生成的一個異常
架構(gòu)解析器生成的一個異常

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多