詳解XML-RPC和JAX-RPC_Xml教程
推薦:XML 中的常見(jiàn)問(wèn)題(二)Internet Explorer 5.0 對(duì) XML 提供哪個(gè)級(jí)別的支持? Internet Explorer 5 提供下列 XML 支持: 直接查看 XML。Microsoft XML 實(shí)現(xiàn)允許用戶通過(guò)他們的 Web 瀏覽器使用 XSL 或者層疊樣式表 (
響應(yīng)也是簡(jiǎn)單的XML文件,擁有根元素,或者有或者沒(méi)有子元素。這與復(fù)雜的SOAP相應(yīng)對(duì)比鮮明。
原先的XML-RPC協(xié)議是由Web先鋒Dave Winer于1998年在UserLand Software公司發(fā)明的。其第一個(gè)實(shí)現(xiàn)是在UserLand Frontier開(kāi)發(fā)平臺(tái)上(事實(shí)上,UserLand Software的商標(biāo)就是"XML-RPC")。“在HTTP之上傳輸XML文本”方法的自然用途就是創(chuàng)建SOAP,這其中有Winer, Don Box以及其他微軟公司人士的貢獻(xiàn)。但是,SOAP由于很多對(duì)應(yīng)用完全不必要得特性而變得非常重量級(jí),所以XML-RPC還是值得注意的。
原先的XML-RPC只使用一些數(shù)據(jù)類(lèi)型,并不需要名字空間。通過(guò)定義和包含其它值的類(lèi)型,它獲得了相當(dāng)可觀的靈活性。下面是一個(gè)XML-RPC說(shuō)明書(shū)中的例子。它指定了示例應(yīng)用程序中"getStateName"方法的輸入?yún)?shù)。
以下為引用的內(nèi)容: <?xml version="1.0"?> <methodCall> <methodName>examples.getStateName <params> <param>41 </params> </methodCall> |
你可能已經(jīng)猜到這個(gè)標(biāo)簽表示4字節(jié)整數(shù),下面是用于在標(biāo)簽中指定如何翻譯內(nèi)容的所有類(lèi)型標(biāo)簽。如果沒(méi)有使用任何標(biāo)簽,就認(rèn)為是String值。注意,參數(shù)并沒(méi)有被命名,元素的順序只和方法參數(shù)的順序一樣。
以下為引用的內(nèi)容: Java Type XML tag Description Integer or A 32 bit signed integer Double A double precision (64bit) signed floating point number Boolean 0 (false) or 1 (true) String string Date or A timestamp in the ISO8601 style but simplified Calendar with resolution to the second. byte[] A base-64 encoded array of bytes Map Pair(s) of tags where the name is a string and the value can be any other type, including Object[] An array of objects where the elements can be any other type. |
在原始的說(shuō)明書(shū)中,沒(méi)有辦法指明任何類(lèi)型的“null”值,但擴(kuò)展版本允許附加類(lèi)型。
響應(yīng)也是簡(jiǎn)單的XML文件,擁有根元素,或者有或者沒(méi)有子元素。這與復(fù)雜的SOAP相應(yīng)對(duì)比鮮明。
XML-RPC實(shí)現(xiàn)
xmlrpc.com上列出的實(shí)現(xiàn)給出了通往79個(gè)不同實(shí)現(xiàn)的鏈接,它們?cè)诟鞣N語(yǔ)言中實(shí)現(xiàn)了基本的XML-RPC協(xié)議,包括5個(gè)2003年12月用Java語(yǔ)言實(shí)現(xiàn)的。但是,這些項(xiàng)目中很多都是停滯的。而由Apache Web Services Project主持的項(xiàng)目則是活躍的。我嘗試運(yùn)行當(dāng)前的3.0a1版本,卻發(fā)現(xiàn)它對(duì)其它Web服務(wù)項(xiàng)目庫(kù)有奇怪的依賴。看起來(lái)似乎Apache Web Services Project在開(kāi)發(fā)3版本,所以如果你對(duì)開(kāi)源XML-RPC解決方案感興趣,不妨對(duì)它多關(guān)注。
JAX-RPC: 針對(duì)XML RPC的Java API
最早的Java API要從JSR 101開(kāi)始算起。這項(xiàng)工作從2001年初開(kāi)始,到2002年年中到達(dá)1.0版本。2003年,發(fā)布了1.1版本并附帶在Java Web Services Developer Pack由Sun的參考實(shí)現(xiàn)。在JAX-RPC中,Java原始類(lèi)型的定義與XML schema類(lèi)型緊密相關(guān)。它還支持更多的Java標(biāo)準(zhǔn)庫(kù)對(duì)象,例如,BigInteger 和 BigDecimal,以及符合JavaBeans標(biāo)準(zhǔn)的對(duì)象。使用JSR 101的人可以并行開(kāi)發(fā)SOAP和其它XML技術(shù)。
Java Web Services Developer Pack (JWSDP)1.6版包括很多其它東西以及對(duì)JAX-RPC 1.1.3的一個(gè)實(shí)現(xiàn)。
JAX-WS 2.0:下一個(gè)JAX-RPC
該說(shuō)明書(shū)的下一個(gè)版本叫做JAX-WS 2.0,是針對(duì)基于XML的Web服務(wù),用來(lái)代替JAX-RPC的Java API。該標(biāo)準(zhǔn)被作為Java Specification Request (JSR) 224來(lái)開(kāi)發(fā),現(xiàn)在處于最后草案階段。
JAX-RPC的下一個(gè)版本將顯著降低Web服務(wù)開(kāi)發(fā)的復(fù)雜性,部分通過(guò)使用Java 1.5標(biāo)準(zhǔn)庫(kù)的特性來(lái)實(shí)現(xiàn)。你可以跟蹤網(wǎng)站上源碼列表中的參考實(shí)現(xiàn)。至于本文,已經(jīng)可以訪問(wèn)第3版的參考實(shí)現(xiàn)。
使用JWSDP 1.6
JWSDP 1.6一個(gè)有用的功能就是對(duì)Web Services Description Language (WSDL)的支持。假定有一個(gè)描述Web服務(wù)的WSDL文檔,那么就可以自動(dòng)生成訪問(wèn)服務(wù)的客戶端代碼和支持服務(wù)的服務(wù)器端代碼。為了用一個(gè)簡(jiǎn)單的接口用來(lái)相應(yīng)客戶對(duì)已發(fā)布的Web服務(wù)的請(qǐng)求,我在JWSDP 1.6中用wscompile工具創(chuàng)建客戶端的類(lèi),它們可以基于三四個(gè)輸入?yún)?shù)來(lái)描述可能的動(dòng)作。結(jié)果,幾秒鐘內(nèi)就能創(chuàng)建驚人的32個(gè)類(lèi)。
一旦我指出這些類(lèi)中的哪些提供真正的創(chuàng)建請(qǐng)求的起始點(diǎn),那么編寫(xiě)代碼實(shí)現(xiàn)簡(jiǎn)單的命令行接口就很簡(jiǎn)單了。而當(dāng)我想運(yùn)行程序時(shí),問(wèn)題隨之而來(lái)。客戶端需要從JWSDP中添加10個(gè)jar包到他自己的Java程序中。
由于不能幫大家一個(gè)一個(gè)調(diào)試這些jar包與其它Java程序的潛在沖突,我放棄這種做法,轉(zhuǎn)而用string模板寫(xiě)一個(gè)簡(jiǎn)單的程序來(lái)創(chuàng)建SOAP請(qǐng)求和XPath來(lái)翻譯返回的結(jié)果。就像其名字一樣,我認(rèn)為JWSDP將主要用于創(chuàng)建Web服務(wù),而不是消費(fèi)Web服務(wù)。
XML-RPC還有用嗎?
JAX-RPC的復(fù)雜性導(dǎo)致程序員的某種倒退。從Google中搜索"JAX-RPC complexity"就能看到一些用戶的反應(yīng)。我想你應(yīng)該在以下情況考慮XML-RPC而不是JAX-RPC:
你的應(yīng)用程序只需相對(duì)簡(jiǎn)單的請(qǐng)求
你能控制服務(wù)器端和客戶端,你不需要發(fā)布WSDL
你想簡(jiǎn)單的解析客戶端(就像AJAX應(yīng)用程序)
分享:使用Ajax時(shí)的十個(gè)常犯的錯(cuò)誤看了Dflying Chen 介紹的一篇Ajax的文章就像練練英語(yǔ)自己翻譯一下,由于自己的水平有限,請(qǐng)大家批評(píng)指正。 本文的作者是知名.NET Ajax框架Ajax.NET Professional(AjaxPro)的作者M(jìn)ichael Sch
- xml創(chuàng)建節(jié)點(diǎn)(根節(jié)點(diǎn)、子節(jié)點(diǎn))
- WML開(kāi)發(fā)教程之 WAP網(wǎng)站服務(wù)器配置方法
- WMLScript的語(yǔ)法基礎(chǔ)
- 收集的WML Script標(biāo)準(zhǔn)函數(shù)庫(kù)
- WML教程之文本框控件Input
- 無(wú)線標(biāo)記語(yǔ)言(WML)基礎(chǔ)之WMLScript 基礎(chǔ)
- xml文件的結(jié)構(gòu)解讀
- 關(guān)于XSL - XSL教程
- 選擇模式 - XSL教程 - 2
- XPath入門(mén) - XSL教程 - 3
- 匹配模式 - XSL教程 - 4
- 測(cè)試模式 - XSL教程 - 5
- 相關(guān)鏈接:
- 教程說(shuō)明:
Xml教程-詳解XML-RPC和JAX-RPC。