一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

用于Web服務(wù)的核心Java API

 jollyme 2005-09-13

Java技術(shù)社團(tuán)大約一年以前就在不懈地努力,想通過Java Community Process開發(fā)出用于Web服務(wù)的一組全面的標(biāo)準(zhǔn)Java API。有一些活動仍在進(jìn)行中,而其他活動則已經(jīng)完成或接近完成。在本文中,我將首次給出用于Web服務(wù)的所有Java API的一個快速概覽,然后再詳細(xì)介紹三個用于Web服務(wù)的核心Java API:用于XML消息傳遞的Java API(Java API for XML Messaging,JAXM)、用于遠(yuǎn)程過程調(diào)用的Java API(Java API for Remote Procedure Call,JAX-RPC)和用于XML注冊的Java API(Java API for XML Registry,JAXR)。Java API用于Web服務(wù)。中國IT動力uMHNXr1

首先讓我們來研究Web服務(wù)體系結(jié)構(gòu)的核心構(gòu)件。你起碼需要一種標(biāo)準(zhǔn)的方式來描述Web服務(wù)。另外還必須有一個注冊機(jī)制,通過該機(jī)制,服務(wù)提供者可以發(fā)布服務(wù),然后服務(wù)使用者可以發(fā)現(xiàn)服務(wù)。然后還必須有一種標(biāo)準(zhǔn)的方式,用于通過基于XML的消息的交換來調(diào)用服務(wù)。最后,為了在互聯(lián)網(wǎng)上完成業(yè)務(wù)事務(wù),還必須有一種標(biāo)準(zhǔn)的電子業(yè)務(wù)框架,用于定義業(yè)務(wù)合作的語義。中國IT動力uMHNXr1

下面的圖1演示了Web服務(wù)的這些核心構(gòu)件以及它們相應(yīng)的標(biāo)準(zhǔn)。首先,SOAP(簡單對象訪問協(xié)議)或ebXML消息傳遞服務(wù)用于服務(wù)調(diào)用,統(tǒng)一描述、發(fā)現(xiàn)和集成(Universal Description, Discovery and Integration,UDDI)或ebXML注冊和存儲用于服務(wù)發(fā)布和發(fā)現(xiàn),而WSDL(Web服務(wù)描述語言)用于基本服務(wù)描述。中國IT動力uMHNXr1

中國IT動力uMHNXr1

圖1:Web服務(wù)標(biāo)準(zhǔn)中國IT動力uMHNXr1

現(xiàn)在,讓我們快速復(fù)習(xí)一下用于Web服務(wù)的這些構(gòu)件的Java API。首先,對于服務(wù)描述有JSR 110,即用于WSDL的Java API。該API將讓你創(chuàng)建、處理和查詢WSDL文檔。但是,該API一般應(yīng)該由工具提供商來使用。一個更重要的JSR是JAX-RPC,這是一個特別從開發(fā)者的角度出發(fā)的API。JAX-RPC定義如何將WSDL文檔映射到相應(yīng)的Java API表示,反之亦然。JAXR用于服務(wù)注冊和發(fā)現(xiàn)及管理。而對于服務(wù)調(diào)用,JAXM和JAX-RPC將成為重要的工具。下表列出了與Web服務(wù)相關(guān)的所有Java API。中國IT動力uMHNXr1

用于Web 服務(wù)的Java API中國IT動力uMHNXr1

種類中國IT動力uMHNXr1

Web服務(wù)功能中國IT動力uMHNXr1

Java API中國IT動力uMHNXr1

當(dāng)前狀態(tài)
20021月)中國IT動力uMHNXr1

服務(wù)描述、消息傳遞、注冊中國IT動力uMHNXr1

     
 

WSDL文檔管理中國IT動力uMHNXr1

JSR 110 (Java API for WSDL)中國IT動力uMHNXr1

正在進(jìn)行專家討論中國IT動力uMHNXr1

 

WSDL到Java的映射中國IT動力uMHNXr1

JSR 101 (JAX-RPC, Java API for XML-based RPC)中國IT動力uMHNXr1

正在進(jìn)行公共評審中國IT動力uMHNXr1

 

XML消息傳遞(SOAP和ebXML消息服務(wù))中國IT動力uMHNXr1

JSR 67 (JAXM, Java API for XML messaging 1.0)中國IT動力uMHNXr1

發(fā)布于2001年11月中國IT動力uMHNXr1

 

XML注冊(UDDI和ebXML reg/rep)中國IT動力uMHNXr1

JSR 93(JAXR, Java API for XML registries 1.0)中國IT動力uMHNXr1

正在進(jìn)行第2階段的公共評審中國IT動力uMHNXr1

ebXML中國IT動力uMHNXr1

     
 

ebXML CPP/CPA 文檔管理中國IT動力uMHNXr1

JSR 157 (ebXML CPP/CPA API for Java)中國IT動力uMHNXr1

正在進(jìn)行專家討論中國IT動力uMHNXr1

J2EEWeb 服務(wù)中國IT動力uMHNXr1

     
 

