您的位置:首页 > 其它

使用XML-RPC来访问Web服务

2005-08-31 23:01 489 查看
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;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