-
Cliente e Servidor, Java XML-RPC
Posted on May 16th, 2009 3 commentsBoa noite,
Como havia comentado a algum tempo atrás, estava trabalhando com um cliente XML-RPC em Java, durante a fase de desenvolvimento do mesmo tive que criar um servidor XML-RPC hipotetico para testar as funcionalidades do cliente, enquanto o servidor certo ainda não estava disponivel para minha pessoa.
Resumidamente para você que não conhece XML-RPC ele é um “formato” , um “jeito”, não sei ao certo a palavra certa para definir agora, onde você cria um servidor e o mesmo quando requisitado faz as operações necessarias e retorna um resultado. Um exemplo seria, você tem um código de criptografia que funciona MUITO bem em C, mas seu sistema é todo em Java, você poderia criar um Cliente JAVA e um Servidor C onde o Java faria requisição para Criptografar as coisas. Talvez utilizar XML-RPC de Java para Java possa ser meio estranho, mas quando os serviços estão distantes, pode ser algo util.
Para começar a mecher com o XML-RPC no Java eu utilizei o apache xml-rpc. Após isso apenas desenvolvi.
Baixe os exemplos cliente e servidor xml-rpc em java.
Servidor:
package xmlrpc;
import org.apache.xmlrpc.server.PropertyHandlerMapping;
import org.apache.xmlrpc.server.XmlRpcServer;
import org.apache.xmlrpc.webserver.WebServer;public class ServidorXMLRPCParaTestes {
private static ServidorXMLRPCParaTestes euMesmo = null;
private ServidorXMLRPCParaTestes() {
try {
WebServer server = new WebServer(8185); // Cria um servidor na porta 8185
XmlRpcServer servidor = server.getXmlRpcServer(); // Pega o servidor XmlRpc
PropertyHandlerMapping phm = new PropertyHandlerMapping();
phm.addHandler(”Calc”, Calculadora.class); // Adiciona um novo “handler” ao PHM
servidor.setHandlerMapping(phm); // Define o handler no servidor
server.start(); // inicia o servidor.
} catch (Exception exception) {
System.err.println(”JavaServer: ” + exception);
}
}public static ServidorXMLRPCParaTestes obterInstância() {
if (euMesmo == null)
euMesmo = new ServidorXMLRPCParaTestes();
return euMesmo;
}
}- Eu utilizeo o obterInstancia para não poder existir mais de um ServidorXMLRPC

- O handler faz o seguinte, quando for chamado Calc.METODO no servidor ele irá buscar dentro do Calculadora.classHandler Calculadora:
package xmlrpc;
public class Calculadora {
public int soma(int x, int y) {
return x + y;
}
public int subtracao(int x, int y) {
return x – y;
}}
Cliente XML-RPC generico:
package xmlrpc;
import java.net.URL;
import org.apache.xmlrpc.*;
import org.apache.xmlrpc.client.XmlRpcClient;
import org.apache.xmlrpc.client.XmlRpcClientConfigImpl;public class ClienteXmlRpc {
private static final String urlServidor = “http://localhost:8185″; //DEFINE A URL DO SERVIDOR
private XmlRpcClient xmlrpc;public ClienteXmlRpc() {
try {
XmlRpcClientConfigImpl configuraçãoCliente = new XmlRpcClientConfigImpl();
configuraçãoCliente.setServerURL(new URL(urlServidor));xmlrpc = new XmlRpcClient();
xmlrpc.setConfig(configuraçãoCliente);} catch (Exception exception) {
exception.printStackTrace();
}
}public Object executar(String comando, Object[] parametros) {
try {
Object resposta = xmlrpc.execute(comando, parametros);
return resposta;
} catch (XmlRpcException e) {
e.printStackTrace();
return null;
}
}}
- Acredito que o Cliente XML-RPC e o Cliente são auto-explicativos. Qualquer duvida entre em contato.
CalculadoraCliente:
package cliente;
import xmlrpc.ClienteXmlRpc;
public class CalculadoraCliente {
private ClienteXmlRpc cliente;public CalculadoraCliente() {
cliente = new ClienteXmlRpc();
}public int soma(int x, int y) {
Object[] parametros = new Object[]{new Integer(x), new Integer(y)};
Integer resultado = (Integer) cliente.executar(”Calc.soma”, parametros);
return resultado;
}public int subtracao(int x, int y) {
Object[] parametros = new Object[]{new Integer(x), new Integer(y)};
Integer resultado = (Integer) cliente.executar(”Calc.subtracao”, parametros);
return resultado;
}
}Para rodar os mesmos e testar gerei 2 classes com main e executei as mesmas (executando primeiro o servidor é claro)
RodarServidor:
import xmlrpc.ServidorXMLRPCParaTestes;
public class RodarServidor {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
ServidorXMLRPCParaTestes Servidor = ServidorXMLRPCParaTestes.obterInstância();
}}
RequisicaoCliente:
import cliente.CalculadoraCliente;
public class RequisicaoCliente {
/**
* @param args
*/
public static void main(String[] args) {
CalculadoraCliente x = new CalculadoraCliente();
System.out.println(x.soma(1, 1));
}}
Abraços,
Matheus3 responses to “Cliente e Servidor, Java XML-RPC”
-
Matheus, valeu pelo post cara, eu procurei por todo canto um exemplo que funcionasse e nenhum funcionava, mas o seu funcionou.
Agora, eu gostaria de saber se você sabe como fazer pra enviar arquivos usando xml-rpc.
Abraço
-
[...] resolvi dar uma rápida pesquisada para ensina-lo. Acabei me entretendo e resolvi modificar o Cliente e Servidor Java XML-RPC para fazer o [...]
-
Jorge,
Criei um post para auxiliar você, caso tenha algum problema entre em contato.
Abraço,
Matheus
Leave a reply
-