企業(yè)Web服務(wù)中國IT動力uMHNXr1

JSR 109 (Implementing Enterprise Web Services)中國IT動力uMHNXr1

在2002年1月22日進(jìn)行了社團(tuán)評審中國IT動力uMHNXr1

 

J2EE的Web服務(wù)框架中國IT動力uMHNXr1

JSR 151 (J2EE 1.4)中國IT動力uMHNXr1

正在進(jìn)行專家討論中國IT動力uMHNXr1

 

基于XML的事務(wù)中國IT動力uMHNXr1

JSR156 (XML Transactioning API for Java, JAXTA)中國IT動力uMHNXr1

正在進(jìn)行專家討論中國IT動力uMHNXr1

XML文檔管理中國IT動力uMHNXr1

     
 

XML文檔解析和轉(zhuǎn)換中國IT動力uMHNXr1

JSR 5 (JAXP, XML Parsing)中國IT動力uMHNXr1

發(fā)布于2001年3月中國IT動力uMHNXr1

 

XML數(shù)據(jù)綁定中國IT動力uMHNXr1

JSR 31 (JAXB, XML Data binding)中國IT動力uMHNXr1

正在進(jìn)行專家討論中國IT動力uMHNXr1

安全中國IT動力uMHNXr1

     
 

基于XML的身份驗(yàn)證和不可抵賴中國IT動力uMHNXr1

JSR 105 (XML Digital Signature APIs)中國IT動力uMHNXr1

正在進(jìn)行專家討論中國IT動力uMHNXr1

 

基于XML的機(jī)密性中國IT動力uMHNXr1

JSR 106 (XML Digital Encryption APIs)中國IT動力uMHNXr1

正在進(jìn)行專家討論中國IT動力uMHNXr1

 

信任服務(wù)中國IT動力uMHNXr1

JSR 104 (XML Trust Service APIs)中國IT動力uMHNXr1

正在進(jìn)行專家討論中國IT動力uMHNXr1

 

安全斷言中國IT動力uMHNXr1

JSR 155 (Web Services Security Assertion)中國IT動力uMHNXr1

正在進(jìn)行專家討論中國IT動力uMHNXr1

對于電子業(yè)務(wù)框架,帶有ebXML消息傳遞服務(wù)描述的JAXM讓你利用較高級別的消息傳輸語義執(zhí)行服務(wù)調(diào)用,主要是在安全和可靠領(lǐng)域。JAXR還支持ebXML reg/rep作為一個基礎(chǔ)注冊提供者。還有一個新的JSR,即JSR-157,它的目標(biāo)是為創(chuàng)建、操縱和處理ebXML CPP/CPA文檔定義一個標(biāo)準(zhǔn)的Java API。中國IT動力uMHNXr1

還有其他兩個非常重要的JSR活動,它們的目標(biāo)是在Java 2 Platform, Enterprise Edition (J2EE)上定義一個公共的Web服務(wù)框架:JSR 109(即企業(yè)Web服務(wù))和JSR 151(即J2EE 1.4——下一版本的J2EE體現(xiàn)結(jié)構(gòu))。JSR 109和J2EE 1.4體系結(jié)構(gòu)將采用JAXM、JAX-RPC和JAXR作為核心結(jié)構(gòu)組件,以建立J2EE作為Web服務(wù)的開發(fā)和部署平臺。 中國IT動力uMHNXr1

還有用于XML文檔管理的Java API,其中JAXP用于XML文檔的解析和轉(zhuǎn)換,而JAXB用于XML數(shù)據(jù)綁定。Java技術(shù)社團(tuán)還努力定義用于基于XML的安全模式的API,這些API包括用于XML數(shù)字簽名的JSR 105、用于XML加密的JSR 106、用于信任服務(wù)的JSR 104和用于定義安全斷言標(biāo)記語言(Security Assertions Markup Language,SAML)的Java API的JSR 155。中國IT動力uMHNXr1

圖2顯示了J2EE體系結(jié)構(gòu)如何被用作Web服務(wù)開發(fā)和部署的平臺,以及哪些Java API對于實(shí)現(xiàn)Web服務(wù)是可用的。服務(wù)客戶端(不管是瀏覽器、蜂窩電話,還是其他應(yīng)用)通過用于Web服務(wù)的Java API交換XML數(shù)據(jù)(或者更可能是SOAP消息),從而與基于J2EE技術(shù)的服務(wù)進(jìn)行通信。服務(wù)實(shí)現(xiàn)可以是J2EE平臺業(yè)務(wù)組件的形式,例如servlets或EJB beans。中國IT動力uMHNXr1

中國IT動力uMHNXr1

圖2:基于J2EE體系結(jié)構(gòu)的Web服務(wù)體系結(jié)構(gòu)中國IT動力uMHNXr1

JAXM 中國IT動力uMHNXr1

