一、XML-RPC调试时关于服务器的IP地址
u 如果服务器及客户端都是同一台机器,不管你的机器实际IP地址是多少,使用127.0.0.1地址意味着将信息回送到本机。
u 如果你的机器是在局域网内,如IP是192.168.1.98,则你也可直接在Client端程序中写上这个地址,信息一样可以送达到Server端。
二、关于XmlRpcCommonsTransportFactory类需要import org.apache.commons.httpclient.HttpClient包的问题
这是apache单独发布的一个jar包,没有包含在XML-RPC或Xerces两个软件包中,如果只是在CLASSPATH中设置了这两个软件包中的jar包文件,在运行client端的程序时是会出现关于“找不到类文件”的报错。这时需要到apache网站下载这个HttpClient软件包,下载地址是http://hc.apache.org/downloads.cgi。撰写本文时HttpClient包的最新版本是4.1版,不过由于我当前使用的XML-RPC是3.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 、Client、Handler三者必须位于同一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。