2002 年 12 月 01 日
用
于基于 XML 的遠(yuǎn)程過程調(diào)用的 Java API(Java APIs for XML-Based Remote Procedure
Call,JAX-RPC)是實現(xiàn) Web 服務(wù)互操作性的一個重要的促進步驟。在這第一篇文章中(共兩篇),Joshy Joseph
將帶您了解這種互操作性工作的核心:JAX-RPC 類型映射系統(tǒng)。您將了解如何把 XML 類型轉(zhuǎn)換為 Java 類型,以確保 Web
服務(wù)客戶機和基于 Java 的應(yīng)用程序之間能夠進行平穩(wěn)的數(shù)據(jù)交換。
用于基于
XML 的遠(yuǎn)程過程調(diào)用的 Java API(JAX-RPC)在 Java 社區(qū)過程(Java Community
Process)已經(jīng)達(dá)了最終推薦階段,被命名為 JSR 101。XML Web 服務(wù)供應(yīng)商已經(jīng)開始把這個軟件包作為一個核心 API,用以在
Java 平臺上構(gòu)建可互操作的 Web
服務(wù)。在這一系列文章中,我將使用樣本代碼在整個過程中對您進行指導(dǎo),帶您逐步了解該標(biāo)準(zhǔn)提供的主要功能。在這一系列文章的最后,您將熟悉
JAX-RPC 規(guī)范的核心功能;這些知識將有助于服務(wù)開發(fā)者、客戶機開發(fā)者以及工具箱開發(fā)者設(shè)計盡可能可以互操作的 Web 服務(wù)。
對于這里的討論,我將假定您熟悉基本的 Web 服務(wù)概念(如 SOAP、WSDL 和 XML)。(請參閱下面的
參考資料部
分,以獲取關(guān)于這些概念以及其他相關(guān)主題的更多信息。)您將要碰到的代碼樣本都是用 Apache Axis 測試版 3 和 Sun 的 Web
Services Developer Pack 開發(fā)的 — 換言之,這些代碼樣本是用 JAX-RPC 規(guī)范的參考實現(xiàn)開發(fā)的。
本文是一個由兩部分組成的系列文章的第一部分。我將從討論 JAX-RPC
的最重要方面之一 — 即類型映射系統(tǒng) — 開始討論。這個系統(tǒng)使運行時系統(tǒng)能夠?qū)?WSDL 文檔中定義的每種 XML 類型映射為 Java
服務(wù)接口所指定的相應(yīng) Java 類型,反之亦然。這是使 Web 服務(wù)可實現(xiàn)互操作的
一個主要步驟。JAX-RPC 為一組已擴展的 XML 類型和 Java 類型指定可擴展的類型映射支持。JAX-RPC
運行時系統(tǒng)實現(xiàn)序列化框架以支持該類型映射。
在隨后的一篇文章中,我將根據(jù)在此處已經(jīng)建立的基礎(chǔ)進行討論,深入介紹該規(guī)范其余部分的具體細(xì)節(jié)。
基本的 JAX-RPC 概念
作
為一名 Web 服務(wù)開發(fā)者,您應(yīng)該已經(jīng)熟悉 Web 服務(wù)標(biāo)準(zhǔn)(SOAP、WSDL、XML)所提供的優(yōu)勢和體系結(jié)構(gòu)方面的靈活性了。Web
服務(wù)背后的概念幫助您使用抽象的接口設(shè)計松散耦合的服務(wù),這樣就可以把服務(wù)實現(xiàn)與服務(wù)定義分開。Web
服務(wù)社區(qū)面臨的最重要的問題是可互操作的服務(wù)的開發(fā)。為了解決這個問題,各個標(biāo)準(zhǔn)小組(包括 WS-I、OASIS、W3C 以及
SOAPBuilders)正在非常努力地為
互操作性定義標(biāo)準(zhǔn)(請參閱 參考資料以獲取更多信息)。
JAX-RPC
是 Java 社區(qū)的工作成果,用于徹底解決這一問題,并為客戶機端和服務(wù)器端的 Web
服務(wù)實現(xiàn)提供一個眾所周知的應(yīng)用程序編程接口(application programming interface,API)。通過采用一個面向
Web 服務(wù)的標(biāo)準(zhǔn) API,JAX-RPC
旨在幫助服務(wù)用戶(客戶機)和服務(wù)實現(xiàn)者獲得最大程度的靈活性,方法是通過把服務(wù)互操作性的重?fù)?dān)轉(zhuǎn)移到運行時基礎(chǔ)架構(gòu)。通過采用標(biāo)準(zhǔn)組織提供的全局標(biāo)準(zhǔn)、
使用定義明確的概要文件(例如 WS-I)以及創(chuàng)建 IDE 和其他開發(fā)工具來與這些標(biāo)準(zhǔn)相匹配,運行時框架可以提供連接級別的互操作性。
就其本質(zhì)而言,JAX-RPC 定義并使用了一種基于 XML 的遠(yuǎn)程過程調(diào)用機制。它使服務(wù)器(即服務(wù)提供者)能夠用標(biāo)準(zhǔn)的 API 定義其服務(wù)并且能夠用 WSDL 描述其服務(wù);它使客戶機(即服務(wù)消費者)能夠用標(biāo)準(zhǔn)的 API 與服務(wù)器進行通信。
該規(guī)范內(nèi)容詳盡(大約 160 頁)并且向 Java 開發(fā)者介紹了新的編程模式。下面就是我將在這一系列文章中討論的概念的列表:
- 類型映射系統(tǒng)
- 服務(wù)端點
- 異常處理
- 服務(wù)端點上下文
- 消息處理程序
- 服務(wù)客戶機和服務(wù)上下文
- 帶附件的 SOAP
- 運行時服務(wù)
- JAX-RPC 客戶機調(diào)用模型
如上所述,這第一篇文章將僅著重介紹第一個概念:JAX-RPC 的類型映射系統(tǒng)。在后面的一篇文章中,我將探討該規(guī)范的其他關(guān)鍵概念。
在我介紹每個主題時,我將用一個虛構(gòu)的書店(以下稱 Acme Booksellers)所提供的樣本 Web 服務(wù)代碼來闡述重點部分。
該書店提供伙伴可以以各種方式使用的服務(wù):
- 消費者可以根據(jù)某個搜索標(biāo)準(zhǔn)(ISBN、作者姓名等)搜索書籍。
- 經(jīng)批準(zhǔn)的作者可以上載書籍的更新。
- 評論者可以撰寫書籍評論。
大家都知道,進入 Web 服務(wù)體系結(jié)構(gòu)和實現(xiàn)有兩種體系結(jié)構(gòu)方式:
- 自頂向下(即從 WSDL 入手)
- 自底向上(即從 Java 實現(xiàn)類入手)
我將用 Acme Booksellers 樣本解釋如何使用與 JAX-RPC 編程模型一致的自頂向下的設(shè)計和實現(xiàn)。您可以在
附錄中看到用于樣本服務(wù)的 WSDL 文件。一旦研究過其代碼后,您就可以繼續(xù)進行下一部分了。
JAX-RPC 的類型映射系統(tǒng):介紹
JAX-RPC
規(guī)范最重要的成就之一就是它定義了一個標(biāo)準(zhǔn),該標(biāo)準(zhǔn)用于將 WSDL 文檔(它表示了服務(wù)描述)映射為其 Java 表示(服務(wù)端點、存根、綁定以及
Java 類型),反之亦然。以前這是一個主要的易引起混淆的地方,因為每個 Web 服務(wù)工具箱供應(yīng)商對于相關(guān)的標(biāo)準(zhǔn)(WSDL、SOAP 和
XML)以及這些標(biāo)準(zhǔn)之間的關(guān)系都有自己的解釋。因為這些標(biāo)準(zhǔn)并行發(fā)展并且尚未成熟到足可依賴的程度,所以更增加了這種混淆。
讓我們深入討論細(xì)節(jié)問題以了解 JAX-RPC 是如何通過定義一個公共編程模型來設(shè)法徹底解決這些問題的。請注意,這個標(biāo)準(zhǔn)化成就是建立在 WSDL 1.1 和 SOAP 1.1 的基礎(chǔ)上的。
JAX-RPC 規(guī)范中關(guān)于 WSDL 到 Java 的映射那部分解決了下列問題:
- 將 XML 類型映射為 Java 類型
- 將抽象的 WSDL 定義(端口類型、操作和消息)映射為 Java 接口和 Java 類。
- 將具體的 WSDL 定義(端口、綁定和服務(wù))映射為 Java 類。
我將逐個討論這些問題中的每一個。
將 XML 類型映射為 Java 類型
簡單類型
XML Schema 和 SOAP 1.1 編碼所定義的大多數(shù)簡單的 XML 數(shù)據(jù)類型被映射為其對應(yīng)的 Java 類型。您可以在 JAX-RPC 規(guī)范的表 4-1 中看到這種映射的詳細(xì)信息。(請參閱
參考資料)。
作為一名開發(fā)者,在映射簡單 XML 類型時,您應(yīng)該記住以下幾點。首先,JAX-RPC 映射規(guī)范沒有為
xsd:anyType 指定特定的 Java 映射。
其次,內(nèi)建的簡單 XML 數(shù)據(jù)類型的
nillable 屬性被設(shè)置為
true 的元素聲明被映射為一個對應(yīng)的 Java 基本類型的 Java 包裝器類。例如,下面的代碼被映射為
java.lang.Integer 。
<xsd:element name="code" type="xsd:int" nillable="true" />
|
這就為類型系統(tǒng)設(shè)計提供了將空(null)對象映射為其對應(yīng)的 XML 類型的靈活性。您可以在 JAX-RPC 規(guī)范的表 4-2 中看到這些映射的完整列表(請參閱
參考資料)。
最后,SOAP 1.1 編碼規(guī)范將其大多數(shù)的類型映射為
nillable 。JAX-RPC 使用 Java 封裝的對象來映射這些類型。請參閱 JAX-RPC 規(guī)范的表 4-3 以獲取更多信息。
 |
