Чтобы продемонстрировать 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 для вызова функции, называемой функцией суммы . Эта функция принимает два параметра и возвращает их сумму.
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 содержит классы для клиентов Java XML-RPC и сервера XML-RPC, например XmlRpcClient.
-
Пакет java.util необходим для класса Vector.
-
Функция server.execute (…) отправляет запрос на сервер. Сумма процедуры (17,13) вызывается на сервере, как если бы это была локальная процедура. Возвращаемым значением вызова процедуры всегда является Object.
-
Здесь «образец» обозначает обработчик, который определен на сервере.
-
Обратите внимание, что все параметры вызова процедуры всегда собираются в векторе.
-
Класс XmlRpcClient создается путем указания «веб-адреса» сервера, за которым следует / RPC2.
-
localhost — означает локальный компьютер
-
Вы можете указать номер IP вместо localhost, например, 194.80.215.219
-
Вы можете указать доменное имя как xyz.dyndns.org
-
Вы можете указать номер порта вместе с именем домена как xyz.dyndns.org:8080. Порт по умолчанию — 80
-
-
Обратите внимание, что результатом удаленного вызова процедуры всегда является Object, и он должен быть приведен к соответствующему типу.
-
Когда возникают проблемы (нет соединения и т. Д.), Создается исключение, и оно должно быть перехвачено с помощью оператора catch .
Пакет Java org.apache.xmlrpc содержит классы для клиентов Java XML-RPC и сервера XML-RPC, например XmlRpcClient.
Пакет java.util необходим для класса Vector.
Функция server.execute (…) отправляет запрос на сервер. Сумма процедуры (17,13) вызывается на сервере, как если бы это была локальная процедура. Возвращаемым значением вызова процедуры всегда является Object.
Здесь «образец» обозначает обработчик, который определен на сервере.
Обратите внимание, что все параметры вызова процедуры всегда собираются в векторе.
Класс 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, написанный на 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 .
Пакет 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.)
Теперь, чтобы проверить функциональность, позвоните на этот сервер следующим образом: