Aula WebService 29/11/2015 – Desenvolvimento de Aplicações Distribuídas.
Parte prática.
Crie um Projeto Java SE com uma classe
que por sua vez possua um método que efetue a soma de dois números. Chamei de “DAD_JAX-WS”
Obs: deve ser usado java 1.7.
Primeiramente, como seria essa simples classe? Fácil, assim:
package webservices;
/**
*
* @author
Gleyton Lima
*/
public class SomarNumeros {
public int
somar(int valor1, int valor2){
int
resultado = valor1 + valor2;
return
resultado;
}
}
Mas para ela ser utilizada como
WebService o pessoal do Java criou um monte de anotações indispensáveis
para isso. Então fica assim:
package webservices;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
/**
*
* @author
Gleyton Lima
*/
@WebService
public class SomarNumeros {
@WebMethod(operationName = "CalcularSoma")
@WebResult(name = "resultado")
public int
somar(@WebParam(name = "valor1") int valor1, @WebParam(name =
"valor2") int valor2){
int
resultado = valor1 + valor2;
return
resultado;
}
}
Para tudo funcionar, não iremos trabalhar
diretamente com o arquivo “SomarNumeros.java” acima. Precisaremos do “SomarNumeros.class”.
Ele pode ser gerado via linha de comando com o “javac”.
Primeiro: Acesse via cmd a pasta onde
está o SomarNumeros.java (normalmente em src do Projeto SE que você criou) e
execute o comando javac para gerar o .class da Classe
Depois execute o seguinte comando
na pasta root do projeto (uma pasta acima de src):
C:\Users\Gleyton
Lima\Documents\NetBeansProjects\DAD_JAX-WS>wsgen -cp src -s src
-wsdl webservices.SomarNumeros
Obs.: webservices.SomarNumeros
= meuPacote.minhaClasseWebService
Esse comando cria um pacote “webservices.jaxws”
com duas classes: Somar.java e SomarResponse.java (veja que ele tomou por base
o nome do método que é “somar”):
Então você me pergunta: ok, e agora? Agora, é preciso “publicar”
o seu webservice. Colocá-lo no ar, disponível, etc.. Assim, criamos um pacote “util”
e nele uma classe “Publicador” que faz o quê? Publica. Assim:
package util;
import
javax.xml.ws.Endpoint;
import
webservices.SomarNumeros;
/**
*
* @author Gleyton Lima
*/
public class
Publicador {
public static void main(String[] args) {
publicarLocalmente();
}
public static void publicarLocalmente(){
//calcularSoma é o nome que dei (por
que assim o quis)
//para o webService. Então fica assim:
Endpoint.publish("http://localhost:10000/calcularSoma", new
SomarNumeros());
}
public static void publicarExterno(){
//Para publica externamento coloca-se o
IP estático (use ipconfig no CMD para verificar o seu IP)
Endpoint.publish("http://10.100.76.147:10000/calcularSoma", new
SomarNumeros());
}
}
Pronto. Agora
o webservice está no ar. Daí você
continua pensando por que 10000? E eu te digo, porque eu quis. Podia ser a
10001? Podia. É necessário somente que a porta esteja livre e convenhamos quem
usa a porta 10000 para alguma coisa? Eu não uso. Você usa?
Precisamos agora de um cliente, crie, portanto, um
novo projeto “Cliente” (ainda em JSE. Chamei de “DAD_JAX-WS_Cliente”). Uma vez criado acesse a
pasta root, via CMD, e execute o seguinte comando:
wsimport
–s src –d src –p cliente http://localhost:10000/calcularSoma?wsdl
Na prática fica assim na linha de comando:
C:\Users\Gleyton
Lima\Documents\NetBeansProjects\DAD_JAX-WS_Cliente>wsimport -s
src -d
src -p cliente http://localhost:10000/calcularSoma?wsdl
Se tudo der certo serão exibidas as seguintes mensagens:
parsing
WSDL...
Generating
code...
Compiling
code...
Se não der certo vai explodir de mensagens de erro...
Uma vez que tudo deu certo, vai ser criado um catatau de
arquivos num pacote chamado “cliente”. Confira comigo no printScreen:
Faça um método MAIN para utilizar esse catatau de arquivos
criados:
package
dad_jax.ws_cliente;
import
cliente.SomarNumeros;
import
cliente.SomarNumerosService;
/**
*
* @author Gleyton Lima
*/
public class
DAD_JAXWS_Cliente {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
SomarNumerosService servico = new
SomarNumerosService();
SomarNumeros porta =
servico.getSomarNumerosPort();
System.out.println("Resultado:
"+porta.calcularSoma(1, 1));
}
Pronto. Se
tudo der certo, vai ser exibido a impressionante mensagem na tela: “Resultado:
2” que é a soma de quê? Isso! 1 + 1.
Tarefa de
casa: Use tudo que aprendeu para consumir os dados do webservice do ministério da
saúde, conforme abaixo:
Acessando o serviço do DATASUS
Leia o manual e utilize o webservice do DATASUS, tópico II
acima.