um passo a passo básico de como criar o web service no eclipse:
[list]baixe o axis 2 de http://axis.apache.org/axis2/java/core/download.cgi e descompacte;[/list]
[list]no eclipse va em window, preferences, la em baixo a opção web services, axis 2 preferences e em axis2 runtime location deixe o endereço da pasta onde descompactou o axis2;
crie um projeto web comum (dinamic web project)[/list]
[list]crie uma classe, dentro dela cada método publico dessa classe será transformado em um serviço na web. Como eu disse la em cima, não é legal usar tipos da linguagem, prefira tipos primitivos, Strings, VOs se for o caso olu arrays de algum destes, por boa prática mesmo;[/list]
[list]clique com o direito do mouse no projeto web do web service, new, vai la no other embaixo, marca web service (na pasta web services);[/list]
[list]do lado direito tem la o projeto que vai ficar o web service, o servidor, a versão do axis, na metade de cima da janela, vão vir opções erradas e você deverá clicar no link e corrigir isso tudo, next até acabar e finish (tem umas opções la de gerar os casos de teste junit, coisas do tipo, nunca usei…).[/list]
[list]inicia o servidor que usou caso não tenha feito isso no meio do next, finish, abre o browser, abra a raiz do projeto, vai ter uma pagina do axis 2 (quando cria o web service, o plugin cria algumas paginas no seu projeto também e adiciona no seu welcome-file-list no web.xml), ai clica no link services e no nome da classe que você criou (que foi transformada em web services). Você está na página do famoso wsdl, copie esse link que será necessário para criar o cliente;[/list]
[list]agora crie outro dinamic web project para ser o cliente.[/list]
[list]clique com o direito nele, new, other, la na pasta web services vai em web service client, ai você precisa informar o endereço do wsdl copiado anteriormente, depois na tela que não mechemos embaixo e corrigimos os valores em cima, fazemos o contrário dessa vez, corrigimos em baixo, na parte do cliente. Next até o final e finish.[/list]
[list]Foram criadas as classes do stub e do CallBackHundler, com nome e pacotes iguais ao informado no ultimo passo, é esse stub que usamos para acessar o web service. Para quem conhece rmi esse stub funciona da mesma forma, você chama o stub e o stub chama o serviço do outro lado e te retorna o resultado. Teremos dentro do stub uma sub-classe representando cada serviço e retorno do serviço. As classes que representam algum serviço vão ter um setter para cada parâmetro do serviço, você deve criar uma instancia do stub (eu costumo usar o construtor que recebe string e passar o endereço do wsdl), criar um objeto dessas subclasses de serviços, acessar todos estes setters(mesmo que seja para passar null) passando os parâmetros e chamar o método no stub com o nome do serviço, passando como parâmetro o objeto do serviço. O retorno será um <nome do serviço>Return, que sempre terá um método get_return que retornará o que o serviço retorna.Este stub só é gerado no eclipse em dinamic web projects mas você pode pegar estas 2 classes geradas e colar em projetos desktop que o acesso ao web service funciona numa boa (desde que você tenha acesso na rede para o web service… obvio).[/list]
abaixo as classes do web services e do cliente que usei nos dois projetos, os projetos em si eu mandei pro nosso amigo e apaguei, nem adianta pedir via mp, se alguém pensar em pedir, peça para ele…rs
[code]package pacote;
public class Calculadora {
public Calculadora() {
}
public double somar(double a, double b){
return a + b;
}
public double subtrair(double a, double b){
return a - b;
}
public double multiplicar(double a, double b){
return a * b;
}
public double dividir(double a, double b){
return a / b;
}
}
[/code]
[code]package pacoteCliente;
import java.rmi.RemoteException;
import org.apache.axis2.AxisFault;
import pacote.CalculadoraStub;
import pacote.CalculadoraStub.Dividir;
import pacote.CalculadoraStub.DividirResponse;
import pacote.CalculadoraStub.Multiplicar;
import pacote.CalculadoraStub.MultiplicarResponse;
import pacote.CalculadoraStub.Somar;
import pacote.CalculadoraStub.SomarResponse;
import pacote.CalculadoraStub.Subtrair;
import pacote.CalculadoraStub.SubtrairResponse;
public class Cliente {
private CalculadoraStub stub;
public Cliente(String endereco) throws AxisFault{
this.stub = new CalculadoraStub(endereco);
}
public static void main(String[] args) {
Cliente c= null;
try {
c = new Cliente("http://localhost:8080/AppServidor/services/Calculadora?wsdl");
double a = 4.7;
double b = 2.3;
System.out.println(c.somar(a, b));
System.out.println(c.subtrair(a, b));
System.out.println(c.multiplicar(a, b));
System.out.println(c.dividir(a, b));
} catch (AxisFault e) {
System.out.println("erro ao conectar com o web service");
e.printStackTrace();
} catch (RemoteException e) {
System.out.println("erro ao chamar serviço remoto");
e.printStackTrace();
} catch (Throwable e) {
System.out.println("erro inesperado");
e.printStackTrace();
}
}
/**
* delega o somar para o serviço
* @return
* @throws RemoteException
*/
private double somar(double a, double b) throws RemoteException{
Somar somar = new Somar();
somar.setA(a);
somar.setB(b);
SomarResponse resposta = stub.somar(somar);
return resposta.get_return();
}
/**
* delega o subtrair para o serviço
* @return
* @throws RemoteException
*/
private double subtrair(double a, double b) throws RemoteException{
Subtrair subtrair = new Subtrair();
subtrair.setA(a);
subtrair.setB(b);
SubtrairResponse resposta = stub.subtrair(subtrair);
return resposta.get_return();
}
/**
* delega o multiplicar para o serviço
* @return
* @throws RemoteException
*/
private double multiplicar(double a, double b) throws RemoteException{
Multiplicar multiplicar = new Multiplicar();
multiplicar.setA(a);
multiplicar.setB(b);
MultiplicarResponse resposta = stub.multiplicar(multiplicar);
return resposta.get_return();
}
/**
* delega o dividir para o serviço
* @return
* @throws RemoteException
*/
private double dividir(double a, double b) throws RemoteException{
Dividir dividir = new Dividir();
dividir.setA(a);
dividir.setB(b);
DividirResponse resposta = stub.dividir(dividir);
return resposta.get_return();
}
}
[/code]