XML-RPC - ตัวอย่าง

เพื่อสาธิต XML-RPC เราจะสร้างเซิร์ฟเวอร์ที่ใช้ Java เพื่อประมวลผลข้อความ XML-RPC และเราจะสร้างไคลเอนต์ Java เพื่อเรียกโพรซีเดอร์บนเซิร์ฟเวอร์นั้น

ด้าน Java ของการสนทนาใช้ Apache XML-RPC ของโครงการ Apache XML Project ซึ่งมีอยู่ที่ http://xml.apache.org/xmlrpc/

ใส่ไฟล์. jar ทั้งหมดในพา ธ ที่เหมาะสมและให้เราสร้างไคลเอนต์หนึ่งเครื่องและเซิร์ฟเวอร์ XML-RPC ขนาดเล็กหนึ่งเครื่องโดยใช้ JAVA

ไคลเอนต์ XML-RPC

ให้เราเขียนไคลเอนต์ XML-RPC เพื่อเรียกใช้ฟังก์ชันที่เรียกว่าฟังก์ชันsum ฟังก์ชันนี้รับสองพารามิเตอร์และส่งกลับผลรวม

import java.util.*;
import org.apache.xmlrpc.*;

public class JavaClient {
   public static void main (String [] args) {
   
      try {
         XmlRpcClient client = new XmlRpcClient("http://localhost/RPC2"); 
         Vector params = new Vector();
         
         params.addElement(new Integer(17));
         params.addElement(new Integer(13));

         Object result = server.execute("sample.sum", params);

         int sum = ((Integer) result).intValue();
         System.out.println("The sum is: "+ sum);

      } catch (Exception exception) {
         System.err.println("JavaClient: " + exception);
      }
   }
}

ให้เราดูว่าเกิดอะไรขึ้นในไคลเอนต์ตัวอย่างข้างต้น

  • แพ็กเกจ Java org.apache.xmlrpc มีคลาสสำหรับไคลเอนต์ XML-RPC Java และเซิร์ฟเวอร์ XML-RPC เช่น XmlRpcClient

  • แพ็กเกจ java.util จำเป็นสำหรับคลาส Vector

  • ฟังก์ชันserver.execute (... )ส่งคำขอไปยังเซิร์ฟเวอร์ ผลรวมของโพรซีเดอร์ (17,13) ถูกเรียกบนเซิร์ฟเวอร์ราวกับว่าเป็นโพรซีเดอร์โลคัล ค่าที่ส่งคืนของการเรียกโพรซีเดอร์คือ Object เสมอ

  • "ตัวอย่าง" ในที่นี้หมายถึงตัวจัดการที่กำหนดไว้ในเซิร์ฟเวอร์

  • โปรดทราบว่าพารามิเตอร์ทั้งหมดของการเรียกโพรซีเดอร์จะถูกรวบรวมใน Vector เสมอ

  • คลาส XmlRpcClient สร้างขึ้นโดยการระบุ "ที่อยู่เว็บ" ของเครื่องเซิร์ฟเวอร์ตามด้วย / RPC2

    • localhost - หมายถึงเครื่องท้องถิ่น

    • คุณสามารถระบุหมายเลข IP แทน localhost เช่น 194.80.215.219

    • คุณสามารถระบุชื่อโดเมนเช่น xyz.dyndns.org

    • คุณสามารถระบุหมายเลขพอร์ตพร้อมกับชื่อโดเมนเป็น xyz.dyndns.org:8080 พอร์ตเริ่มต้นคือ 80

  • โปรดสังเกตว่าผลลัพธ์ของการเรียกโพรซีเดอร์ระยะไกลจะเป็น Object เสมอและจะต้องถูกแคสต์เป็นประเภทที่เหมาะสม

  • เมื่อเกิดปัญหา (ไม่มีการเชื่อมต่อ ฯลฯ ) ข้อยกเว้นจะถูกโยนออกไปและจะต้องถูกจับโดยใช้คำสั่งcatch

เนื่องจากการโทรข้างต้นไคลเอนต์ส่งข้อความต่อไปนี้ไปยังเซิร์ฟเวอร์ โปรดทราบว่าสิ่งนี้ได้รับการจัดการโดยserver.execute (... )ภายในและคุณไม่มีส่วนเกี่ยวข้องใด ๆ

<?xml version="1.0" encoding="ISO-8859-1"?>
<methodCall>
   <methodName>sample.sum</methodName>
   <params>
      <param>
         <value><int>17</int></value>
      </param>
		 
      <param>
         <value><int>13</int></value>
      </param>
   </params>
</methodCall>

เซิร์ฟเวอร์ XML-RPC

ต่อไปนี้เป็นซอร์สโค้ดของ XML-RPC Server ที่เขียนด้วย Java ใช้ประโยชน์จากคลาสในตัวที่มีอยู่ในorg.apache.xmlrpc *

import org.apache.xmlrpc.*;

public class JavaServer { 

   public Integer sum(int x, int y){
      return new Integer(x+y);
   }

   public static void main (String [] args){
   
      try {

         System.out.println("Attempting to start XML-RPC Server...");
         
         WebServer server = new WebServer(80);
         server.addHandler("sample", new JavaServer());
         server.start();
         
         System.out.println("Started successfully.");
         System.out.println("Accepting requests. (Halt program to stop.)");
         
      } catch (Exception exception){
         System.err.println("JavaServer: " + exception);
      }
   }
}

ให้เราดูสิ่งที่เราได้ทำในเซิร์ฟเวอร์ตัวอย่างด้านบน

  • แพ็กเกจ org.apache.xmlrpc มีคลาส WebServer สำหรับการใช้งานเซิร์ฟเวอร์ XML-RPC

  • ผลรวมของโพรซีเดอร์ที่เรียกว่ารีโมตถูกนำไปใช้เป็นวิธีสาธารณะในคลาส

  • จากนั้นอินสแตนซ์ของคลาสเซิร์ฟเวอร์เดียวกันจะเชื่อมโยงกับตัวจัดการที่ไคลเอ็นต์สามารถเข้าถึงได้

  • เซิร์ฟเวอร์เริ่มต้นด้วยหมายเลขพอร์ต (ที่นี่: 80)

  • เมื่อเกิดปัญหาขึ้นข้อยกเว้นจะถูกโยนทิ้งและต้องถูกจับโดยใช้คำสั่งcatch

สำหรับการโทรที่กล่าวถึงในไคลเอนต์ตัวอย่างที่กำหนดเซิร์ฟเวอร์จะส่งการตอบกลับต่อไปนี้กลับไปยังไคลเอนต์:

<?xml version="1.0" encoding="ISO-8859-1"?>
<methodResponse>
   <params>
      <param>
         <value><int>30</int></value>
      </param>
   </params>
</methodResponse>

ตอนนี้เซิร์ฟเวอร์ของคุณพร้อมแล้วดังนั้นให้รวบรวมและเรียกใช้ตามข้อความแจ้งของคุณดังนี้:

C:\ora\xmlrpc\java>java JavaServer
Attempting to start XML-RPC Server...
Started successfully.
Accepting requests. (Halt program to stop.)

ตอนนี้เพื่อทดสอบการทำงานโทรไปยังเซิร์ฟเวอร์นี้ดังนี้:

C:\ora\xmlrpc\java>java JavaClient
30