JAXM為發(fā)送和接收SOAP消息提供一個標(biāo)準(zhǔn)的Java API。消息結(jié)構(gòu)和編碼規(guī)則是基于SOAP 1.1和SOAP with Attachment (SOAPATTACH)規(guī)范。JAXM還支持一個框架,高級的描述可以插入到該框架中,以支持基本SOAP上的擴(kuò)展語義。這些描述的例子有ebXML消息服務(wù)描述和SOAP RP描述。中國IT動力uMHNXr1

那么為什么使用JAXM呢?就像任何其他Java技術(shù)一樣,JAXM提供一個標(biāo)準(zhǔn)的Java API,所以應(yīng)用可以移植。JAXM還提供一個靈活的體系結(jié)構(gòu),在這種結(jié)構(gòu)中,提供商可以在維護(hù)你的應(yīng)用的可移植性的同時參加它們的實(shí)現(xiàn)。例如,我們后面將會講到,提供商可以實(shí)現(xiàn)帶有增加值特性(比如更高的可靠性或智能路由)的JAXM提供者。中國IT動力uMHNXr1

圖3顯示了JAXM(和就這點(diǎn)而論的JAX-RPC)的相互操作模型。前面已經(jīng)提到過,JAXM為發(fā)送和接收SOAP消息提供一個標(biāo)準(zhǔn)的Java API。只要基礎(chǔ)XML和傳輸協(xié)議是基于HTTP上的SOAP、JAXM或JAX-RPC,應(yīng)用就應(yīng)該可以與它們的對等體相互操作,而不管這些對等體是編寫為通過非-JAXM API或者是以Java以外的編程語言編寫的這一事實(shí)。中國IT動力uMHNXr1

中國IT動力uMHNXr1

圖3:JAXM相互操作模型中國IT動力uMHNXr1

JAXM結(jié)構(gòu)角色中國IT動力uMHNXr1

在JAXM運(yùn)行時環(huán)境中,可以有兩個結(jié)構(gòu)角色。一個是JAXM消息提供者(或者叫做JAXM提供者),另一個是JAXM客戶。而JAXM客戶又可以是兩種類型中的一種——一種使用JAXM提供者,另一種不使用JAXM提供者。(順便說一下,我們使用術(shù)語“JAXM客戶”是指JAXM API的一個用戶,而不是從傳統(tǒng)客戶和服務(wù)器通信模型的角度出發(fā)。例如,JAXM客戶可以提供可被其他客戶調(diào)用的SOAP服務(wù),或者該服務(wù)將從遠(yuǎn)程SOAP服務(wù)調(diào)用一個服務(wù)。所以把“JAXM客戶”叫做“JAXM應(yīng)用”更合適。但是既然JAXM規(guī)范使用術(shù)語“JAXM客戶”,我們也就使用它吧)。不使用JAXM提供者的JAXM客戶叫做獨(dú)立的JAXM客戶。中國IT動力uMHNXr1

JAXM消息提供者在后臺以JAXM客戶的名義工作,提供消息路由和可靠消息傳遞等功能,例如,通過分配消息標(biāo)識符或永久地在內(nèi)部保留著消息。事實(shí)上,不同的提供者提供的功能變化很大。JAXM提供者的服務(wù)是通信結(jié)構(gòu)的組成部分,而不是特定于某個應(yīng)用。因此,這些服務(wù)對JAXM客戶是完全透明的,JAXM客戶不了解提供者,除非建立了一個到該提供者的連接。中國IT動力uMHNXr1

正如前面所提到的,有兩種類型的JAXM客戶——一種使用JAXM消息提供者,另一種不使用JAXM消息提供者。既然解釋不使用JAXM消息提供者的JAXM客戶比較容易,那么我們就先來討論這種JAXM客戶。不使用JAXM消息提供者的JAXM客戶是一個獨(dú)立的Java 2 Platform, Standard Edition (J2SE)應(yīng)用,因?yàn)樵摽蛻魬?yīng)用有所有需要的Java類在它的地址空間中。但是獨(dú)立的JAXM客戶只可以在點(diǎn)到點(diǎn)的操作模式中工作。另外,獨(dú)立的JAXM客戶只可以發(fā)送消息到特定的目的。如果基礎(chǔ)傳輸協(xié)議是HTTP,那么該目的可以表示為URL。獨(dú)立的JAXM客戶也只在同步模式中工作。也就是說,它基本上以請求-響應(yīng)交互模型工作,因而不能以異步模式接收消息。中國IT動力uMHNXr1

現(xiàn)在我們來討論使用JAXM消息提供者的JAXM客戶類型。在這種情況下,JAXM客戶維持著一個與JAXM消息提供者的連接,并且該客戶發(fā)送或接收的所有消息都通過該JAXM消息提供者。在大多數(shù)Web消息傳遞場景中,JAXM客戶將使用一個JAXM消息提供者。在這種場景中,JAXM客戶被部署到一個容器中,這意味著它既可以同步發(fā)送消息,也可以異步發(fā)送消息。容器可以是J2EE Web容器或者是EJB容器。如果JAXM客戶被部署在EJB容器中,那么很可能該JAXM客戶是消息驅(qū)動Bean的形式;如果它被部署在Web容器中,它就擴(kuò)展JAXMServlet類。中國IT動力uMHNXr1

