XML-RPC - Exemplos
Para demonstrar XML-RPC, vamos criar um servidor que usa Java para processar mensagens XML-RPC e vamos criar um cliente Java para chamar procedimentos nesse servidor.
O lado Java da conversa usa o Apache XML-RPC do Projeto Apache XML, disponível em http://xml.apache.org/xmlrpc/
Coloque todos os arquivos .jar no caminho apropriado e vamos criar um cliente e um pequeno servidor XML-RPC usando JAVA.
Cliente XML-RPC
Vamos escrever um cliente XML-RPC para chamar uma função chamada função soma . Esta função recebe dois parâmetros e retorna sua soma.
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);
}
}
}
Vamos ver o que aconteceu no cliente de exemplo acima.
O pacote Java org.apache.xmlrpc contém classes para clientes XML-RPC Java e servidor XML-RPC, por exemplo, XmlRpcClient.
O pacote java.util é necessário para a classe Vector.
A função server.execute (...) envia a solicitação para o servidor. A soma do procedimento (17,13) é chamada no servidor como se fosse um procedimento local. O valor de retorno de uma chamada de procedimento é sempre um objeto.
Aqui, "amostra" denota um manipulador que é definido no servidor.
Observe que todos os parâmetros da chamada de procedimento são sempre coletados em um Vetor.
A classe XmlRpcClient é construída especificando o "endereço da web" da máquina do servidor seguido por / RPC2.
localhost - significa a máquina local
Você pode especificar um número de IP em vez de localhost, por exemplo, 194.80.215.219
Você pode especificar um nome de domínio como xyz.dyndns.org
Você pode especificar um número de porta junto com o nome de domínio como xyz.dyndns.org:8080. A porta padrão é 80
Observe que o resultado da chamada de procedimento remoto é sempre um objeto e deve ser convertido para o tipo apropriado.
Quando ocorrem problemas (sem conexão, etc.), uma Exceção é lançada e deve ser capturada usando a instrução catch .
Devido à chamada acima, um cliente envia a seguinte mensagem ao servidor. Observe que isso é tratado por server.execute (...) internamente e você não tem nada a ver com isso.
<?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>
Servidor XML-RPC
A seguir está o código-fonte do XML-RPC Server escrito em Java. Ele usa classes integradas disponíveis em 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);
}
}
}
Vamos ver o que fizemos no servidor de exemplo acima.
O pacote org.apache.xmlrpc contém a classe WebServer para uma implementação de servidor XML-RPC.
A soma do procedimento que é chamada remotamente é implementada como um método público em uma classe.
Uma instância da mesma classe de servidor é então associada a um manipulador que pode ser acessado pelo cliente.
O servidor é inicializado pelo número da porta (aqui: 80).
Quando ocorrem problemas, uma exceção é lançada e deve ser detectada usando a instrução catch .
Para a chamada mencionada no cliente de exemplo fornecido, o servidor envia a seguinte resposta de volta ao cliente:
<?xml version="1.0" encoding="ISO-8859-1"?>
<methodResponse>
<params>
<param>
<value><int>30</int></value>
</param>
</params>
</methodResponse>
Agora seu servidor está pronto, compile-o e execute-o no prompt da seguinte maneira:
C:\ora\xmlrpc\java>java JavaServer
Attempting to start XML-RPC Server...
Started successfully.
Accepting requests. (Halt program to stop.)
Agora, para testar a funcionalidade, faça uma chamada para este servidor da seguinte maneira:
C:\ora\xmlrpc\java>java JavaClient
30