http://www-128.ibm.com/developerworks/cn/webservices/ws-uwsdl/part1/
如何發布和查找 WSDL 服務描述
Peter Brittenham, 資深軟件工程師, IBM 新興技術 Francisco Cubera, 研究人員, IBM T.J. Watson 研究中心 Dave Ehnebuske, 杰出的工程師, IBM 軟件組 Steve Graham, Web 服務體系架構設計師, IBM 軟件組
2001 年 9 月
Web 服務描述語言(WSDL)有多種用法。特別是,根據應用程序的需要,WSDL 在 UDDI 注冊中心有好幾種使用方法。在這第 1 篇文章中(本系列共三篇),我們將介紹一下在 UDDI 注冊中心使用 WSDL 的幾種不同的方法。
Web 服務描述語言(WSDL)是用于描述 Web 服務的一種 XML 語言,它將 Web 服務描述為一組對消息進行操作的網絡端點。一個 WSDL 服務描述包含對一組操作和消息的一個抽象定義,綁定到這些操作和消息的一個具體協議,和這個綁定的一個網絡端點規范。
統一描述發現和集成(UDDI)提供一種發布和查找服務描述的方法。UDDI 數據實體提供對定義業務和服務信息的支持。WSDL 中定義的服務描述信息是 UDDI 注冊中心信息的補充。UDDI 提供對許多不同類型的服務描述的支持。因此,UDDI 沒有對 WSDL 的直接支持, 也沒有對任何其它服務描述機制的直接支持。
UDDI 組織,即 UDDI.org,已經發布了一個優化方法文檔,標題為 在 UDDI 注冊中心 1.05 中使用 WSDL(請參閱 參考資料)。這個優化方法文檔描述了關于如何在 UDDI 注冊中心發布 WSDL 服務描述的一些元素。本文的目的就是增加這種信息。主要的焦點問題是如何將一個完整的 WSDL 服務描述映射到 UDDI 注冊中心,現有的 WSDL 工具和運行時環境要求必須做到這一點。本文中的信息遵守那個優化方法文檔中列出的大致過程, 且與 WSDL 1.1、UDDI 1.0 和 UDDI 2.0 規范一致(請參閱 參考資料)。
UDDI 和 WSDL 概述 在描述將 WSDL 服務描述映射到 UDDI 注冊中心的過程之前,很重要的一點是要理解 UDDI 數據類型和主要的 WSDL 文檔類型。
UDDI 數據類型 在 UDDI 注冊中心有 4 種主要的數據類型: businessEntity、 businessService、 bindingTemplate和 tModel。 圖 1展示了所有這些數據類型之間的關系。
圖 1. UDDI 數據類型
businessEntity 提供關于商家的信息,可以包含一個或多個 businessService。 這個商家是服務提供者。Web 服務的技術和業務描述在 businessService 和其 bindingTemplate 中被定義。每個 bindingTemplate 包含一個對一個或多個 tModel 的引用。tModel 被用于定義服務的技術規范。
WSDL 文檔類型 為幫助在 UDDI 注冊中心發布和查找 WSDL 服務描述,WSDL 文檔被分為兩種類型: 服務接口(service interface )和 服務實現(service implementations)(請參閱 圖 2)。
圖 2. WSDL 文檔類型
服務接口由 WSDL 文檔來描述,這種文檔包含服務接口的 types、 import、 message、 portType和 binding等元素。服務接口包含將用于實現一個或多個服務的 WSDL 服務定義。它是 Web 服務的抽象定義,并被用于描述某種特定類型的服務。
通過使用一個 import 元素,一個服務接口文檔可以引用另一個服務接口文檔。 例如,一個僅包含 message 和 portType 元素的服務接口可以被另一個僅包含此 portType 的綁定的服務接口引用。
WSDL 服務實現文檔將包含 import和 service元素。服務實現文檔包含實現一個服務接口的服務的描述。import 元素中至少會有一個將包含對 WSDL 服務接口文檔的引用。一個服務實現文檔可以包含對多個服務接口文檔的引用。
WSDL 服務實現文檔中的 import 元素包含兩個屬性。 namespace的屬性值是一個與服務接口文檔中的 targetNamespace相匹配的 URL。 location屬性是一個用于引用包含完整的服務接口定義的 WSDL 文檔的 URL。port 元素的 binding屬性包含對服務接口文檔中的某個特定綁定的引用。
服務接口文檔由 服務接口提供者開發和發布。服務實現文檔由 服務提供者創建和發布。服務接口提供者與服務提供者這兩個角色在邏輯上是分離的,但他們可以是同一個商業實體。
發布和查找 WSDL 描述 這一部分描述發布和查找一個完整的 WSDL 服務描述的過程。一個完整的 WSDL 服務描述是由一個服務接口和一個服務實現文檔組成的。
由于服務接口表示服務的可重用定義,它在 UDDI 注冊中心被作為 tModel 發布。 服務實現描述服務的實例。每個實例都是使用一個 WSDL service 元素定義的。服務實現文檔中的每個 service 元素都被用于發布 UDDI businessService。
當發布一個 WSDL 服務描述時,在服務實現被作為 businessService 發布之前,必須將一個服務接口作為一個 tModel 發布。
圖 3包含從 WSDL 到 UDDI 的映射概覽。我將在下面的部分中對這個映射加以描述。
圖 3. 從 WSDL 到 UDDI 的映射概覽
發布服務接口 在 UDDI 注冊中心,服務接口被作為 tModel 發布。tModel 由服務接口提供者發布。tModel 中的一些元素是使用來自 WSDL 服務接口描述中的信息構建的。
UDDI tModel 表 1定義創建 tModel 步驟。一個有效的對 WSDL 服務接口定義的 tModel 引用應該是使用 targetNamespace 命名,并且必須包含 overviewURL 和 categoryBag 設置。
表 1: 創建 tModel 的步驟
|
UDDI tModel |
WSDL 服務接口 |
描述 |
必需 |
1 |
name |
definitions 元素的 targetNamespace 屬性 |
tModel 名稱使用服務接口文檔的目標名稱空間設置。名稱需要一致以確保只使用服務實現文檔中的信息就可以定位 tModel。 |
是 |
2 |
description |
definitions 元素中的 documentation 元素 |
tModel description 元素被限制為只能使用 256 個字符。這個元素的英文值可根據 definitions 元素的前 256 個字符設置(documentation 元素與服務接口文檔中的 definitions 元素相關聯)。如果 documentation 元素不存在,那么應該使用 definitions 元素中的 name 屬性。 |
否 |
3 |
overviewURL |
[服務接口文檔 URL 和綁定規范] |
服務接口文檔的位置必須在 overviewURL 元素中設置。如果服務接口文檔中有多個綁定,那么必須在 URL 中對綁定進行編碼。 |
是 |
4 |
categoryBag |
[不可用] |
tModel 的 categoryBag 必須至少包含一個鍵控的引用。這個鍵控的引用必須包含一個對 uddi-org:types tModel 的引用,而且鍵名必須是 wsdlSpec 。這個條目把 tModel 當作一個 WSDL 服務接口定義。 |
是 |
服務接口到 tModel 的映射示例 清單 1包含一個示例 WSDL 服務接口文檔。映射到 UDDI tModel 中的值顯示在圖表關鍵字中。 清單 1:示例 WSDL 服務接口
<?xml version="1.0"?>
<definitions name="StockQuoteService-interface"
targetNamespace="http://www.getquote.com/StockQuoteService-interface"
xmlns:tns="http://www.getquote.com/StockQuoteService-interface"
xmlns:xsd=" http://www.w3.org/2001/XMLSchema "
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns="http://schemas.xmlsoap.org/wsdl/">
<documentation>
Standard WSDL service interface definition for a stock quote service.
</documentation>
<message name="SingleSymbolRequest">
<part name="symbol" type="xsd:string"/>
</message>
<message name="SingleSymbolQuoteResponse">
<part name="quote" type="xsd:string"/>
</message>
<portType name="SingleSymbolStockQuoteService">
<operation name="getQuote">
<input message="tns:SingleSymbolRequest"/>
<output message="tns:SingleSymbolQuoteResponse"/>
</operation>
</portType>
<binding name="SingleSymbolBinding"
type="tns:SingleSymbolStockQuoteService">
<soap:binding style="rpc"
transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="getQuote">
<soap:operation soapAction="http://www.getquote.com/GetQuote"/>
<input>
<soap:body use="encoded"
namespace="urn:single-symbol-stock-quotes"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</input>
<output>
<soap:body use="encoded"
namespace="urn:single-symbol-stock-quotes"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</output>
</operation>
</binding>
</definitions>
|
關鍵字:
Definitions― targetNamespace 將被用作 tModel 的名稱。documentation 元素的內容將被用于描述 tModel。 Binding― 綁定名將被用于限定 overviewURL。
清單 2包含在發布 WSDL 服務接口定義時創建的 UDDI tModel。 值顯示在圖表關鍵字中。 清單 2:根據 WSDL 服務接口創建的 UDDI tModel
<?xml version="1.0"?>
<tModel tModelKey="">
<name>http://www.getquote.com/StockQuoteService-interface</name>
<description xml:lang="en">
Standard service interface definition for a stock quote service.
</description>
<overviewDoc>
<description xml:lang="en">
WSDL Service Interface Document
</description>
<overviewURL>
http://www.getquote.com/services/
SQS-interface.wsdl#SingleSymbolBinding
</overviewURL>
</overviewDoc>
<categoryBag>
<keyedReference tModelKey="UUID:C1ACF26D-9672-4404-9D70-39B756E62AB4"
keyName="uddi-org:types" keyValue="wsdlSpec"/>
<keyedReference tModelKey="UUID:DB77450D-9FA8-45D4-A7BC-04411D14E384"
keyName="Stock market trading services"
keyValue="84121801"/>
</categoryBag>
</tModel>
|
關鍵字:
tModel― tModel 的名稱根據 targetNamespace 設置。描述是根據與 definitions 元素相關聯的 documentation 元素設置的。overviewURL 被設置為 WSDL 服務接口文檔可通過網絡訪問到的位置, 即 http://www.getquote.com/services/SQS-interface.wsdl。它還包含對服務接口文檔中名為的 SingleSymbolBinding 的綁定的直接引用。既然這是服務接口文檔中唯一的綁定,對綁定的這個引用就不是必需的。categoryBag 包含 wsdlSpec 條目以及其它的所有 keyedReference,keyedReference 指出這個服務接口描述的意向中的商業用途。
發布服務實現 服務實現在 UDDI 注冊中心是作為帶有一個或多個 bindingTemplate 的 businessService 發布的。 businessService 由服務提供者發布。
UDDI businessService 將為服務實現文檔中定義的每個 service 元素創建一個新的 businessService。 下面的表中包含 businessService 元素列表,這些 businessService 元素可根據 WSDL 服務實現文檔的內容創建。
|
UDDI businessService |
描述 |
必需 |
1 |
name |
businessService 的 name 元素根據服務實現文檔中的 service 元素的 name 屬性設置。 |
是 |
2 |
description |
description 元素根據 service 元素中的 documentation 元素的內容設置。 description 元素的英文值根據與 service 元素關聯的 documentation 元素中的前 256 個字符設置。如果 documentation 元素不存在,那么 businessService 的 description 元素就沒有被設置。 |
否 |
UDDI bindingTemplate 新的 bindingTemplate 元素是在 businessService 中為 service 元素中定義的每個 port 元素而定義的。
|
UDDI bindingTemplate |
描述 |
必需 |
1 |
description |
如果 port 元素包含一個 documentation 元素,那么就有一個 description 元素是根據 documentation 元素的前 256 個字符設置的。 |
否 |
2 |
accessPoint |
對于一個 SOAP 或 HTTP 綁定,accessPoint 是根據與 port 元素關聯的擴展元素的 location 屬性設置的。 這個元素將包含 URL,且 URLType 屬性是根據此 URL 中的協議設置的。對于不使用 URL 規范的協議綁定,應該使用 URLType 屬性指出協議綁定的類型, 并且 accessPoint 元素應該包含一個可用于定位使用指定協議的 Web 服務的值。 |
是 |
3 |
tModelInstanceInfo |
bindingTemplate 將包含自己引用的每個 tModel 的一個 tModelInstanceInfo 元素。至少將有一個 tModelInstanceInfo 元素包含對表示服務接口文檔的 tModel 的直接引用。 |
是 |
4 |
overviewURL |
overviewURL 元素可能包含對服務實現文檔的一個直接引用。對這個文檔的引用僅用于提供對人類可讀的文檔的訪問。這個文檔中的其它所有信息都應該能夠通過 UDDI 數據實體訪問。通過維持對原始 WSDL 文檔的直接引用,您可以確保被發布的文檔就是查找操作返回的那個。如果這個文檔包含多個端口,那么這個元素應該包含對端口名的直接引用。 由于可能會有多個端口引用同一個綁定,只使用 tModel 中的直接引用是不夠的。 端口名被指定為 overviewURL 上的片段標識符。片段標識符是 URL 的一個擴展,使用“#”字符作為一個分隔符。 |
否 |
服務實現到 businessService 的映射示例 清單 3包含 WSDL 服務實現文檔的一個示例。突出顯示的值是將 WSDL 信息映射到 UDDI businessService 和 bindingTemplate 時必需的值。值顯示在圖表關鍵字中。 清單 3:WSDL 服務實現示例
<?xml version="1.0"?>
<definitions name="StockQuoteService"
targetNamespace="http://www.getquote.com/StockQuoteService"
xmlns:interface="http://www.getquote.com/StockQuoteService-interface"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns="http://schemas.xmlsoap.org/wsdl/">
<documentation>
This service provides an implementation of a standard stock quote service.
The Web service uses the live stock quote service provided by XMLtoday.com.
The XMLtoday.com stock quote service uses an HTTP GET interface to request
a quote, and returns an XML string as a response.
For additional information on how this service obtains stock quotes, go to
the XMLtoday.com web site: http://www.xmltoday.com/examples/soap/stock.psp.
</documentation>
<import namespace="http://www.getquote.com/StockQuoteService-interface"
location="http://www.getquote.com/wsdl/SQS-interface.wsdl"/>
<service name="StockQuoteService">
<documentation>Stock Quote Service</documentation>
<port name="SingleSymbolServicePort"
binding="interface:SingleSymbolBinding">
<documentation>Single Symbol Stock Quote Service</documentation>
<soap:address location="http://www.getquote.com/stockquoteservice"/>
</port>
</service>
</definitions>
|
關鍵字:
Service― service 元素的 name 屬性被用作 businessService 的名稱。service 元素中的 documentation 元素被用于描述 businessService。 Import― 端口名被附加到 overviewURL,此 overviewURL 包含對服務實現文檔的引用。服務的位置被用于設置 bindingTemplate 中的 accessPoint。
清單 4包含根據服務實現文檔創建的 UDDI businessService 定義。categoryBag 應該包含一個或多個 keyedReference,它們被用于對服務意向中的商業用途進行分類。值顯示在圖表關鍵字中。 清單 4:根據 WSDL 服務實現創建的 UDDI 商業服務
<businessService businessKey="..." serviceKey="...">
<name>StockQuoteService</name>
<description xml:lang="en">
Stock Quote Service
</description>
<bindingTemplates>
<bindingTemplate bindingKey="..." serviceKey="...">
<description>
Single Symbol Stock Quote Service
</description>
<accesssPoint URLType="http">
http://www.getquote.com/singlestockquote
</accessPoint>
<tModelInstanceDetails>
<tModelInstanceInfo tModelKey="[tModel Key for Service Interface]">
<instanceDetails>
<overviewURL>
http://www.getquote.com/services/SQS.wsdl
</overviewURL>
</instanceDetails>
</tModelInstanceInfo>
</tModelInstanceDetails>
</bindingTemplate>
</bindingTemplates>
<categoryBag>
<keyedReference tModelKey="UUID:DB77450D-9FA8-45D4-A7BC-04411D14E384"
keyName="Stock market trading services"
keyValue="84121801"/>
</categoryBag>
</businessService>
|
關鍵字:
BusinessService― businessService 的 name 根據 WSDL 服務實現文檔中的 service 的 name設置。 description 根據 service 元素中的 documentation 元素設置。 BindingTemplate― 它的 description 是根據 port 元素中的documentation 元素設置。accessPoint 根據 soap:address 擴展元素設置。tModelKey 被設置到與服務接口文檔關聯的 tModel 的 UUID。可使用 import 元素的 namespace 屬性對 tModel 進行定位。overviewURL 是服務實現文檔的位置。 由于它是這個文檔中唯一的引用,它不包含對 SingleServiceQuote 端口的引用。
查找 WSDL 服務接口描述 所有的 WSDL 服務接口在 UDDI 注冊中心都是作為 tModel 發布。對這些 tModel 中的每一個都要進行歸類,以便將它們標識為 WSDL 服務描述。UDDI find_tModel 消息可用于查找已經分過類的 tModel。使用 UDDI V1.0 API 時, 清單 5中列出的 find_tModel 消息可用于定位所有的 WSDL 服務接口描述。 清單 5:查找 WSDL 服務接口描述
<?xml version="1.0"?>
<find_tModel generic="1.0" xmlns="urn:uddi-org:api">
<categoryBag>
<keyedReference tModelKey="UUID:C1ACF26D-9672-4404-9D70-39B756E62AB4"
keyName="uddi-org:types" keyValue="wsdlSpec"/>
</categoryBag>
</find_tModel>
|
find_tModel 消息將返回一列 tModel 關鍵字。使用 get_tModelDetail 消息可檢索特定的服務接口描述。get_tModelDetail 消息將返回一個 tModel, 比如 清單 2中列出的那個。
在檢索了一個 tModel 后,可使用 overviewURL 檢索 WSDL 服務接口文檔的內容。
可將另外的 keyedReference 添加到 categoryBag 以限制這個查找請求的響應中返回的 tModel 集。 清單 6中的 find_tModel 消息可用于定位使用 WSDL 定義的所有股票報價服務。 清單 6:查找期望的商業用途的 WSDL 服務接口
<?xml version="1.0"?>
<find_tModel generic="1.0" xmlns="urn:uddi-org:api">
<categoryBag>
<keyedReference tModelKey="UUID:C1ACF26D-9672-4404-9D70-39B756E62AB4"
keyName="uddi-org:types" keyValue="wsdlSpec"/>
<keyedReference tModelKey="UUID:DB77450D-9FA8-45D4-A7BC-04411D14E384"
keyName="Stock market trading services"
keyValue="84121801"/>
</categoryBag>
</find_tModel>
|
查找 WSDL 服務實現描述 WSDL 服務實現在 UDDI 注冊中心是作為 businessService 發布的。businessService 將包含一個或多個 bindingTemplate。對 businessService 進行歸類,以便將它看作基于 WSDL 的服務描述。使用 UDDI V1.0 API 時,必須找到一個 businessEntity 或一個 businessEntity 集才能使用 businessService 的查找 API。同樣地,也必須找到一個 businessService 或一個 businessService 集才能使用查找 API 定位 bindingTemplate。
查找 UDDI businessService 有兩種基本方法可用于查找服務描述。使用特定的分類法,UDDI find_service 消息可用于查找服務描述,或者說它可用于查找實現某個特定的服務接口的服務描述。
使用 UDDI V1.0 API 時,可為某個特定的 businessEntity 發出 清單 7中的消息,以便定位股票報價服務實現這個 businessService。可將另外的 keyedReference 添加到 categoryBag 以縮小對此消息的響應中返回的服務描述的范圍。 清單 7:查找 WSDL 服務實現描述
<?xml version="1.0"?>
<find_service businessKey="..." generic="1.0" xmlns="urn:uddi-org:api">
<categoryBag>
<keyedReference tModelKey="UUID:DB77450D-9FA8-45D4-A7BC-04411D14E384"
keyName="Stock market trading services"
keyValue="84121801"/>
</categoryBag>
</find_service>
|
find_service 消息也可用于定位 businessService ― 該 businessService 是某個特定服務接口的實現。 清單 8中的消息包含 find_service 消息的一個示例,它將查找 businessEntity 中的所有 businessService,這個 businessEntity 實現了股票報價服務的服務接口。由于服務接口是用 tModel 來表示,tModelBag 就被用于指定 WSDL 服務接口與股票報價服務相關聯的 tModel 關鍵字。 清單 8:使用 tModelBag 查找 WSDL 服務實現描述
<?xml version="1.0"?>
<find_service businessKey="..." generic="1.0" xmlns="urn:uddi-org:api">
<tModelBag>
<tModelKey>[tModel key for WSDL service interface]</tModelKey>
</tModelBag>
</find_service>
|
find_service 消息將返回一列服務關鍵字。可使用 get_serviceDetail 消息檢索 businessService 描述。get_serviceDetail 消息將返回一個 businessService,比如 清單 4中的那個。
檢索了一個 businessService 后,可選擇某個特定的 bindingTemplate 調用 Web 服務。bindingTemplate 中的 accessPoint 是服務的端點。overviewURL 可用于檢索 WSDL 服務實現文檔的內容,該文檔可能包含關于已實現服務的額外詳細信息。
查找 UDDI bindingTemplate 如果 businessService 包含多個 bindingTemplate,可能會很難確定要使用哪個 bindingTemplate。 find_binding 消息可用于定位應該使用的 bindingTemplate。
清單 9包含一條 find_binding 消息,可用它來檢索引用特定的 tModel 的 bindingTemplate。可將這個 tModel 與 WSDL 服務接口描述中的特定綁定關聯起來。 清單 9:查找 UDDI bindingTemplate
<?xml version="1.0"?>
<find_binding serviceKey="..." generic="1.0" xmlns="urn:uddi-org:api">
<tModelBag>
<tModelKey>[tModelKey for WSDL service interface]<tModelKey/>
</tModelBag>
</find_service>
|
這條消息將返回一個或多個 bindingTemplate,比如 清單 10中的那個。訪問過 bindingTemplate 之后,accessPoint 中列出了 Web 服務的端點。 如果 bindingTemplate 是根據現有的 WSDL 服務實現文檔創建的,那么 overviewURL 可能包含一個對這個文檔的引用。可訪問這個文檔獲取額外的、人類可讀的關于 Web 服務的信息, 這些信息在 UDDI 注冊中心找不到。 清單 10:UDDI bindingTemplate
<?xml version="1.0"?>
<bindingTemplate bindingKey="" serviceKey="">
<accesssPoint URLType="http">
http://www.getquote.com/singlestockquote
</accessPoint>
<tModelInstanceDetails>
<tModelInstanceInfo tModelKey="[tModel Key for Service Interface]">
<instanceDetails>
<overviewURL>
http://www.getquote.com/services/SQS.wsdl
</overviewURL>
</instanceDetails>
</tModelInstanceInfo>
</tModelInstanceDetails>
</bindingTemplate>
|
總結 本文已經描述了在 UDDI 注冊中心發布和查找完整的 WSDL 服務描述的過程。WSDL 服務接口描述是作為 UDDI tModel 發布的,而 WSDL 服務實現描述是作為 UDDI businessService 發布的。 圖 4提供了從 WSDL 服務接口和服務實現文檔到 UDDI 注冊中心條目的映射概覽。
在本系列的下一篇文章中,我們將討論在開發者經常遇到的 5 種不同情形下在 UDDI 注冊中心使用 WSDL 所需的精確代碼。
圖 4:從 WSDL 到 UDDI 的映射概覽
在本系列的下一篇文章中,我們將對不同的 WSDL 用法個案研究應用本文中描述的過程。 每個用法個案研究都將舉例說明應該如何在 UDDI 注冊中心發布不同類型的 WSDL 服務描述。
參考資料
作者簡介 Peter Brittenham 目前是 IBM Web Services Toolkit的首席體系架構設計師。Web Services Toolkit 包含使用 SOAP 和 WSDL 構建 Web 服務所需的工具和運行時支持,以及在 UDDI 注冊中心發布和查找服務定義的運行時支持。可通過 peterbr@us.ibm.com與他聯系。 |
Francisco Curbera 是 IBM TJ Watson 研究中心的一個研究人員,他于 1993 加入該研究中心。他主要致力于組件軟件開發以及基于標準的分布式計算應用框架的設計和實現。他是 Web 服務描述語言(WSDL)的合作者之一,還為 Web 服務領域的其它幾個規范的定義和實現做出了貢獻。他從西班牙 Universidad Complutense de Madrid 大學獲得了物理學理科碩士學位,并從哥倫比亞大學獲得了計算機科學博士學位。可通過 curbera@us.ibm.com與他聯系。
|
Dave Ehnebuske 是 IBM 的軟件組中的一位杰出的工程師, 負責應用集成和中間件的開發。他是 SOAP 1.1 的合著者之一,同時還是 W3C XML 協議工作組的成員,這個組的主要工作是對 SOAP 進行標準化。可通過 davide@us.ibm.com與他聯系。
|
Steve Graham 是 IBM 軟件組的新興技術分部的一位體系架構設計師。他在前幾年一直從事面向服務的體系結構,最近還成了 IBM Web Services Initiative 的一員。在此之前,Steve 擔任各種新興技術如 Java 和 XML 的技術專家和顧問,此前他還是IBM Smalltalk 咨詢小組中的體系架構設計師和顧問。 在加入 IBM 之前,Steve 曾是 Sybase 開發者、顧問和 Waterloo 大學計算機科學系的教員。Steve 持有 Waterloo 大學的計算機科學的 BMath 和 MMAth。可通過 sggraham@us.ibm.com與他聯系。
| |