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

分享

開發(fā)者關(guān)于 JAX-RPC 的介紹,第 1 部分: 了解 JAX-RPC 類型映射系統(tǒng)的各個方面

 不會游泳的魚 2007-06-25

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ù)代碼來闡述重點部分。



使用 jax-rpc 框架的 acme booksellers 樣本 web 服務(wù)應(yīng)用程序

該書店提供伙伴可以以各種方式使用的服務(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ù)組。這樣一種類型并不定義 minOccursmaxOccurs 所有可能的組合。對于那些試圖映射所有與 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 、 outinout ,這取決于您要怎樣處理參數(shù)。

表 1. 參數(shù)傳遞樣式


定義參數(shù)的位置 參數(shù)樣式 可能的 JAX-RPC 映射類 樣本 JAX-RPC 映射類
wsdl:input in 包裝器類或 JavaBean java.lang.Integer
wsdl:output out Holder IntHolderStringHolder
wsdl:inputwsdl: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:bindingJAX-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ù)客戶機以及其他的核心概念)。在那之前,請努力掌握此處所概述的類型映射信息。



參考資料

  • 您可以參閱本文在 developerWorks 全球站點上的 英文原文.

  • 請從來源(即 Java 社區(qū)過程)處獲取 JAX-RPC 規(guī)范

  • JAX-RPC 規(guī)范的參考實現(xiàn)是基于 Apache Axis 測試版 3Sun 的 Web Services Developer Pack的。本文的代碼已經(jīng)使用這些技術(shù)測試過了。

  • 您還可以體驗最新版本的 IBM Web Services Toolkit,您可以從 alphaWorks 上得到它。

  • 在閱讀這一系列文章時,您可能會發(fā)現(xiàn)參考下列 W3C 規(guī)范是很方便的:
  • 下列小組正努力使 Web 服務(wù)可以相互操作:
  • 如需關(guān)于 Web 服務(wù)類型映射的更多信息,請查看 Gavin Bong 的系列文章“Apache SOAP Type Mapping”( developerWorks,2002 年 3 月)的 第 1 部分第 2 部分。


關(guān)于作者

作者相片

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


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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多