元數(shù)據(jù)和 JSR 175
Java
社區(qū)中正在進行一些努力以解決 Java 語言中元數(shù)據(jù)信息的不可用性問題。JSR 175 中提出的元數(shù)據(jù)工具將使 Java
類、接口、方法和域能夠用額外的屬性標(biāo)記。Web 服務(wù)領(lǐng)域中還有另一個項目(JSR 181)正在進行中,該項目使用這些元數(shù)據(jù)工具(屬性)來擴展
Web 服務(wù)配置及部署模型。
|
|
復(fù)雜類型
XML Schema 復(fù)雜類型被映射為若干個帶有 getter 和 setter 的 JavaBean 以訪問復(fù)雜類型中的每個元素。當(dāng)處理這些類型時,您需要記住幾點。首先請注意,雖然復(fù)雜類型包含
xsd:sequence ,但是在這些 JavaBean 中沒有保持元素的先后順序,這一點很重要。
其次,元素屬性
maxOccurs 值為正的復(fù)雜類型映射為一個相應(yīng)類型的 Java 數(shù)組。這樣一種類型并不定義
minOccurs 和
maxOccurs 所有可能的組合。對于那些試圖映射所有與 XML Schema 相關(guān)聯(lián)的語義的 Java 開發(fā)者來說,這可能是個問題。
最后,該映射的主要問題之一就是 XML 元素屬性映射。因為沒有與 Java 類相關(guān)聯(lián)的元數(shù)據(jù),所以當(dāng)您試圖將 JavaBean 轉(zhuǎn)換為 WSDL 時,可能會碰到映射問題;因此,JAX-RPC 規(guī)范并未指出如何映射
xsd:attribute 。然而,在進行 SOAP 綁定時,您可以將
SOAPElement 用于此目的。Java 語言擴展將來可能會對此進行調(diào)整;請參閱標(biāo)題為“
元數(shù)據(jù)和 JSR 175”的側(cè)欄以獲取更多關(guān)于這方面的信息。
下面的
清單 1向您展示了復(fù)雜類型映射是如何進行的。
清單 1. 正在進行的復(fù)雜類型映射
<xsd:complexType name ="Book"> <sequence> <element name="author" type="xsd:string" maxOccurs="10" /> <element name="price" type="xsd:float" /> </sequence> <xsd:attribute name="reviewer" type="xsd:string" /> </xsd:complexType>
|
在
清單 2中,您可以看到
清單 1中的類型如何被映射為帶有 getter 和 setter 方法的 JavaBean。
清單 2. 來自清單 1 的類型的 Java 映射
Public class Book{ private float price; private String[] author; private String reviewer; // attribute //.... public String[] getAuthor() {.......} public setAuthor(String[] author) {.......} public float getPrice() {.......} public void setPrice(float price) {.......} public String getReviewer() {.....} public void setReviewer(String reviewer) {.....} }
|
數(shù)組
JAX-RPC 將 XML 數(shù)組映射為帶操作符
[] 的 Java 數(shù)組。您可以在 WSDL 服務(wù)聲明中找到幾種不同種類的數(shù)組聲明。
第一種類型是 restriction 使用 WSDL 1.1 指定的
wsdl:ArrayType 屬性從
soapenc:Array 中派生出來的數(shù)組。
清單 3. 用 restriction 和 wsdl:ArrayType 定義數(shù)組
<complexType name = "ArrayOfString"> <complexContent> <restriction base="soapenc:Array"> <attribute ref="soapend:ArrayType" wsdlArrayType="xsd:string[]"> </restriction> </complexContent> </complexType>
|
JAX-RPC 將這些復(fù)雜數(shù)組類型映射為 Java
String[] ,
java.lang.String 作為數(shù)組中的元素。
下一種數(shù)組類型是 SOAP 1.1 規(guī)范所設(shè)置的 restriction 從
soapenc:Array 中派生出來的。
清單 4. 用 restriction 和 soapenc:Array 定義數(shù)組
<complexType name = "ArrayOfString"> <complexContent> <restriction base="soapenc:Array"> <sequence> <element name="stringArray" type="xsd:string" maxOccurs="unbounded" /> </sequence> </restriction> </complexContent> </complexType>
|
JAX-RPC 將這些復(fù)雜數(shù)組類型映射為 Java
String[] ,
java.lang.String 作為數(shù)組中的元素。
您在 WSDL 中可以找到的另一種數(shù)組聲明如下所示。
<element name="myNumbers" type="soapenc:Array" />
|
清單 5展示了上述模式的一個實例。
清單 5. 映射為 Java Object 數(shù)組
<myNumbers soapend:arrayType="xsd:int[2]" > <number>1</number> <number>2</number> </myNumbers>
|
該聲明被映射為一個 Java
Object 數(shù)組,這個數(shù)組中的各個元素對應(yīng)于 XML Schema 類型。(此處它映射為
integer 。)
最后,您還可以找到由用戶定義的 XML schema 類型構(gòu)造而成的數(shù)組。清單 6 展示了這種類型的定義:
清單 6. 定義一種模式類型
<complexType name="Article"> <all> <element name="name" type="xsd:string"> <element name="author" type="xsd:string"> </all> </complexType>
|
現(xiàn)在您需要定義一個
Article 類型的數(shù)組。
清單 7. 用用戶定義的模式類型定義一個數(shù)組
<complexType name="ArrayOfArticles"> <complexContent> <restriction base="soapenc:Array"> <sequence> <element name="article" type="tns:Article" maxOccurs="unbounded" /> </sequence> </restriction> </complexContent> </complexType>
|
WSDL 中的上述聲明映射為一個
Article (Article[] article;) 類型的 Java 數(shù)組。
將抽象的 WSDL 類型映射為 Java 類型
既然您理解了如何將 XML 類型映射為 Java 類型,我就要考慮 WSDL 的特殊情況了。首先,我將快速討論一下如何將抽象的 WSDL 類型映射為 Java 表示:
-
wsdl:porttype :
該類型被映射為服務(wù)端點接口;它擴展了
java.rmi.Remote 接口。在這一系列文章的下一篇文章中,我將討論服務(wù)端點接口以及它們的要求。
-
wsdl:operation :
因
為 WSDL 1.1 并沒指明操作名稱需要是唯一的,所以可以有多個名稱相同但參數(shù)不同的操作。您還應(yīng)該記住,JAX-RPC 規(guī)范僅支持 WSDL
規(guī)范定義的單向操作和請求-響應(yīng)操作;JAX-RPC
規(guī)范不支持要求-響應(yīng)(solicit-response)操作樣式或通知操作樣式。您可以用可選的 parameterOrder 屬性指定 WSDL 中的參數(shù)順序。
我們來看一下參數(shù)傳遞樣式。從
表 1 可以看出,這些參數(shù)傳遞樣式可以是
in 、
out 和
inout ,這取決于您要怎樣處理參數(shù)。
表 1. 參數(shù)傳遞樣式
定義參數(shù)的位置
|
參數(shù)樣式
|
可能的 JAX-RPC 映射類
|
樣本 JAX-RPC 映射類
|
wsdl:input
|
in
|
包裝器類或 JavaBean |
java.lang.Integer
|
wsdl:output
|
out
|
Holder 類
|
IntHolder 、
StringHolder 等
|
wsdl:input 和
wsdl:output
|
inout
|
Holder 類
|
IntHolder 、
StringHolder 等
|
如
表 1 所示,為了支持
out 參數(shù)和
inout 參數(shù),定義了一個新的
Holder 類。服務(wù)客戶機使用
Holder 類實例發(fā)送
out 參數(shù)或
inout 參數(shù)的值。
Holder 類的內(nèi)容是通過遠(yuǎn)程方法調(diào)用修改的,且服務(wù)客戶機在方法調(diào)用后可以使用這些修改過的內(nèi)容。還要注意,JAX-RPC 規(guī)范定義了大量
Holder 類以支持基本類型。您可以定義自己的
Holder 類以支持從名為
Holder 的標(biāo)準(zhǔn)接口派生出來的復(fù)雜類型。
讓我用一些樣本代碼來闡述這些要點。
清單 8包括一個樣本 WSDL 定義。
清單 8. 樣本 WSDL 定義
<xsd:complexType name="Authors"> <xsd:all> <xsd:element name="Authors" type="typens:AuthorArray"/> </xsd:all> </xsd:complexType> <message name="AuthorPresentRequest"> <part name="Authors" type="typens:Authors"/> </message> <message name="AuthorPresentResponse"> <part name="return" type="xsd:boolean"/> <part name="Authors" type="typens:Authors"/> </message> <portType name="AcmeAuthorPresentPortType"> <operation name="IsAuthorPresent"> <input message="typens:AuthorPresentRequest"/> <output message="typens:AuthorPresentResponse"/> </operation> </portType>
|
您可以看到輸入消息和輸出消息包含
Authors 類型作為參數(shù)。這是參數(shù)傳遞的
inout 樣式。這需要一個用于
Authors 類型的
Holder 類,如
清單 9所示。
清單 9. 為 Authors 類型創(chuàng)建一個樣本 Holder 類
public final class AuthorsHolder implements javax.xml.rpc.holders.Holder { public com.acme.www.Authors value; public AuthorsHolder() {} public AuthorsHolder(com.acme.www.Authors value) { this.value = value; } }
|
最后,
清單 10展示了如何實現(xiàn) Java 端點。
清單 10. Java 端點實現(xiàn)
public interface AcmeAuthorPresentPortType extends java.rmi.Remote { public boolean isAuthorPresent(AuthorsHolder authors) throws java.rmi.RemoteException; }
|
您需要理解服務(wù)端點接口的名稱以及端點方法的簽名是怎樣派生的。它們可以從
wsdl.portType 的名稱屬性和操作定義中派生,或者從
wsdl.binding 名稱和操作聲明中派生。這是您要記住的重要一點,因為可以有不同樣式的多個綁定(例如 RPC/文檔)指向同一個
portType 。這種綁定樣式上的差異可能會導(dǎo)致創(chuàng)建出帶有不同名字和簽名的不同端點。因此,您應(yīng)該謹(jǐn)防這種有混淆的映射。
 |
SOAP 消息樣式和操作編碼
您已經(jīng)知道存在兩種 SOAP 消息樣式,
文檔和
RPC,它們定義了 SOAP 消息正文的格式。還存在兩種對操作的參數(shù)進行編碼的模式,即
文字的(literal)和
編碼的(encoded)。
表 2列出了 SOAP 消息樣式和模式并說明了 JAX-RPC 是如何對其進行定義的。
|
|
將具體的 WSDL 類型映射為 Java 類型
現(xiàn)在請把您的注意力轉(zhuǎn)到具體的 WSDL 元素以及它們的 Java 映射上。
-
wsdl:binding :
JAX-RPC 沒有為
wsdl.binding 定義任何標(biāo)準(zhǔn)的 Java 表示。這意味著運行時可以定義所需的綁定。至少,JAX-RPC 運行時系統(tǒng)應(yīng)該為具有如下特征的 SOAP 綁定提供支持:
- 帶有已編碼的操作模式(RPC/編碼的)的 RPC 樣式。
- 帶有文字的操作模式(文檔/文字的)的文檔樣式。
在進行文字映射時,每個消息部件都被映射為一種 Java 類型,早些時候我在前面的
將 XML 類型映射為 Java 類型部分中已經(jīng)描述過這一點。如果不存在這種映射,那么就使用一個
javax.xml.soap.SOAPElement Java 類來表示消息部件。這種映射的一個示例就是包含多個屬性的復(fù)雜類型。因為沒有為屬性定義標(biāo)準(zhǔn)的映射,所以這種復(fù)雜類型就被表示為
SOAPElement 。
請參閱標(biāo)題為
SOAP 消息樣式和操作編碼的側(cè)欄以及
表 2以獲取關(guān)于這些不同樣式和模式的更多信息。
表 2. SOAP 消息樣式和 JAX-RPC
樣式(SOAP 消息正文格式)
|
模式(參數(shù)編碼)
|
JAX-RPC 相關(guān)信息
|
文檔(用一種模式定義正文格式) |
文字的(對每種參數(shù)編碼使用 XML Schema) |
必需的 |
文檔 |
編碼的(使用 SOAP Section 5 編碼) |
可選的 |
RPC(用 SOAP Section 7 規(guī)則定義正文格式) |
編碼的 |
必需的 |
RPC |
文字的 |
可選的 |
-
wsdl:service :
這個 WSDL 具體定義對一組服務(wù)端點(或
wsdl:ports )進行分組。JAX-RPC 將
wsdl:service 映射為一個 Java 服務(wù)類。這個服務(wù)類實現(xiàn)
javax.xml.rpc.Service 接口或者一個生成的 Java 接口(該 Java 接口被映射為
wsdl.service 定義),它接著再實現(xiàn)
javax.xml.rpc.Service 。
這個服務(wù)類充當(dāng)以下內(nèi)容的工廠:
- 服務(wù)端點的動態(tài)代理(在這一系列文章的下一篇文章中對此有更多描述)。您可以在服務(wù)對象中使用
getPort(..) 方法創(chuàng)建動態(tài)代理。
- 一個
javax.xml.rpc.Call 類型的實例,它用于動態(tài)調(diào)用服務(wù)端點上的遠(yuǎn)程操作(在這一系列文章的下一篇文章中對此有更多描述)。該動態(tài)調(diào)用接口需要在運行時創(chuàng)建一個
Call 對象。為此,您可以使用服務(wù)類的
createCall(..) 操作。
- 一個生成的存根類實例(在這一系列文章的下一篇文章中對此有更多描述)。這些存根是由生成的類提供的,它們是由工具創(chuàng)建的。
實現(xiàn)
Service 接口是 JAX-RPC 運行時系統(tǒng)的責(zé)任。根據(jù)綁定要求可以存在不同的存根實現(xiàn)。還要注意,
Service 實現(xiàn)類應(yīng)該實現(xiàn)
java.io.Serializable 接口或
javax.naming.Referenceable 接口以支持 JNDI 名稱空間中的注冊。
 |
可擴展的類型映射支持
我
在這篇文章中已經(jīng)討論過,當(dāng)前的 JAX-RPC 規(guī)范定義了簡單類型的類型映射。因為這種類型映射不足以支持更復(fù)雜的數(shù)據(jù)類型,所以 JAX-RPC
規(guī)范已經(jīng)增加了支持,以便用可插的序列化器和反序列化器來擴展它的類型映射系統(tǒng)。當(dāng)前的規(guī)范提供應(yīng)用程序編程模型以開發(fā)可插性,并將可插性構(gòu)建到序列化器
和反序列化器中。請向您的 JAX-RPC
供應(yīng)商咨詢以獲得更多關(guān)于它對定制類型映射的支持以及它所支持的類型這些方面的信息。還要記住,這種靈活性有一個缺點:它可能會導(dǎo)致 Web
服務(wù)實現(xiàn)間的互操作性問題。
|
|
將 Java 類型映射為 WSDL
當(dāng)
然,JAX-RPC 規(guī)范中相當(dāng)大一部分討論了如何將 Java 類型映射為 XML 類型以及如何將 Java 服務(wù)端點接口映射為 WSDL
定義。這樣的映射類似于我在此處所介紹的映射,但過程相反。在此我不打算詳細(xì)解釋該過程。請參考 JAX-RPC 規(guī)范的第 5
節(jié)以獲取更多信息。這是用于 Web 服務(wù)設(shè)計的自底向上體系結(jié)構(gòu),它主要用于將現(xiàn)有的、基于 Java 的應(yīng)用程序轉(zhuǎn)換為 Web
服務(wù)或者用于創(chuàng)建包裝這些應(yīng)用程序的包裝器。
結(jié)束語以及展望
在
本文中,我已經(jīng)討論了 JAX-RPC 對簡單類型映射的支持。要獲得 Web
服務(wù)實現(xiàn)間最大程度的互操作性,您需要理解這個核心概念。雖然當(dāng)前的類型映射列表很詳細(xì),但它們還沒詳盡到足以支持?jǐn)?shù)據(jù)類型的所有要求。因此,JAX-
RPC 運行時實現(xiàn)者可以通過定制的序列化器自由支持其他可擴展的類型映射機制。
我希望這個關(guān)于 JAX-RPC 中的類型映射支持的討論有助于您領(lǐng)會 JAX-RPC 系統(tǒng)如何處理 XML 類型和 Java 類型以及如何將這些類型中的每一種類型轉(zhuǎn)換成其他類型而不喪失其語義這些基本概念。
在這一系列文章的下一部分中,我將討論 JAX-RPC 規(guī)范的其他方面(包括服務(wù)實現(xiàn)、服務(wù)客戶機以及其他的核心概念)。在那之前,請努力掌握此處所概述的類型映射信息。
參考資料
關(guān)于作者
 |

|
 |
Joshy Joseph 是 IBM OGSA 開發(fā)小組的一名軟件工程師。他的主要編程愛好是使用新興技術(shù)(如 Web 服務(wù)、語義 Web、REST、網(wǎng)格計算)以及使用基于 UML、AOP 和 XP 的編程模型。您可以通過
joshy@us.ibm.com與他聯(lián)系。
|
|