1.xml rpc是什麼
1.1. xml rpc簡介
xml rpc是使用http協議做為傳輸協議的rpc機制,使用xml文本的方式傳輸命令和資料。
一個rpc系統,必然包括2個部分:1.rpc client,用來向rpc server調用方法,並接收方法的返回資料;2.rpc server,用於響應rpc client的請求,執行方法,並回送方法執行結果。
1.2. xml rpc的可用版本
xml rpc client和xml rpc server都有很多版本的實現。一般而言,一個實現版本都會同時實現client/server。但由雩都滿足xml rpc規範,從理論上講,任何一個版本的rpc client實現與任何一個版本的rpc server都能配套使用。
更進一步,由於xml rpc以xml文本的方式,使用http協議傳輸,所以與程式設計語言無關。例如:rpc client的已實現版本包括了:perl,php,python,c/c++,java,等等;rpc server的實現語言套件括perl,java,等。
同一種程式設計語言所實現的版本也不止一個。例如java版的實現有:Marque的xmlrpc實現(http://xmlrpc.sourceforge.net/),apache的xmlrpc 實現(http://ws.apache.org/xmlrpc/)
1.3.xmlrpc的工作原理
完整的需要參考xmlrpc規範(http://www.xmlrpc.com/spec)
簡單描述:
rpcclient的工作原理:rpcclient根據URL找到rpcserver -> 構造命令包,調用rpcserver上的某個服務的某個方法 -> 接收到rpcserver的返回,解析響應包,拿出調用的返回結果。
rpcserver的工作原理:啟動一個webserver(在使用內建的webserver的情況下) -> 註冊每個能提供的服務,每個服務對應一個Handler類 ->進入服務監聽狀態。
1.4. xmlrpc規範
區區6頁,講的非常清楚,建議細看。http://www.xmlrpc.com/spec
2.在java中使用xml rpc的幾個例子
2.0.環境準備:下載如下包並設定到CLASSPATH中
apache xmlrpc軟體包(http://ws.apache.org/xmlrpc/)
commons-httpclient-3.0-rc4.jar
commons-codec-1.3.jar
2.1.使用apache的java xmlrpc實現版本,實現簡單的加/減服務。參考附錄中test.XmlRPCClient類與test.JavaServer類
2.2.使用apache的java xmlrpc實現版本,測試java的資料類型與xmlrpc資料類型的相互對應關係。參考附錄中test2.XmlRPCClient類與test2.JavaServer類。
在這裡簡單描述一下:
>xmlrpc中的Array類型,對應到java中的Vector類型
例如:在RPC Server中的某個服務方法的傳回值的宣告類型是String[],但在Client中接收到的將是Vector對象;
反之,如果Client傳送過去的調用參數為String[],但在RPC Server中所接收到的將是Vector對象
當然,如果我們不使用String[],直接聲明為Vector,也是可以的。
>xmlrpc中的struct類型,對應到java中的Hashtable類型
> 其它的類型,如:String,int,double,boolean,Date等,都比較好對應。需要注意的是:在rpc Client中,如果使用到int/double/boolean這些基本類型時,需要將他們封裝成一個相應的Object,例如: Integer/Double/Boolean。
2.3.使用apache的java xmlrpc實現版本,實現自訂類型的資料的傳輸
這個sample中,假設所傳輸的 object都實現了XmlRPCSerializable介面。這個例子的目的是:類比unionmon中的 command對象。當假設所傳輸的資料是一個Object[]時,可以用這種方式傳輸。結合unionmon中的代碼產生機制,每個vo的序列化/還原序列化方法可以在代碼產生過程中完成。同樣地,vox的序列化/還原序列化方法需要手寫。
參考代碼:附錄中的test3.XmlRPCSerializable , test3.AccountVO , test3.XmlRPCClient , test3.JavaServer
2.4.不啟動內建的WebServer,讓tomcat支援rpc server。
做法:1.實現一個Servlet,並配置到tomcat中;2.讓rpc client直接找這個servlet,獲得服務。
注意rpc client使用的是http post方法,所以該servlet中只需要實現doPost方法。
過程:在tomcat中的web.xml增加如下配置:
SampleServiceServlet
test4.ServletXmlRPCServer
SampleServiceServlet
/SampleServiceServlet
參考類:附件中的test4.SampleService,test4.ServletXmlRPCServer,test4.XmlRPCClient
3.todolist
3.1.能否通過introspect方式,使得自訂類型的vo的序列化/還原序列化工作自動完成.castor可以完成對象的xml binding,似乎可參考
3.2.soap協議比xmlrpc複雜並強大。soap不熟悉。另,soap一定與web service在一起用?能否不用web service,但使用soap做rmi的協議。
4.附錄
4.1.附錄1 xmlrpc所支援的資料類型(略)
4.2.附錄2 xmlrpc資料類型與java語言的資料類型的映射(略)
4.3.參考資料
http://xmlrpc.sourceforge.net/ –Marque的xmlrpc實現
http://ws.apache.org/xmlrpc/ apache上xmlrpc server的實現
http://xmlrpc-c.sourceforge.net/xmlrpc-howto/xmlrpc-howto.html xmlrpc howto
http://www.sentom.net/list.asp?id=80 xml-rpc之執行個體
http://www.xmlrpc.com/spec xmlrpc規範