編寫第一個XML-RPC程序遇到的問題總結

一、XML-RPC調試時關於服務器的IP地址

u     如果服務器及客戶端都是同一臺機器,不管你的機器實際IP地址是多少,使用127.0.0.1地址意味着將信息回送到本機。

u     如果你的機器是在局域網內,如IP192.168.1.98,則你也可直接在Client端程序中寫上這個地址,信息一樣可以送達到Server端。

二、關於XmlRpcCommonsTransportFactory類需要import org.apache.commons.httpclient.HttpClient的問題

這是apache單獨發佈的一個jar包,沒有包含在XML-RPCXerces兩個軟件包中,如果只是在CLASSPATH中設置了這兩個軟件包中的jar包文件,在運行client端的程序時是會出現關於“找不到類文件”的報錯。這時需要到apache網站下載這個HttpClient軟件包,下載地址是http://hc.apache.org/downloads.cgi。撰寫本文時HttpClient包的最新版本是4.1版,不過由於我當前使用的XML-RPC3.1.3版,在HttpClient包的4.1版中已經沒有org.apache.commons.httpclient.HttpClient了,而是改爲了org.apache.http.client.HttpClient包而且這個包是被打在httpclient-4.1.jar包中。所以即使安裝了這個版本的HttpClient軟件包這個找不到類文件的問題依然無法解決。這時可以如下有兩種解決方案,一種是修改XmlRpcCommonsTransportFactory類的源代碼,將import進來的包名改爲org.apache.http.client.HttpClient;另外一種是安裝HttpClient包的3.1.3版,這個版本是在前面提到的下載網頁的最底部有鏈接http://archive.apache.org/dist/httpcomponents/。我選擇的是後者,問題得到解決。

三、org.apache.xmlrpc.XmlRpc包在XML-RPC 3.1.3版中已經不存在

注意:在XML-RPC 3.1.3版中,org.apache.xmlrpc.XmlRpc包已經不存在了,相應的XmlRpc.setDriver(String ParserDriverName)也就不存在了。XMLRPC默認採用SAX解析器。

四、編譯及運行時注意事項

u     Server ClientHandler三者必須位於同一package中,在編譯時使用:

javac –d . XXX.java

以便生成的class文件都位於指定的包名目錄下。

運行class文件時,使用:

java 包名.Server/Client

 

u     編譯時有先後順序,一定要先編譯Handler,然後才能編譯Server,因爲在編譯Server的時候需要註冊Handler類,這時會查找並加載同一個包名下的Handler類,如果此時還沒有編譯Handler,就會報錯找不到符號phm.addHandler("CreateAndroidSMSDB",  org.apache.xmlrpc.demo.CreateAndroidSMSDB.class);

 

 

u  啓動Server後如果修改了Handler類,而不重啓Server,運行Client時將報錯諸如:No such handler或者No match arguments。此時,只要重啓Server,讓它重新加載新的Handler類就可以了。

u     如果從Client端傳遞多個參數到Server端,則在Client端和Server端都要添加配置語句config.setEnabledForExtensions(true),即激活Extensions

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章