Web 服務資源框架 (WSRF) 定義了有狀態資源的 Web 服務存取標準。IBM Lotus Expeditor 整合 WSRF,允許將 OSGi 服務作為資源發布。本文完整演示從領域建模、資源 Bundle 開發、提供者端組件生成、適配器綁定、客戶端生成到部署測試的全流程。
屬性:eMailID、preference、personDetails、contactInfo。工廠介面 AddressFactoryInterface 支援建立、刪除、查詢實例。
AddressInterface 以 Bean 風格定義屬性存取與服務方法。AddressFactoryImpl 而非單個 Address,便於多實例管理。AddressFactoryInterface 為資源類,自動推導 Bean 屬性為資源屬性。AddressAdapter 與 AddressWebservice 兩個專案。createResource:解析 ConfigInfo XML 取得 eMailID,調用工廠建立實例,返回 ResourceConfiguration(含 EndPointReference 參考參數)。getResource:從 ResourceConfiguration 取得 eMailID,調用工廠查找實例。destroyResource:同樣解析標識符,調用工廠刪除。為每個屬性實現 get/update/insert/delete。範例中 preference 的 update/insert 映射至 setPreference,get 映射至 getPreference,delete 拋異常(強制屬性)。
生成代碼已自動綁定至資源實例方法,無需修改。
https://localhost/ws/pid/Address?wsdl 可訪問。// 建立資源
EndpointReference resEPR = tc.createResource("wsrf_support@ibm.com");
// 設定 OperationContext 建立通道
OperationContext opContext = new OperationContext();
opContext.setToEPR(resEPR);
AddressSoap_Stub stub = new AddressSoap_Stub();
stub.setCurrentOperationContext(opContext);
// 測試 WSRF 標準操作:更新資源屬性
tc.testUpdateResourceProperty();
// 測試自訂服務方法:新增依賴項
tc.testAddDependants();
ConfigInfo XML 結構需與適配器解析邏輯一致:
<ConfigInfo> <AddressResource/> <eMailID>wsrf_support@ibm.com</eMailID> </ConfigInfo>
基於 SWT 的測試程式提供選單操作 WSRF 標準操作(資源屬性、生命週期)與自訂操作(工廠、服務方法),直觀驗證功能。
Lotus Expeditor 的 WSRF 實現將 OSGi 服務標準化為有狀態 Web 服務資源,工具鏈覆蓋建模、生成、綁定、部署、測試全生命週期。掌握適配器綁定邏輯是核心關鍵,實現 SOAP 訊息與領域模型的無縫轉換。