1,The xmlrpcclient-----xmlrpc客户端
在说XML-RPC server前,我们需要拥有一个XmlRpcClient的实例。
它是一个无状态,线程安全的对象。客户端通过设置如下对象来进行配置:
A,ClientConfig:这个对象是XmlRpcClientConfig的实例。它有许多的原子属性,定义了如SERVER URL,credentials,字符集等等详细设置。
B,TransportFactory:它的任务是创建一个用于与服务端通信的对象,这个对象使用clientConfig的设置进行配置。
C,XmlWriterFactory:它是一个用来创建XML的对象。
客户端的一个例子:
import org.apache.xmlrpc.client.XmlRpcClient;
import org.apache.xmlrpc.client.XmlRpcClientConfigImpl;
XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl();
config.setServerURL(new URL("http://127.0.0.1:8080/xmlrpc"));
XmlRpcClient client = new XmlRpcClient();
client.setConfig(config);
Object[] params = new Object[]{new Integer(33), new Integer(9)};
Integer result = (Integer) client.execute("Calculator.add", params);
这个示例展示我了我们调用远端的Calculator对象的add方法,参数由params指定,result作为方法的返回值。
这个示例默认使用的是java.net.URLConnection类来与服务端进行连接。假如你想要使用HTTPClient包来与服务端连接,则只需要做一个修改:
import org.apache.xmlrpc.client.XmlRpcClient;
import org.apache.xmlrpc.client.XmlRpcClientConfigImpl;
import org.apache.xmlrpc.client.XmlRpcCommonsTransportFactory;
XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl();
config.setServerURL(new URL("http://127.0.0.1:8080/XmlRpcServlet"));
XmlRpcClient client = new XmlRpcClient();
client.setTransportFactory(new XmlRpcCommonsTransportFactory(client));
client.setConfig(config);
Object[] params = new Object[]{new Integer(2), new Integer(3)};
Integer result = (Integer) client.execute("Calculator.add", params);
换句话说,transport factory决定了客户端如何与服务端进行通信,最重要的tansprot factory如下:
A,XmlRpcSunHttpTransprotFactory:这是默认的transport factory,通过使用java.net.HttpURLConnection来与HTTP服务端 建立连接。
B,XmlRpcCommonsTransportFactory:另一个HTTP transport factory,通过使用the jakarta commons httpclient来与服务端进行通信。
C,XmlRpcLiteHttpTransportFactory:这也是一个HTTP transport factory,它是基于一个私有的,非常轻量的HTTP客户端。它很可能是最快的transport factory。但是,它不能支持HTTP/1.1,因此不能使用keepalive连接。
D,XmlRpcLocalTransportFactory:这个transport factory 有一个内嵌的XML-RPC服务器,可以通过直接的java调用来调用它。这个对于调试和开发是特别有用。
2,Server-side XML-RPC(服务端XML-RPC)
对于服务端来说,和客户端其实没太大区别。首先,需要一个叫做XmlRpcServer的对象。这个对象的目的是接收和执行来自客户端的XML-RPC调用。XmlRpcServer能够被嵌入到一个servlet container或者另一个HTTP server中。就像the local transport一样,XML-RPC server被嵌到了client application中。
就像XmlRpcClient,XmlRpcServer需要一个配置,这个配置通过XmlRpcServerConfigImpl对象提供。