扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
图片来自XML-RPC官方网站
XML-RPC 规范定义了六种数据类型,下表是这六种数据类型与 Java 的数据类型对应表。
XML-RPC | Java |
<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。
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>
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 xmlrpclib url = 'http://localhost:8080/XMLRPC/MyXmlRpcServer'; server = xmlrpclib.Server(url); print server.myHandler.sayHello('Tom');
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者