JAXM消息傳遞描述中國IT動力uMHNXr1

JAXM的一個重要特性就是支持高級別的消息傳遞描述。通過為指定高級別的語義(比如安全性、可靠性、事務(wù)和管理)而規(guī)定SOAP頭的一個特定用法,消息傳遞描述運(yùn)行在基本SOAP上。 SOAP的基本形式不支持基于尋址或基于消息傳遞的會話方案,也就是說,基本的SOAP消息沒有任何用于尋址信息(比如發(fā)送者、接收者、消息ID和相關(guān)信息)的字段。描述在這一領(lǐng)域也有幫助。JAXM可以支持很多工業(yè)標(biāo)準(zhǔn)消息描述,一個主要的例子是ebXML消息服務(wù)描述。中國IT動力uMHNXr1

JAXM中國IT動力uMHNXr1

圖4顯示了JAXM應(yīng)用及其使用的基礎(chǔ)Java應(yīng)用包的一個分層視圖。JAXM應(yīng)用可以使用三種不同層次的API。在最頂層有由高級別描述(比如ebXML消息傳遞服務(wù)描述)暴露的編程API。JAXM應(yīng)用也可以使用由JAXM消息傳遞包暴露的API或由JAXM SOAP包暴露的API。這些三層API集合中的每一層都提供不同的功能:描述API用于訪問和處理特定于描述的SOAP頭、JAXM消息傳遞API用于提供消息傳遞(例如,與JAXM消息提供者通信)的一個抽象和SOAP API用于創(chuàng)建及處理SOAP消息頭與消息體結(jié)構(gòu)。中國IT動力uMHNXr1

中國IT動力uMHNXr1

圖4:JAXM分層視圖中國IT動力uMHNXr1

JAXM部署中國IT動力uMHNXr1

JAXM應(yīng)用可以分別打包為Web應(yīng)用或J2EE平臺應(yīng)用,及部署到Servlet 2.2和/或J2EE 1.3容器中。可以預(yù)期到,J2EE規(guī)范(J2EE 1.4)的未來版本將會包含JAXM特定的部署信息。獨(dú)立的JAXM應(yīng)用只實(shí)現(xiàn)一種請求-響應(yīng)形式的消息傳遞,這種應(yīng)用可以被認(rèn)為是J2SE應(yīng)用,并且不會為這樣的應(yīng)用引入新的部署要求。中國IT動力uMHNXr1

JAX-RPC 中國IT動力uMHNXr1

JAX-RPC是JAXM、JAX-RPC和JAXR這三者之一。JAX-RPC處理SOAP消息傳遞的RPC部分?,F(xiàn)在我們來討論JAX-RPC的范圍。首先,它定義Java API和XML數(shù)據(jù)類型映射是如何完成的。例如,當(dāng)SOAP客戶調(diào)用SOAP服務(wù)提供者的一個方法時,方法的參數(shù)必須從Java對象映射到相應(yīng)的XML元素。而當(dāng)SOAP服務(wù)提供者接收到一個SOAP RPC請求消息時,則必須從XML元素映射到相應(yīng)的Java對象。JAX-RPC也定義WSDL文檔及其元素是如何映射到Java API表示的。例如,WSDL文檔的portType元素被映射到服務(wù)定義接口,這是定義在WSDL文檔中的服務(wù)的抽象部分的Java表示。JAX-RPC也定義運(yùn)行時API,其中包含stub接口、動態(tài)代理、動態(tài)調(diào)用,以及最終的編組和解組。Stub類一般由工具產(chǎn)生,并且必須實(shí)現(xiàn)Stub java接口。動態(tài)代理由JAX-RPC實(shí)現(xiàn)——JAX-RPC運(yùn)行時產(chǎn)生,并且它是服務(wù)定義接口的一個實(shí)現(xiàn)。動態(tài)調(diào)用允許客戶在運(yùn)行時設(shè)置目標(biāo)地址和屬性(比如用戶名和密碼)。中國IT動力uMHNXr1

JAX-RPCXML數(shù)據(jù)類型到Java API的映射中國IT動力uMHNXr1

可以映射到Java API類型的XML數(shù)據(jù)類型包括簡單類型和復(fù)雜類型。簡單類型包含W3C XML 方案中定義的內(nèi)置的原始類型。例如,字符串?dāng)?shù)據(jù)類型被映射到j(luò)ava.lang.String類,而dateTime數(shù)據(jù)類型被映射到j(luò)ava.util.Calendar類。JAX-RPC規(guī)范地址指出的其他簡單類型包括數(shù)組和枚舉型。復(fù)雜類型的一個例子是結(jié)構(gòu)數(shù)據(jù)類型。結(jié)構(gòu)類型被映射到具有相應(yīng)getter和setter方法的JavaBeans組件。下面我們來看兩個例子。中國IT動力uMHNXr1

