基於 HTTP 傳輸、XML 承載的遠程過程調用協議。規範定義六種資料型別與 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[] |
// 業務處理類
public class MyHandler {
public String sayHello(String str) { return "Hello, " + str; }
}
// XML-RPC Servlet
public class MyXmlRpcServer extends HttpServlet {
public void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
XmlRpcServer xmlrpc = new XmlRpcServer();
xmlrpc.addHandler("myHandler", new MyHandler()); // 註冊處理器
byte[] result = xmlrpc.execute(req.getInputStream()); // 執行並獲取結果
resp.setContentType("text/xml");
resp.getOutputStream().write(result);
}
}
web.xml 映射 Servlet 路徑 /MyXmlRpcServer。
XmlRpcClient client = new XmlRpcClient("https://localhost:8080/XMLRPC/MyXmlRpcServer");
Vector params = new Vector();
params.addElement("Tom");
String result = (String) client.execute("myHandler.sayHello", params);
System.out.println(result); // Hello, Tom
xmlrpclib)import xmlrpclib
server = xmlrpclib.Server('https://localhost:8080/XMLRPC/MyXmlRpcServer')
print server.myHandler.sayHello('Tom')
myHandler) + 方法名 (sayHello) 組成調用路徑 myHandler.sayHello。Vector 封裝,順序對應方法簽名。