sábado, 28 de novembro de 2015

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
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.

quarta-feira, 18 de junho de 2014

Meu primeiro Game no Google Play: Orange Blocks!

Meu primeiro game foi publicado no GooglePlay!
É o Orange Blocks! É um jogo de empilhar simples!
Basta tocar na tela do aparelho para que os blocos desçam! 
Em cada toque pelo menos um deve ficar empilhado.

Foi feito com o motor da Unity3d!
Você também pode usar o QR code abaixo.