下面的例子顯示了枚舉數(shù)據(jù)類型是如何映射到相應(yīng)的Java類的。中國IT動力uMHNXr1

下載或使用該代碼,你就同意這些許可條款中國IT動力uMHNXr1

         <!-- XML data type definition -------->
        <element name="EyeColor" type="tns:EyeColor"/>
        <simpleType name="EyeColor">
            <restriction base="xsd:string">
                 <enumeration value="green"/>
                 <enumeration value="blue"/>
            </restriction>
        </simpleType>
 // Java Representation of a simpleType "EyeColor"
   public class EyeColor implements
         java.io.Serializable {
         // Constructor
         protected EyeColor(String value) { ... }
         public static final String _green = "green";
         public static final String _blue = "blue";
         public static final EyeColor
                green = new EyeColor(_green);
         public static final EyeColor
                blue = new EyeColor(_blue);
         public String getValue() { ... }
         public static EyeColor fromValue(String value)
            throws java.lang.IllegalStateException { ... }
         public boolean equals(Object obj) { ... }
         public int hashCode() { ... }
   }中國IT動力uMHNXr1

下面的例子顯示XML結(jié)構(gòu)數(shù)據(jù)類型如何以Java類來表示。正如前面所提到的,XML結(jié)構(gòu)類型可以由JavaBean類來表示,該類具有針對結(jié)構(gòu)的每個成員的getter和setter方法。中國IT動力uMHNXr1

         <!-- XML data type definition -------->
        <element name="Book"/>
        <complexType>
          <all>
             <element name="author" type="xsd:string"/>
             <element name="preface" type="xsd:string"/>
             <element name="price" type="xsd:float"/>
          <all>
        </complexType>
// Java Representation of a structure type "Book" public
  class Book implements java.io.Serializable {
        // ...
        public String getAuthor() { ... }
        public void setAuthor(String author) { ... }
        public String getPreface() { ... }
        public void setPreface(String preface) { ... }
        public float getPrice() { ... }
        public void setPrice(float price) { ... }
        }中國IT動力uMHNXr1

JAX-RPCWSDLJava API的映射中國IT動力uMHNXr1

JAX-RPC處理的另一個重要領(lǐng)域是描述WSDL文檔及其元素是如何映射到相應(yīng)的Java表示的。JAX-RPC規(guī)范表明,每個WSDL文檔應(yīng)該映射到獨(dú)立的Java包,而WSDL文檔的抽象元素——portType、operation和message元素——應(yīng)該表示為Java接口類型及其方法。JAX-RPC規(guī)范還定義WSDL文檔的具體綁定部分——綁定、端口、服務(wù)元素——是如何映射到正確的Java API表示的。因此,JAX-RPC規(guī)范定義了一組規(guī)則,關(guān)于如何將WSDL文檔的抽象部分表示為相應(yīng)的Java API表示。首先,portType元素映射到一個Java接口類型,portType元素是operation元素的集合。該Java接口類型被作為服務(wù)定義接口來調(diào)用。該服務(wù)定義接口擴(kuò)展ava.rmi.Remote。operation元素被映射到服務(wù)定義接口的一個方法,而message元素被映射到該方法的參數(shù)。因此,讓我們來看一個例子。中國IT動力uMHNXr1

      <!----- Abstract part of a WSDL Document
                                  ------------------>
       <message name="GetLastTradePriceInput">
            <part name="tickerSymbol" type="xsd:string"/>
       </message>
      <message name="GetLastTradePriceOutput"?
            <part name="result" type="xsd:float"/>
       </message>
       <portType name="StockQuoteProvider">
          <operation name="GetLastTradePrice"
              parameterOrder="tickerSymbol">
            <input message="tns:GetLastTradePriceInput"/>
            <output message="tns:GetLastTradePriceOutput"/>
          </operation>
        </portType>
    //----------- Service Definition Interface
                            ---------------------//
    public interface StockQuoteProvider
                 extends java.rmi.Remote {
            float getLastTradePrice(String tickerSymbol)
                throws java.rmi.RemoteException;
    }中國IT動力uMHNXr1

在上面的例子中,第一部分包含例子WSDL文檔的抽象部分,該例子文檔定義了portType、operation和message元素。(在WSDL文檔中,portType、operation和message元素定義了服務(wù)的抽象部分。portType是operation的集合。Operation是一個動作,在該動作中,進(jìn)行輸入/輸出消息的交換以完成動作)。例子的底部是Java API表示。在該例子中,portType的名稱StockQuoteProvider以紅色高亮顯示,并被用作服務(wù)定義接口的名稱。Operation的名稱GetLastTradePrice以蘭色高亮顯示,并被轉(zhuǎn)換為相同名稱的方法。請注意,服務(wù)定義接口擴(kuò)展java.rmi.Remote類型,并且每個方法都拋出java.rmi.RemoteException。另外,服務(wù)定義接口只表示W(wǎng)SDL文檔的抽象部分,也就是說,它不涉及服務(wù)是如何綁定到特定的XML或傳輸協(xié)議的。中國IT動力uMHNXr1

