程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> XML-RPC 之 Apache XML-RPC 實例

XML-RPC 之 Apache XML-RPC 實例

編輯:關於JAVA

作者:王恩建來源:http://www.sentom.NetXML-RPC 是工作在 Internet 上的遠程過程調用協議。通俗點講,就是使用 HTTP 協議交互,交互的載體是 XML 文件。XML-RPC 具體的規范說 明請參考這裡。

圖片來自XML-RPC官方網站

XML-RPC 規范定義了六種數據類型,下表是這六種數據類型與 Java 的數據類型對應表。

XML-RPCJava 或intbooleanJava.lang.StringdoubleJava.util.DateJava.util.HashtableJava.util.Vectorbyte[ ]

XML-RPC 規范的各種平台都有具體實現,XML-RPC 規范的 Java 實現都有好幾種,這裡我們選擇了 apache XML-RPC。

XML-RPC 服務端實現先定義一個簡單業務對象 MyHandler,遠程客戶端將調用該對象的方法,具體代碼如下:

package net.sentom.XMLrpc;public class MyHandler {public String sayHello(String str){return "Hello," + str;}}

然後定義一個 Servlet 名叫 MyXMLRpcServer,遠程客戶端通過 HTTP-POST 訪問該 Servlet。

package net.sentom.XMLrpc;import java.io.IOException;import java.io.OutputStream;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import Javax.servlet.http.HttpServletResponse;import org.apache.xmlrpc.XmlRpcServer;public class MyXmlRpcServer extends HttpServlet {public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {XmlRpcServer xmlrpc = new XmlRpcServer();xmlrpc.addHandler("myHandler", new MyHandler());byte[] result = xmlrpc.execute(request.getInputStream());response.setContentType("text/XML");response.setContentLength(result.length);OutputStream out = response.getOutputStream();out.write(result);out.flush();}}

需要特別說明是:

XMLrpc.addHandler("myHandler", new MyHandler());

為了便於理解,這裡可以看成普通的:

MyHandler myHandler = new MyHandler();

最後在web.XML文件中加入以下幾行:

MyXMLRpcServer net.sentom.xmlrpc.MyXMLRpcServerMyXMLRpcServer /MyXMLRpcServer

XML-RPC 客戶端實現客戶端相對簡單一些,先來一個 Java 客戶端實現 MyXMLRpcClIEnt:

package net.sentom.XMLrpc;import java.io.IOException;import Java.Net.MalformedURLException;import Java.util.Vector;import org.apache.xmlrpc.XmlRpcClIEnt;import org.apache.xmlrpc.XmlRpcException;public class MyXmlRpcClient {public static void main(String[] args) {try {XmlRpcClient xmlrpc = new XmlRpcClIEnt("http://localhost:8080/XMLRPC/MyXmlRpcServer");Vector params = new Vector();params.addElement("Tom");String result = (String) xmlrpc.execute("myHandler.sayHello",params);System.out.println(result);} catch (MalformedURLException e) {System.out.println(e.toString());} catch (XMLRpcException e) {System.out.println(e.toString());} catch (IOException e) {e.printStackTrace();}}

http://localhost:8080/XMLRPC/MyXmlRpcServer 為 MyXMLRpcServer 的訪問URL。

String result = (String) XMLrpc.execute("myHandler.sayHello",params);

再來一個 Python 客戶端實現

import xmlrpcliburl = 'http://localhost:8080/XMLRPC/MyXmlRpcServer';server = XMLrpclib.Server(url);print server.myHandler.sayHello('Tom');

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved