999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

Java ME的Web服務規范的深入分析

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

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

關鍵詞:Java ME;Web服務;JSR 172;JAX-RPC

O引言

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

1 Java ME的Web服務規范簡介

Java ME的Web服務規范,即JSR 172為Java ME應用增加了兩大功能:一是使其能夠訪問基于SOAP/XML的遠程Web服務;二是使其具有解析XML數據的能力。與這兩大功能對應的兩個可選包,即Web服務訪問可選包和XML解析可選包可以單獨或共同集成到Java ME設備的runtime(運行時環境)中。由此,開發者不必把這些功能包含到每一個使用它們的Java ME應用中,這對資源受限的設備如手機和PDA來說是非常必要的。Java ME目前包括兩大體系結構,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服務規范:SOAP 1.1、WSDL 1.1、XML 1.0、XML Schema。不過它并不支持UDDI 2.0規范,因此利用它訪問Web服務的Java ME應用將無法在運行中動態地“發現\"Web服務。無論如何,Java ME的JAX-RI~符合WS-I基本概要1.0(WS-I Basic Profile1.0)。Java ME設備特別是基于CLDC的設備(比如手機)內存資源有限,處理能力較弱,并且一般沒有一個確定的IP地址,JavaME的JAX-RPC目前只為Java ME設備提供消費Web服務的能力,而沒有提供創建和部署Web服務的能力。除此之外,其體系結構遵循Web服務的標準結構,如圖1所示。

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

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

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

1.2 XML解析可選包

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

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

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

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

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

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

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

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

WS-I基本概要1.0通過對Web服務中的技術如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應用在使用沒有實現該概要的JAX-RPC 1.1 Web服務的時候,可能會遇到問題。

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

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

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

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

JAX-RPC 1.1支持soapenc:Array類型的數組以及wsdl:arrayType屬性,而Java ME的JAX-RPC不支持它們。在JavaME的JAX-RPC中,當元素的maxOccurs屬性大于1或者為unbounded時,就產生一個數組。不管怎樣,在JAX-RPC 1.1和Java ME的JAX-P-uC中,Java數組元素類型都基于XML數組模式(schema)。由于不支持soapenc:Array和wsdl:arrayType,JavaME應用將不能消費使用它們描述的數組的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應用將不能消費那些包含有使用了它不支持的方法或屬性描述的復雜類型的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不支持擴充類型映射,這意味著開發者不能自己定義Java到XML的序列化。由于擴充類型映射的定義松散,不同的供應商對它的實現方法也不同,加之大多數Web服務并不使用它,所以Java ME應用開發者可以不理會它。

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

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

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

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

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

4結束語

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

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

主站蜘蛛池模板: 婷婷激情五月网| 亚洲高清无在码在线无弹窗| 无码日韩精品91超碰| 蜜桃臀无码内射一区二区三区 | 久久毛片网| 69av在线| 亚洲成人高清无码| 免费无码在线观看| 91精品久久久无码中文字幕vr| 欧美精品在线视频观看| 久久黄色影院| 亚洲av色吊丝无码| 欧美另类第一页| av一区二区无码在线| 88av在线| 亚洲精品制服丝袜二区| 欧美精品另类| av天堂最新版在线| 亚洲最大看欧美片网站地址| 国产成人免费视频精品一区二区| 在线免费不卡视频| 国产精品jizz在线观看软件| 久久亚洲国产最新网站| 99激情网| 国产男女免费视频| 亚洲国产天堂在线观看| a色毛片免费视频| 67194成是人免费无码| 国模在线视频一区二区三区| 制服丝袜国产精品| 免费人成在线观看视频色| 在线观看免费AV网| 国产精品久久久久久久久| 一级片免费网站| julia中文字幕久久亚洲| 欧美在线精品怡红院| 精品国产免费第一区二区三区日韩| 国产尤物在线播放| 欧美午夜小视频| 免费观看精品视频999| 日本一区二区不卡视频| 久久精品这里只有精99品| 5555国产在线观看| 国产99久久亚洲综合精品西瓜tv| 久久免费成人| 毛片三级在线观看| 欧美精品在线视频观看| 天堂岛国av无码免费无禁网站| 日韩欧美91| 99久久免费精品特色大片| 国产成人1024精品下载| 国产乱子伦精品视频| 国产视频大全| 原味小视频在线www国产| 在线精品视频成人网| 免费在线色| 女人18毛片一级毛片在线 | 天堂在线www网亚洲| 国产欧美精品一区二区| 综合亚洲网| 精品福利一区二区免费视频| 亚洲综合精品香蕉久久网| 青青青伊人色综合久久| 日本精品中文字幕在线不卡| 米奇精品一区二区三区| 国内精品久久人妻无码大片高| 91久久天天躁狠狠躁夜夜| 亚洲综合色区在线播放2019| 九九久久99精品| 亚洲三级电影在线播放| 26uuu国产精品视频| 国产午夜一级淫片| 亚洲AⅤ永久无码精品毛片| 亚洲国产精品VA在线看黑人| 成年网址网站在线观看| 美女潮喷出白浆在线观看视频| 99热精品久久| 玖玖精品在线| 成年人久久黄色网站| 国产欧美中文字幕| 无码高潮喷水在线观看| 亚洲色图欧美激情|