WSDL文檔中的service元素表示一個端口總集,其中每個端口都定義了特定的綁定。也就是說,有了binding和port元素,service元素將portType元素的抽象定義與具體的XML和傳輸協(xié)議及它們的端點(diǎn)地址綁定在一起;例如,HTTP上的SOAP作為具體的XML和傳輸協(xié)議,而特定的URL作為端點(diǎn)地址。中國IT動力uMHNXr1

在JAX-RPC之下,service元素被映射到j(luò)avax.xml.rpc.Service接口類型。javax.xml.rpc.Service類充當(dāng)下面這些東西的工廠:中國IT動力uMHNXr1

  • 服務(wù)端口的動態(tài)代理。
  • 類型javax.xml.rpc.Call的實(shí)例,該類型用于服務(wù)端口上的遠(yuǎn)程操作的動態(tài)調(diào)用。
  • 產(chǎn)生的stub類的實(shí)例。

因此,前一個例子只處理WSDL文檔的抽象部分,與此相反,WSDL文檔的service元素被轉(zhuǎn)換為javax.xml.rpc.Service類,該類指定了該服務(wù)將如何被調(diào)用。中國IT動力uMHNXr1

下一代碼段顯示了例子WSDL文檔的具體綁定部分。在該例子中,叫做StockQuotePortType的portType被綁定到SOAP,SOAP可以支持文檔樣式或RPC樣式。文檔樣式是可以選擇的。最后,該服務(wù)通過一個通信端點(diǎn)被暴露,該端點(diǎn)由一個為特定通信協(xié)議指定端點(diǎn)地址的port元素來表示。在該例子中,端點(diǎn)碰巧是URL形式,即http:///stockquote,因?yàn)橛糜趥鬏擲OAP消息的傳輸協(xié)議是HTTP。如果使用的傳輸協(xié)議是SMTP,那么端點(diǎn)將是郵件地址的形式。中國IT動力uMHNXr1

       <binding name="StockQuoteSoapBinding"
                 type="tns:StockQuotePortType">
       <soap:binding style="document"
        transport="http://schemas./soap/http"/>
          <operation name="GetLastTradePrice">
           <soap:operation
            soapAction="http:///GetLastTradePrice"/>
               <input> <soap:body use="literal" />
               </input>
               <output> <soap:body use="literal" />
               </output>
              </operation>
           </binding>
            <service name="StockQuoteService">
               <documentation>My first
                          service</documentation>
               <port name="StockQuotePort"
                binding="tns:StockQuoteBinding">
                   <soap:address
                    location="http:///stockquote"/>
               </port>
           </service>中國IT動力uMHNXr1

下一代碼段是由JAX-RPC規(guī)范定義的javax.xml.rpc.Service Java接口類型。JAX-RPC 1.0實(shí)現(xiàn)是必需的,以提供給該接口一個實(shí)現(xiàn)類。也就是說,由平臺提供商負(fù)責(zé)實(shí)現(xiàn)該接口。該實(shí)現(xiàn)類是必需的,以支持動態(tài)代理和javax.xml.rpc.Call對象的創(chuàng)建。getPort方法為指定的服務(wù)端口返回動態(tài)代理。服務(wù)客戶使用該動態(tài)代理來調(diào)用目標(biāo)服務(wù)端口上的操作。proxyInterface指定所創(chuàng)建的動態(tài)代理支持的服務(wù)定義接口。中國IT動力uMHNXr1

        package javax.xml.rpc;
        public interface Service {
        public java.rmi.Remote getPort(QName portName,
        Class proxyInterface)
        throws JAXRPCException;
        public Call createCall(QName portName)
        throws JAXRPCException;
        public Call createCall(QName portName,
               String operationName)
        throws JAXRPCException;
        public Call createCall()
        throws JAXRPCException;
        public java.net.URL
         getWSDLDocumentLocation();
        public QName getServiceName();
        public java.util.Iterator getPorts();
        }中國IT動力uMHNXr1

方法getPorts返回由該服務(wù)成組的端口的一列限定的名稱(像javax.xml.rpc.namespace.QName)。方法createCall的多個變體創(chuàng)建javax.xml.rpc.Call的實(shí)例。javax.xml.rpc.Call接口為目標(biāo)服務(wù)端口上的操作的動態(tài)調(diào)用提供支持??蛻舳薐AX-RPC 1.0實(shí)現(xiàn)是必需的,以實(shí)現(xiàn)javax.xml.rpc.Call接口。javax.xml.rpc.Service接口充當(dāng)用于創(chuàng)建javax.xml.rpc.Call實(shí)例的工廠。Service實(shí)現(xiàn)類是必需的,以實(shí)現(xiàn)java.io.Serializable和javax.naming.Referenceable實(shí)例來支持JNDI名稱空間中的注冊。中國IT動力uMHNXr1

JAX-RPC:工具中國IT動力uMHNXr1

