国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 開(kāi)發(fā) > XML > 正文

詳解XML-RPC和JAX-RPC

2024-09-05 20:54:10
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

響應(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ù)類型,并不需要名字空間。通過(guò)定義和包含其它值的類型,它獲得了相當(dāng)可觀的靈活性。下面是一個(gè)XML-RPC說(shuō)明書中的例子。它指定了示例應(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)容的所有類型標(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ō)明書中,沒(méi)有辦法指明任何類型的“null”值,但擴(kuò)展版本允許附加類型。

響應(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原始類型的定義與XML schema類型緊密相關(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ō)明書的下一個(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)建客戶端的類,它們可以基于三四個(gè)輸入?yún)?shù)來(lái)描述可能的動(dòng)作。結(jié)果,幾秒鐘內(nèi)就能創(chuàng)建驚人的32個(gè)類。

一旦我指出這些類中的哪些提供真正的創(chuàng)建請(qǐng)求的起始點(diǎn),那么編寫代碼實(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模板寫一個(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)用程序)

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 迁西县| 长岭县| 偃师市| 五寨县| 虹口区| 高邮市| 仙居县| 东山县| 宁乡县| 南安市| 夏邑县| 芜湖市| 双桥区| 通州区| 商洛市| 黄陵县| 肃宁县| 长海县| 博野县| 武陟县| 寿阳县| 鹤山市| 固镇县| 商水县| 平和县| 栖霞市| 长垣县| 合川市| 竹山县| 肇庆市| 义乌市| 呼和浩特市| 辽阳市| 迁安市| 东乌珠穆沁旗| 陇南市| 桓仁| 遂宁市| 逊克县| 洛阳市| 天门市|