乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      在 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ī)范中使用的語法,通??梢詮哪切┎糠诌M行輕松修改。對于在幾個頂級斷言中包含重復(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ā)表

        請遵守用戶 評論公約

        類似文章 更多