因?yàn)镴AX-RPC定義關(guān)于WSDL文檔如何映射到相應(yīng)Java表示的精確規(guī)則,所以映射過程最好使用工具自動完成。因此,WSDL到Java映射工具將讀WSDL文檔,并產(chǎn)生服務(wù)接口及其實(shí)現(xiàn)類,即服務(wù)定義接口。服務(wù)定義接口擴(kuò)展java.rmi.Remote stub類,而該stub類實(shí)現(xiàn)javax.xml.rpc.Stub接口和服務(wù)及stub類所需的任何附加類。這些附加類包括serializer、deserializer和utility類。事實(shí)上,這里以外的許多工具已經(jīng)在做這些事情了,并且JAX-RPC將標(biāo)準(zhǔn)化這一映射過程。中國IT動力uMHNXr1

JAX-RPC:可擴(kuò)展的類型映射中國IT動力uMHNXr1

JAX-RPC 1.0規(guī)范指定XML數(shù)據(jù)類型和Java類型之間的標(biāo)準(zhǔn)映射。標(biāo)準(zhǔn)類型映射支持SOAP 1.1 編碼和XML Schema規(guī)范中定義的一組XML數(shù)據(jù)類型。標(biāo)準(zhǔn)類型映射也為JAX-RPC 1.0支持的Java類型組指定了XML映射。但是,JAX-RPC 1.0實(shí)現(xiàn)需要支持超出標(biāo)準(zhǔn)類型映射規(guī)范指定的XML數(shù)據(jù)類型和Java類型之間的映射。例如,如果你有自定義的Java數(shù)據(jù)類型,那么它需要被映射到XML表示。中國IT動力uMHNXr1

JAX-RPC 1.0指定API以支持可擴(kuò)展類型映射框架。這些API允許可插入串行化器和反串行化器的部署,以支持任何Java API類型和XML數(shù)據(jù)類型之間的可擴(kuò)展映射。可插入的串行化器和反串行化器可以被打包作為JAX-RPC 1.0實(shí)現(xiàn)的一部分,或者可以由工具提供商、服務(wù)開發(fā)者和服務(wù)客戶來提供。中國IT動力uMHNXr1

使用不同的XML處理機(jī)制和表示,類型映射框架應(yīng)該允許可插入串行化器和反串行化器的部署。但是,JAX-RPC 1.0版本中并沒有解決跨各種JAX-RPC實(shí)現(xiàn)的可插入串行化器和反串行化器的可移植性。中國IT動力uMHNXr1

JAX-RPC中國IT動力uMHNXr1

圖5顯示了各種包之間的關(guān)系。RPC包和消息傳遞包都將SOAP包用于創(chuàng)建、操縱和處理SOAP消息。并且RPC包用于RPC,而消息包用于消息傳遞。中國IT動力uMHNXr1

中國IT動力uMHNXr1

圖5:包關(guān)系中國IT動力uMHNXr1

JAXR 中國IT動力uMHNXr1

注冊中心的典型應(yīng)用是什么? 注冊中心的功能相當(dāng)于一個電子黃頁, 商業(yè)組織的信息和他們所提供的服務(wù)和產(chǎn)品可以在這里發(fā)布和發(fā)現(xiàn)。注冊中心也可以當(dāng)作數(shù)據(jù)庫,或者共享信息存儲庫。共享的信息可以是任何東西。注冊中心也可以看作電子公告板, 合作伙伴就可以以一種動態(tài)的、臨時的方式共享信息。注冊服務(wù)的典型操作是什么呢?首先,提交和保存共享信息是比較重要的注冊操作。我們還需要完成各種注冊管理操作,比如標(biāo)識、命名、描述、分類、關(guān)聯(lián)、分組和標(biāo)注。最后,我們還必須能夠從注冊中心完成查詢、發(fā)現(xiàn)和獲取共享的信息等操作。所以任何注冊中心的編程API都需要支持這些操作。JAXR (Java API for XML Registry) 為在不同的注冊服務(wù)提供者之間進(jìn)行以上注冊操縱提供了一套標(biāo)準(zhǔn)的Java API。同時它也為描述注冊內(nèi)容定義了一個統(tǒng)一的信息模型。所以不用考慮要訪問的注冊服務(wù)提供者,你的程序可以對通用的信息模型進(jìn)行操作。由于注冊提供者性能上的多樣性,JAXR設(shè)計組決定通過性能描述來提供多層API抽象。中國IT動力uMHNXr1

JAXR將成為J2EE(J2EE 1.4)的一部分,而J2EE 1.4將會成為Web服務(wù)開發(fā)和部署的首選平臺。這就意味著J2EE 1.4平臺的開發(fā)商們?yōu)榱伺c1.4的標(biāo)準(zhǔn)兼容必須提供JAXR服務(wù)(雖然不一定要是注冊服務(wù))。中國IT動力uMHNXr1

JAXR: 性能描述中國IT動力uMHNXr1

