diff --git a/week3_TinsaeGhilay/Task 2/README.md b/week3_TinsaeGhilay/Task 2/README.md new file mode 100644 index 0000000..e69de29 diff --git a/week3_TinsaeGhilay/Task 2/lib/commons-logging-1.1.jar b/week3_TinsaeGhilay/Task 2/lib/commons-logging-1.1.jar new file mode 100644 index 0000000..2ff9bbd Binary files /dev/null and b/week3_TinsaeGhilay/Task 2/lib/commons-logging-1.1.jar differ diff --git a/week3_TinsaeGhilay/Task 2/lib/ws-commons-util-1.0.2.jar b/week3_TinsaeGhilay/Task 2/lib/ws-commons-util-1.0.2.jar new file mode 100644 index 0000000..3fc364e Binary files /dev/null and b/week3_TinsaeGhilay/Task 2/lib/ws-commons-util-1.0.2.jar differ diff --git a/week3_TinsaeGhilay/Task 2/lib/xmlrpc-client-3.1.2.jar b/week3_TinsaeGhilay/Task 2/lib/xmlrpc-client-3.1.2.jar new file mode 100644 index 0000000..9c33bb4 Binary files /dev/null and b/week3_TinsaeGhilay/Task 2/lib/xmlrpc-client-3.1.2.jar differ diff --git a/week3_TinsaeGhilay/Task 2/lib/xmlrpc-common-3.1.2.jar b/week3_TinsaeGhilay/Task 2/lib/xmlrpc-common-3.1.2.jar new file mode 100644 index 0000000..707d1b3 Binary files /dev/null and b/week3_TinsaeGhilay/Task 2/lib/xmlrpc-common-3.1.2.jar differ diff --git a/week3_TinsaeGhilay/Task 2/lib/xmlrpc-server-3.1.2.jar b/week3_TinsaeGhilay/Task 2/lib/xmlrpc-server-3.1.2.jar new file mode 100644 index 0000000..79ef4bb Binary files /dev/null and b/week3_TinsaeGhilay/Task 2/lib/xmlrpc-server-3.1.2.jar differ diff --git a/week3_TinsaeGhilay/Task 2/out/client/Client.class b/week3_TinsaeGhilay/Task 2/out/client/Client.class new file mode 100644 index 0000000..b6f4f89 Binary files /dev/null and b/week3_TinsaeGhilay/Task 2/out/client/Client.class differ diff --git a/week3_TinsaeGhilay/Task 2/out/server/Server.class b/week3_TinsaeGhilay/Task 2/out/server/Server.class new file mode 100644 index 0000000..e23b68b Binary files /dev/null and b/week3_TinsaeGhilay/Task 2/out/server/Server.class differ diff --git a/week3_TinsaeGhilay/Task 2/src/client/Client.java b/week3_TinsaeGhilay/Task 2/src/client/Client.java new file mode 100644 index 0000000..ecbd211 --- /dev/null +++ b/week3_TinsaeGhilay/Task 2/src/client/Client.java @@ -0,0 +1,77 @@ + +package client; + +import java.util.Vector; +import java.util.Scanner; +import java.net.URL; + +/** + * Client class for XML-RPC communication + * + * @author Tinsae Ghilay + * from the example on + * https://www.tutorialspoint.com/xml-rpc/xml_rpc_examples.htm + */ +// import the org.apache.xmlrpc package +// it contains classes for XML-RPC client (and server) implementation +import org.apache.xmlrpc.*; +import org.apache.xmlrpc.client.XmlRpcClient; +import org.apache.xmlrpc.client.XmlRpcClientConfigImpl; + +public class Client { + + private static String TAG = "Client"; + + public static void main(String[] args) { + + try (Scanner scanner = new Scanner(System.in)) { + // create an XML-RPC client object with address to server @ localhost + // URL can be any valid URL. the default port for XML-RPC is 80 + // but here we use 8080 since 80 may need root privileges + XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl(); + config.setServerURL(new URL("http://localhost:8080/RPC2")); + + XmlRpcClient client = new XmlRpcClient(); + client.setConfig(config); + + while (true) { + // create parameters to be sent to server method in a vector + // and populate it + Vector params = new Vector(); + + int a = validateInput(scanner); + int b = validateInput(scanner); + + params.addElement(Integer.valueOf(a)); + params.addElement(Integer.valueOf(b)); + // make the remote method call + // the result of the remot call must be an Object + // and be casted to the appropriate type + Object result = client.execute("sample.sum", params); + // process the result + int sum = ((Integer) result).intValue(); + System.out.println("The sum is: " + sum); + + } + + } catch (Exception e) { // catch exceptions if problems occur + System.err.println(TAG + ": " + e.getMessage()); + } + } + + private static int validateInput(Scanner scanner) { + int number; + while (true) { + System.out.print("Enter an integer: "); + if (scanner.hasNextInt()) { + number = scanner.nextInt(); + break; + } else { + System.out.println("Invalid input. Please enter a valid integer."); + scanner.next(); + } + } + return number; + } + +} diff --git a/week3_TinsaeGhilay/Task 2/src/server/Server.java b/week3_TinsaeGhilay/Task 2/src/server/Server.java new file mode 100644 index 0000000..b64ff3b --- /dev/null +++ b/week3_TinsaeGhilay/Task 2/src/server/Server.java @@ -0,0 +1,42 @@ +package server; + +/** + * Server class for XML-RPC communication + * @author Tinsae Ghilay + * from the example on + * https://www.tutorialspoint.com/xml-rpc/xml_rpc_examples.htm + */ + +// import the org.apache.xmlrpc package +// it contains classes for XML-RPC client (and server) implementation +import org.apache.xmlrpc.webserver.WebServer; +import java.net.URL; +import org.apache.xmlrpc.server.PropertyHandlerMapping; +import org.apache.xmlrpc.server.XmlRpcServer; + +public class Server { + + private static String TAG = "Server"; + + public static void main(String[] args) { + + try { + // start XML-RPC server at port 8080 + WebServer server = new WebServer(8080); + XmlRpcServer xmlRpcServer = server.getXmlRpcServer(); + PropertyHandlerMapping phm = new PropertyHandlerMapping(); + phm.addHandler("sample", Server.class); + xmlRpcServer.setHandlerMapping(phm); + server.start(); + System.out.println(TAG + ": Server started successfully."); + System.out.println("Accepting requests. (Halt program to stop.)"); + } catch (Exception e) { // catch exceptions if problems occur + System.err.println(TAG + ": " + e.getMessage()); + } + } + + public Integer sum(Integer x, Integer y) { + return Integer.valueOf(x + y); + } + +}