使用XML-RPC来访问Web服务

1.   XML-RPC

a)        原理:XML-RPC是以XML的方式来发送RPC调用,他使用HTTP作为传输协议,把需要发送的请求和请求的结果封装到HTTP的消息当中。

由于RPC调用也是方法调用,只是被调用的一方不是在本地而已,虽然是这样,但是不能改变的是调用的本质,对于调用方,他需要提供所调用的方法和方法的参数,而对于被调用方,她通过解释调用方的请求,执行响应的调用,并将结果返回。这就是方法调用的本质。

RPC只是在调用和返回之间增加了网络传输和编码解码部分,而XML-RPC则是规定了编码和解码必须使用XML格式,而网络传输必须使用HTTP协议,仅此而已。

 

2.   XML-RPC的请求和响应格式

a)        请求:

POST /rpchandler HTTP/1.0

User-Agent: AcmeXMLRPC/1.0

Host: xmlrpc.example.com

Content-Type: text/xml

Content-Length: 165

<?xml version="1.0"?>

<methodCall>

     <methodName>getCapitalCity</methodName>

     <params>

         <param>

              <value><string> England </string></value>

         </param>

     </params>

</methodCall>

 

b)        响应:

HTTP/1.1 200 OK

Date: Sun, 29 Apr 2001 12:08:58 GMT

Server: Apache/ 1.3.12 (Unix) Debian/GNU PHP/4.0.2

Connection: close

Content-Type: text/xml

Content-length: 133

<?xml version="1.0"?>

<methodResponse>

     <params>

         <param>

              <value><string> Michigan </string></value>

         </param>

     </params>

</methodResponse>

 

c)        错误:

HTTP/1.1 200 OK

Date: Sun, 29 Apr 2001 12:08:58 GMT

Server: Apache/ 1.3.12 (Unix) Debian/GNU PHP/4.0.2

Connection: close

Content-Type: text/xml

Content-length: 133

<?xml version="1.0"?>

<methodResponse>

     <fault>

         <value>

              <struct>

                   <member>

                       <name>faultCode</name>

                       <value><int>802</int></value>

                   </member>

                   <member>

                       <name>faultString</name>

                       <value><string>Unknown country, 'Engand'.</string></value>

                   </member>

              </struct>

         </value>

     </fault>

</methodResponse>

 

3.   XML-RPC实例

a)        发送请求:

                      i.              说明:使用XmlRpcClient可以发送请求,在请求当中我们需要提供所需要调用的方法名,以及方法参数,且参数需包装到一个集合当中。

                   ii.              代码:

XmlRpcClient client = new XmlRpcClient("http://127.0.0.1:6666");

Vector<String> pars = new Vector<String>();

pars.addElement("nick");

Object result = client.execute("service.hello", pars);

System.out.println("The Result is : " + result);

 

b)        发布服务:

                      i.              说明:通过WebServer我们可以很方便的发布服务。其中添加到addHandler()当中的实例就是服务体,而“service”就表示服务名称。当请求到达时,他会根据请求的名称与查找服务体,然后在返回的实例上调用execute()方法。

                   ii.              代码:

WebServer server = new WebServer(6666);

server.addHandler("service", new Service());

server.start();

 

public class Service implements XmlRpcHandler {

     public Object execute(String methodName, Vector args) throws Exception {

         if ("service.hello".equals(methodName)) {

              return hello((String) args.get(0));

         }

         return "";

     }

     private String hello(String name) {

         return "Hello " + name;

     }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值