XML-RPC 之 Apache XML-RPC 執行個體

來源:互聯網
上載者:User
apache|xml

作者:王恩建來源:http://www.sentom.netXML-RPC 是工作在 Internet 上的遠端程序呼叫協議。通俗點講,就是使用 HTTP 協議互動,互動的載體是 XML 檔案。XML-RPC 具體的規範說 明請參考這裡。
圖片來自XML-RPC官方網站

XML-RPC 規範定義了六種資料類型,下表是這六種資料類型與 Java 的資料類型對應表。

XML-RPCJava<i4> 或 <int>int<boolean>boolean<string>java.lang.String<double>double<dateTime.iso8601>java.util.Date<struct>java.util.Hashtable<array>java.util.Vector<base64>byte[ ]

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檔案中加入以下幾行:



<servlet> <servlet-name>MyXmlRpcServer</servlet-name> <servlet-class>net.sentom.xmlrpc.MyXmlRpcServer</servlet-class></servlet><servlet-mapping> <servlet-name>MyXmlRpcServer</servlet-name> <url-pattern>/MyXmlRpcServer</url-pattern></servlet-mapping>
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');


相關文章

Cloud Intelligence Leading the Digital Future

Alibaba Cloud ACtivate Online Conference, Nov. 20th & 21st, 2019 (UTC+08)

Register Now >

11.11 Big Sale for Cloud

Get Unbeatable Offers with up to 90% Off,Oct.24-Nov.13 (UTC+8)

Get It Now >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。