亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        Java ME的Web服務規(guī)范的深入分析

        2007-01-01 00:00:00楊建強李學鋒
        計算機時代 2007年3期

        摘要:介紹了Java ME的Web服務規(guī)范,比較了該規(guī)范定義的可選包與kXML和kSOAP之間的不同,指出了JavaME的JAX-RPC與Java SE/EE平臺上的JAX-RPC 1.1之間的差異,并給出了這些差異給Java ME程序設計者帶來的影響,為開發(fā)者提供了一些有價值的參考。

        關(guān)鍵詞:Java ME;Web服務;JSR 172;JAX-RPC

        O引言

        在有線網(wǎng)絡環(huán)境中,Web服務已經(jīng)成為實現(xiàn)企業(yè)業(yè)務系統(tǒng)之間協(xié)同工作的一種關(guān)鍵技術(shù),Web服務也使企業(yè)更容易實現(xiàn)和影響新的服務交付類型,以及更方便在企業(yè)合作伙伴、企業(yè)和客戶之間進行溝通。Web服務的下一步目標,就是在任何地點都可以使用無線移動設備訪問企業(yè)應用或數(shù)據(jù),也就是無線Web服務。目前,許多開源軟件已經(jīng)開始嘗試為無線Web服務提供支持,如NanoXML,TinyXML,kXML,kSOAP和kXML-RPC等。不過,由于使用這些軟件通常會增加無線移動設備客戶端應用的大小,并且其編程接口也不統(tǒng)一,所以它們并不是企業(yè)最佳的選擇。2004年3月,由JCP(Java Community Process)制定的、旨在為Java ME應用提供Web服務支持的JSR 172規(guī)范正式發(fā)布,它為企業(yè)尋求無線Web服務解決方案提供了一種新的選擇。借助Java手持設備,特別是Java手機的普及,它極有可能成為Java平臺上最佳的無線Web服務解決方案。本文對該規(guī)范進行了深入的分析,指出了它與企業(yè)已存在的有關(guān)標準或應用編程接口之間的不同之處,給出了一些建議,為Java ME平臺上的Web應用的開發(fā)提供參考。

        1 Java ME的Web服務規(guī)范簡介

        Java ME的Web服務規(guī)范,即JSR 172為Java ME應用增加了兩大功能:一是使其能夠訪問基于SOAP/XML的遠程Web服務;二是使其具有解析XML數(shù)據(jù)的能力。與這兩大功能對應的兩個可選包,即Web服務訪問可選包和XML解析可選包可以單獨或共同集成到Java ME設備的runtime(運行時環(huán)境)中。由此,開發(fā)者不必把這些功能包含到每一個使用它們的Java ME應用中,這對資源受限的設備如手機和PDA來說是非常必要的。Java ME目前包括兩大體系結(jié)構(gòu),CLDC體系和CDC體系,JSR 172的這兩個可選包可以在這兩大體系上工作。

        1.1 Web服務訪問可選包

        JSR 172中用于訪問遠程Web服務的API是JAX-RPC1.1(用于Java SE/EE平臺)的—個子集,這里稱之為Java ME的JAX-RPC。Java ME的JAX-RPC遵循如下核心Web服務規(guī)范:SOAP 1.1、WSDL 1.1、XML 1.0、XML Schema。不過它并不支持UDDI 2.0規(guī)范,因此利用它訪問Web服務的Java ME應用將無法在運行中動態(tài)地“發(fā)現(xiàn)\"Web服務。無論如何,Java ME的JAX-RI~符合WS-I基本概要1.0(WS-I Basic Profile1.0)。Java ME設備特別是基于CLDC的設備(比如手機)內(nèi)存資源有限,處理能力較弱,并且一般沒有一個確定的IP地址,JavaME的JAX-RPC目前只為Java ME設備提供消費Web服務的能力,而沒有提供創(chuàng)建和部署Web服務的能力。除此之外,其體系結(jié)構(gòu)遵循Web服務的標準結(jié)構(gòu),如圖1所示。

        作為Web服務的消費者(使用者),客戶端包括Java ME應用程序,比如基于CLDC的MlDlet或基于CDC的Xlet,一個JAX-RPC Stub和相關(guān)支持類,以及JAX-RPC Runtime。

        Java ME的JAX-RPC也遵循標準Web服務的調(diào)用模型和數(shù)據(jù)流。Java ME應用通過JAX-RPC Stub調(diào)用遠程服務。JAX-RPC Stub隱藏了與JAX-RPC Runtime交互以及數(shù)據(jù)編碼的復雜性。JAX-RPC Runtime負責管理遠程調(diào)用和網(wǎng)絡操作,調(diào)用過程遵循同步請求一響應模型,如圖2所示。

        在Java ME應用中使用Web服務訪問可選包主要包括如下3個步驟:(1)使用相關(guān)工具從WSDL文檔產(chǎn)生一個JAx-RPCstub類;(2)在Java ME程序中創(chuàng)建—個該stub的實例;(3闕用該stub類的方法以訪問遠程Web服務。

        1.2 XML解析可選包

        JSR 172中用于解析XML的API是基于JAXP 1.2(用于Java SE/EE平臺)和SAX 2的一個子集,這里稱之為Java ME的JAXP。JSR 172規(guī)定XML解析器必須符合XML 1.0規(guī)范,但可以基于DTD確認也可以不確認。解析器須遵循XML 1.0規(guī)范中給出的確認或非確認規(guī)則。由于確認是一個代價高昂的操作,是否實現(xiàn)一個需要確認的解析器,由設備供應商根據(jù)其設備的內(nèi)存資源大小和處理能力強弱決定。另外,JSR 172要求XML解析器必須支持XML名字空間,UTF-8和UTF-16字符編碼,以及DTD,但對DOM和XSLT不作要求。Java ME的JAXP提供了解析XML文檔所需的全部功能。事實上,在解析XML文檔時,可能只需使用該JAXP的一部分功能。JavaME的JAXP的使用包含3個主要步驟:(1)編寫應用程序的事件處理器(handler);(2)創(chuàng)建一個SAX解析器實例;(3)解析輸入的XML文檔。

        2 JSR 172的可選包與kXML和kSOAP的比較

        在JSR 172推出之前,Java ME應用通常使用kXML和kSOAP類庫來解析XML數(shù)據(jù)和調(diào)用Web服務。JSR 172的出現(xiàn)并沒有讓kXML和kSOAP過時,原因是它們工作在較低層次,可以為開發(fā)者提供很大的靈活性。JSR 172的可選包與kXML和kSOAP主要有以下不同:

        (1)XML解析模式不同。JSR 172中的XML解析可選包僅支持推式的SAX模式,而kXML支持推式的SAX、拉式的XMLPull,以及kDOM(輕量級的DOM)模式。由于SAX模式比較節(jié)省內(nèi)存空間,因此比較適合Java ME設備。

        (2)Web服務訪問可選包以Java為中心,kSOAP以XML為中心。使用JSR 172的Web服務訪問可選包,SOAP RPC調(diào)用如同Java本地RMI RPC調(diào)用,使用Web服務是非常直接和幾乎透明的,不過開發(fā)者不能直接控制低層的SOAP消息。相反,kSOAP允許開發(fā)者窺探XML內(nèi)部結(jié)構(gòu),增加定制的頭/屬性,以及操縱任意結(jié)點。

        (3)Web服務訪問可選包不支持擴充的類型映射,而kSOAP是支持的。因此kSOAP可以訪問低層的SOAP結(jié)構(gòu),而可選包不可以。

        (4)Web服務訪問可選包支持Web服務網(wǎng)關(guān)(經(jīng)由SPI即服務提供者接口),從而可以優(yōu)化系統(tǒng)的運行效率(比如在設備和網(wǎng)關(guān)之間使用二進制編碼)。kSOAP直接訪問Web服務,但由于Java ME設備的計算能力有限,對SOAPXML消息的解析處理速度不是很高,因此與使用了Web服務網(wǎng)關(guān)的可選包相比,kSOAP的系統(tǒng)效率較低。

        3 Java ME的JAX—RPC與JAX—RPC 1.1之間的差異及給開發(fā)者帶來的影響

        WS-I基本概要1.0通過對Web服務中的技術(shù)如SOAP1.1、XML 1.0、XML Schema、WSDL 1.1,以及UDDI 2.0的標準化,盡量保證不同的Web服務的互操作。JSR 172要求JavaME的JAX-RPC必須符合WS-I基本概要1.0,因此,Java ME的JAX-RPC會忽略掉JAX-RPC 1.1中不符合WS-I基本概要1.0的部分。遵循WS-I基本概要1.0可以增大Java ME應用使用各種Web服務的機會,不過,當Java ME應用在使用沒有實現(xiàn)該概要的JAX-RPC 1.1 Web服務的時候,可能會遇到問題。

        JAX-R1.1支持3種類型的調(diào)用:靜態(tài)stub,動態(tài)代理(Dynamic Proxy),以及動態(tài)調(diào)用接口DII(Dynamic InvocationInterface)。靜態(tài)stub缺乏靈活性,但代碼最簡潔;DII最靈活,但實現(xiàn)起來也最復雜。Java ME的JAX-RPC僅支持靜態(tài)stub,開發(fā)者可使用WSDL到Java的映射工具來產(chǎn)生stub。缺乏對動態(tài)代理和DII的支持對Java ME應用并沒有什么負面影響,在Java ME平臺上靜態(tài)stub工作得很好,惟一的不便之處是開發(fā)者必須提前產(chǎn)生這些stub。

        JAX-RPC 1.1為Java應用提供了使用Web服務的能力,也提供了創(chuàng)建和部署Web服務的功能。Java ME的JAX-RPC目前只為Java ME設備提供使用Web服務的能力,開發(fā)者不能使用Java ME的JAX-RPC在Java ME設備上創(chuàng)建Web服務端點。

        JAX-RPC 1.1指定了3種客戶應用交互模型:同步請求一響應雙向PRC、異步(非阻塞)請求一響應雙向PRC,以及單向PRC。Java ME的JAX-RPC僅支持同步請求一響應雙向PRC。缺乏對另外兩種交互模型的支持對Java ME應用并沒有多大影響,作為最流行的PRC交互模型,同步雙向PRC對Java ME應用來說已經(jīng)足夠。開發(fā)者需要記住的是,使用同步雙向PRC,請求發(fā)出之后Java ME應用會被阻塞,直到收到返回的響應或者拋出一個異常。為避免出現(xiàn)阻塞,開發(fā)者應該把RPC調(diào)用操作分派到一個單獨的線程中。

        JAX-RPC 1.1指出了SOAP與Java之間數(shù)據(jù)類型的映射關(guān)系。由于硬件平臺的限制,Java ME的JAX-RPC并不支持JAX-RPC 1.1的所有的基本數(shù)據(jù)類型。比如,Java ME的JAX-RPC不支持類型java.math.BigDecimal。另外,如果設備采用CLDC 1.0配置層,浮點類型將被映射成String類型。類型映射限制可能會給開發(fā)者帶來很大麻煩,開發(fā)者需要適應不能使用某些常用數(shù)據(jù)類型(包括dateTime、date和time類型)的JavaME環(huán)境,也需要為Java ME應用創(chuàng)建專門的WSDL文件,因為包含有不支持類型的WSDL文件不能產(chǎn)生Java ME應用使用的stub。

        JAX-RPC 1.1支持soapenc:Array類型的數(shù)組以及wsdl:arrayType屬性,而Java ME的JAX-RPC不支持它們。在JavaME的JAX-RPC中,當元素的maxOccurs屬性大于1或者為unbounded時,就產(chǎn)生一個數(shù)組。不管怎樣,在JAX-RPC 1.1和Java ME的JAX-P-uC中,Java數(shù)組元素類型都基于XML數(shù)組模式(schema)。由于不支持soapenc:Array和wsdl:arrayType,JavaME應用將不能消費使用它們描述的數(shù)組的Web服務。不過,由于WS-I概要不贊成使用soapenc:Array和wsdl:arrayType,所以它們對Java ME應用的影響很有限。

        在對復雜類型的支持方面,JAX-RPC 1.1支持指定xsd:se-quence元素、xsd:all元素和xsd:simpleContent元素的xsd:com-plexType,并且同時支持xsd:attribute和xsd:attribute Group。JavaME的JAX-RPC僅支持指定xsd:sequence元素的xsd:complex-Type,并且不支持xsd:attribute、xsd:attributeGroup或xsd:any。因此,Java ME應用將不能消費那些包含有使用了它不支持的方法或?qū)傩悦枋龅膹碗s類型的Web服務。另外,JAX-RPC 1.1支持枚舉(enumeration)以及有約束的或使用了xsd:list的簡單類型,而Java ME的JAX-RPC不支持它們,這會導致Java ME應用不能消費使用了這些特性的Web服務。

        JAX-RPC 1.1支持Java類型和XML類型之間的擴充類型映射和序列化,而Java ME的JAX-RPC不支持擴充類型映射,這意味著開發(fā)者不能自己定義Java到XML的序列化。由于擴充類型映射的定義松散,不同的供應商對它的實現(xiàn)方法也不同,加之大多數(shù)Web服務并不使用它,所以Java ME應用開發(fā)者可以不理會它。

        WSDL到Java映射方面,JAX-RPC 1.1支持wsdl:portType中的wsdl:operations名字重載,規(guī)定parameterOrder屬性必須反映出PRC方法的參數(shù)順序。遵循WS-I基本概要,Java ME的JAX-RPC規(guī)定wsdl:portType中的wsdl:operations的名字必須惟一,規(guī)定消息的各組成部分的順序,而不是parameterOrder屬性必須與PRC方法參數(shù)的順序一致。由此,Java ME應用將不能消費那些重載wsdl:portType中的操作名的Web服務,不過,因為符合WS-I基本概要已經(jīng)變得很盛行,操作名重載問題和參數(shù)順序問題將會越來越少見。

        JAX-RPC 1.1支持SOAP消息處理器(handler),開發(fā)者可以利用它實現(xiàn)附加的SOAP消息處理,比如加密消息或者緩存消息。Java ME的JAX-RPC不支持SOAP消息處理器,因此,Java ME應用不能在處理SOAP消息時實現(xiàn)一些高級特征。

        JAX-RPC 1.1支持包含有以MIME格式編碼的附件(attachment)的SOAP消息,Java ME的JAX-RPC不支持此類SOAP消息,由此帶來的后果是Java ME的Web應用不能發(fā)送和接收復雜的參數(shù)值和返回值,比如圖像或XML文檔。

        JAX-RPC 1.1支持RPC和文檔(document)樣式的操作,支持編碼的(encoded)和文字的(1iteral)SOAP消息編碼,而Java ME的JAX-RPC僅支持文檔樣式的操作和文字的SOAP消息編碼。因此,Java ME應用將不能與依賴RPC和編碼樣式的Web服務相互操作。值得慶幸的是,為符合WS-I基本概要的要求,目前Web服務正在拋棄RPC/編碼樣式SOAP通信,轉(zhuǎn)向文檔/文字樣式SOAP通信。

        在JAX-RPC 1.1中,SOAP fault或者被映射到javax.xml.rpc.soap.SOAPFaultException,或者被映射到—個服務特有的異常類,或者被映射到RemoteException。而Java ME的JAX-RPC不支持SOAPFaultException,SOAP fault要么被映射到一個服務特有的Java異常類,要么被映射到RemoteException。為避免這些差異帶來的影響,開發(fā)者應該在調(diào)用Web服務的時候,在catch語句塊中使用RemoteException。

        4結(jié)束語

        JSR 172可選包為Java ME應用提供了訪問遠程Web服務和解析XML數(shù)據(jù)的能力。作為Java ME平臺上專用的可選包,它們?yōu)槠髽I(yè)尋求無線Web服務解決方案提供了一種新的選擇,具有廣闊的應用前景。開發(fā)者必須記住,這些可選包是專為資源受限的Java ME設備設計的,它們與企業(yè)已存在的有關(guān)標準或API之間有許多不同之處。只有充分了解這些不同,才可以為Java ME設備編寫出有效的Web服務應用。

        (注:本文中所涉及到的圖表、注解、公式等內(nèi)容請以PDF格式閱讀原文。)

        一出一进一爽一粗一大视频免费的| 亚洲精品国产精品乱码在线观看| 亚洲加勒比久久88色综合| 免费无码午夜福利片69| 女人体免费一区二区| 日本不卡的一区二区三区| 久久精品国产亚洲av高清三区| 国产福利视频在线观看| 亚洲av成本人无码网站| 国产精品美女久久久久浪潮AVⅤ | 人人鲁人人莫人人爱精品| 日本熟妇人妻xxxxx视频| 亚洲AV无码秘 蜜桃1区| 少妇一级内射精品免费| 中文字幕在线亚洲三区| 亚洲av无码国产精品色软件下戴| 另类专区欧美在线亚洲免费| 亚洲免费av第一区第二区| 亚洲乱码中文字幕在线| 久久99精品国产麻豆宅宅| 亚洲AV无码精品蜜桃| 国产在线视频网站不卡| 美腿丝袜在线一区二区| 欧美放荡的少妇| 99久久综合精品五月天| 国产一品二品三品精品久久| 亚洲国产精品久久久av| 欧美性受xxxx白人性爽| 国产免费av片在线观看播放| 羞涩色进入亚洲一区二区av| 亚洲精品一区久久久久一品av| 内射精品无码中文字幕| 狠狠综合亚洲综合亚色| 狂插美女流出白浆视频在线观看| 亚洲乱亚洲乱妇50p| 亚洲综合无码| 国产三级在线观看高清| 精品一二三四区中文字幕| 亚洲日本中文字幕天天更新| 老熟女熟妇嗷嗷叫91| 国产一品二品三区在线观看|