使用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

     getCapitalCity

    

        

              England

        

    

 

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

    

        

              Michigan

        

    

 

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

    

        

             

                  

                       faultCode

                       802

                  

                  

                       faultString

                       Unknown country, 'Engand'.

                  

             

        

    

 

3.   XML-RPC实例

a)        发送请求:

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

                   ii.              代码:

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

Vector pars = new Vector();

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;

     }

}

你可能感兴趣的:(Java,Web,Service,&,SOA)