在JAXR中,相關(guān)的注冊服務(wù)特性被分組成一個性能級別。每個性能級別用一個java 接口來體現(xiàn),而每個相同性能級別中的特性對應(yīng)于此java接口中的一個方法. 為了便于測試兼容性,減少交互協(xié)作中出現(xiàn)的問題,JAXR把性能劃分成較小單位的性能描述集合. 一個性能描述定義了一類性能的集合(Java接口類型的集合),這些java接口類型的集合必須被整體所支持以符合該性能描述的要求. 目前,JAXR只定義了兩個性能描述,基本特性的0級層和高級特性的1級層。最低限度下,所有的JAXR提供者必須實(shí)現(xiàn)0級架構(gòu)。同時為了便于發(fā)現(xiàn)性能,JAXR還定義了一個發(fā)現(xiàn)接口,允許客戶端訪問和發(fā)現(xiàn)注冊服務(wù)的性能.中國IT動力uMHNXr1

圖6說明了不同的JAXR客戶端上如何利用JAXR API與不同的注冊中心進(jìn)行交互操作的。在結(jié)構(gòu)上,JAXR客戶端利用API執(zhí)行注冊操作,而JAXR提供者實(shí)現(xiàn)這個API的功能。由于JAXR提供了一個標(biāo)準(zhǔn)的API來訪問不同的注冊提供者和描述注冊內(nèi)容的統(tǒng)一信息模型,無論是HTML瀏覽器、J2EE組件(如servlet 或者EJB beans)或獨(dú)立的J2SE應(yīng)用程序的JAXR客戶端,都能夠統(tǒng)一地對不同的注冊提供者執(zhí)行注冊操作。中國IT動力uMHNXr1

中國IT動力uMHNXr1

圖6:客戶端與注冊中心的互操作性 中國IT動力uMHNXr1

圖7是JAXR架構(gòu)的描述,底部是現(xiàn)有的注冊服務(wù)提供者,如ebXML, reg/rep, UDDI和其他類型. 這些注冊服務(wù)提供者可以被特定注冊服務(wù)的JAXR提供者訪問。只要被注冊服務(wù)提供者確認(rèn),特定注冊服務(wù)的JAXR提供者就可以成為他們的客戶端。從這個意義上講,特定注冊服務(wù)的JAXR提供者相當(dāng)于是JAXR客戶端的代理。這種可插拔的JAXR提供者實(shí)現(xiàn)了獨(dú)立于注冊服務(wù)類型的JAXR API的特性。可插拔的提供者為多樣化的特定注冊服務(wù)的JAXR提供者定義了單一的抽象。所以客戶端在訪問實(shí)際注冊服務(wù)的時候可以不考慮特定注冊服務(wù)的JAXR提供者的多樣性。這些是與特定性能相關(guān)的接口。中國IT動力uMHNXr1

中國IT動力uMHNXr1

圖07: JAXR 架構(gòu) 中國IT動力uMHNXr1

總結(jié)中國IT動力uMHNXr1

正如此文所述,Java技術(shù)組通過堅持不懈地努力,為Web服務(wù)提供了一套非常全面的API。這套Java API包括基于XML的消息傳送(JAXM),基于XML的遠(yuǎn)程過程調(diào)用(JAX-RPC),基于XML的注冊服務(wù)操作(JAXR),為應(yīng)用于Web 服務(wù)的全面完整的Java API的必然出現(xiàn)奠定了堅實(shí)基礎(chǔ)。中國IT動力uMHNXr1

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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    国产又黄又猛又粗又爽的片| 国产色一区二区三区精品视频| 国产又粗又猛又大爽又黄| 日韩精品人妻少妇一区二区| 日韩国产亚洲欧美另类| 国产精品免费无遮挡不卡视频| 欧美国产亚洲一区二区三区| 国产精品一区二区传媒蜜臀| 好吊一区二区三区在线看| 伊人国产精选免费观看在线视频| 国产亚洲神马午夜福利| 日本免费一级黄色录像| 成年女人午夜在线视频| 亚洲中文字幕日韩在线| 欧美日韩综合综合久久久| 成人区人妻精品一区二区三区| 性欧美唯美尤物另类视频 | 日韩专区欧美中文字幕| 又大又紧又硬又湿又爽又猛| 日韩av生活片一区二区三区| 亚洲中文字幕在线综合视频| 国产精品尹人香蕉综合网| 成年女人午夜在线视频| 91精品国产综合久久精品| 不卡中文字幕在线视频| 九九热九九热九九热九九热| 国产精品熟女在线视频| 开心五月激情综合婷婷色| 一区二区不卡免费观看免费| 久久偷拍视频免费观看| 日韩国产中文在线视频| 久久国产精品熟女一区二区三区| 日本精品最新字幕视频播放| 久久综合日韩精品免费观看| 日韩欧美精品一区二区三区 | 99一级特黄色性生活片| 亚洲一区二区三区四区性色av| 青青久久亚洲婷婷中文网| 欧美日韩精品久久第一页| 久热在线视频这里只有精品| 国产一级特黄在线观看|