domingo, 22 de dezembro de 2013

Java EE. Serviços Web SOAP com JAX-WS - parte_01

Java EE. Serviços Web SOAP com JAX-WS


Usando comunicações com WebService usando protocolo SOAP. Criando um serviço Web, que poderá ser acedido por qualquer linguagem de programação e vice versa.


Criamos um serviço Web e logo um cliente para aceder a este serviço.

Primeiro devemos criar uma aplicação Web, para criar o mesmo em netbeans:





Logo Indicamos o lugar onde será guardado o projeto:


Os Restos deixaram valores default.
Uma vez criado o serviço Web, temos que criar um web service, para o mesmo damos um clico com o botão direito do mouse no projeto, novo, WebService, nos trará a seguinte tela:




Colocamos o nome de ConversionUnidades, e colocamos em um pacote: com.blog.rafacomjava.
Logo clicamos em terminar.

Devera aparecer uma tela parecida com esta:








O que o NetBeans faz e criar um pequeno WebService, com as seguintes informações:


package com.blog.rafacomjava;

import javax.jws.WebService;
import javax.jws.WebMethod;
import javax.jws.WebParam;

/**
*
* @author rafael2
*/
@WebService(serviceName = "ConversionUnidades")
public class ConversionUnidades {

/**
* This is a sample web service operation
*/
@WebMethod(operationName = "hello")
public String hello(@WebParam(name = "name") String txt) {
return "Hello " + txt + " !";
}

}


Entendendo:
As anotacoes:

@WebService, indica que a classe e um serviço Web

@WebMethod: mostra que e um metodo Web do serviço Web.

OperationName: e o nome com que os clientes vão conhecer este metodo.

@WebParam: usada para definir as propriedades dos parâmetros do WebService.

Name: usado para especificar o nome do parâmetro.












Vamos começar a personalizar nosso código:
podemos clicar com o mouse em design e teremos esta tela:




clicando sobre hello e logo acima vemos um “botão” Remover Operação, pode eliminar este metodo. Logo clicamos no “botão” AdicionarOperacao e criar nossa primeira operação:



Colocamos o nome de PoleagadasACentimetros, e Tipo de Retorno: java.lang.Double,
logo clicamos no botão adicionar, para adicionar parâmetros, com nome de polegadas e Tipo double, em seguida clicamos OK.
Fazemos novamente o mesmo processo clicando em AdicionarOperacao, Tipo de Retorno Double, logo adicionar para adicionar parâmetros que devem ser passados. Nome da operação deve ser CentimetrosAPolegadas, e passar por pametro, “centímetros” do tipo double.

Al final deveu ter esta visão:




clicando em código fonte devemos ter esta visão:



Lógico pode também apenas escrever os métodos:
/**
* Operação de Web service
*/
@WebMethod(operationName = "PolegadasACentimetros")
public Double PolegadasACentimetros(@WebParam(name = "polegadas") double polegadas) {
//TODO write your implementation code here:
return null;
}

/**
* Operação de Web service
*/
@WebMethod(operationName = "CentimetrosAPolegadas")
public Double CentimetrosAPolegadas(@WebParam(name = "centímetros") double centímetros) {
//TODO write your implementation code here:
return null;
}

e teremos o mesmo efeito.


Na aba ao lado no NetBenas podemos abrir nosso projeto, logo abrir a aba Web Service e veremos nosso WebService que recém criamos:



e clicando com o botão direito do mouse, em Testar WebService, para testar nossa aplicação.

Logo deve abrir nosso navegador da seguinte forma:




Logo voltando a nosso projeto vamos inserir conteúdo de nossas regras de negocio.

/**
* Operação de Web service
*/
@WebMethod(operationName = "PolegadasACentimetros")
public Double PolegadasACentimetros(@WebParam(name = "polegadas") double polegadas) {
//TODO write your implementation code here:
return polegadas * 2.5 ;
}

/**
* Operação de Web service
*/
@WebMethod(operationName = "CentimetrosAPolegadas")
public Double CentimetrosAPolegadas(@WebParam(name = "centímetros") double centímetros) {
//TODO write your implementation code here:
return centímetros / 2.5;
}

apenas modificamos o destacado em vermelho no metodo.









Com isso temos uma lógica simples mas funcional.
Logo Testar WebService novamente.

Logo clicamos na aplicar ConversionUnidades com o direito e logo IMPLANTAR.
Logo clicamos na aplicar ConversionUnidades com o direito e logo DEPURAR.
Para implantar a aplicação, isso deve ser feito pois apenas com a aplicação implantada vamos poder seguir criando um cliente (o cliente vai acessar nossa aplicação).
O cliente vai usar possivelmente uma direção igual a esta:


Agora vamos criar um cliente, para que aceda a nosso Serviço Web .

Para o mesmo vamos criar um novo projeto agora Java, JavaAplicacao.





Logo de criado nossa aplicação ClienteConversionUnidades, devemos criar nosso WebService, dentro da mesma.Para tanto clicamos com o botão Direito do mouse sobre o nome da nova aplicação ClienteConversionUnidades , clicamos em novo, outros, e selecionamos WebService, e ClienteParaWebService.
Logo devemos escolher o projeto Web para usar, recordamos que devemos esta com a aplica ao WEBSERVICE ConversionUnidades rodando, se não estiver rodando nosso servidor vai dar erro.



Logo:



clicamos em Procurar:




recordamos que usando NetBeans ele te ajuda a fazer parte do trabalho, então depois de tudo criado deve aparecer algo deste estilo na tela:




Então abrimos a aba Referencia de WebService, ConversionUnidades (que e a aplicação Web criada por nos), ConversionUnidades e logo aparecem nossos dois métodos criados:



então clicamos em PoleagadasACentimetros sem soltar e arrastamos para o main que esta no nosso projeto:



Deve aparecer algo como este que vemos na figura acima:

private static Double polegadasACentimetros(double polegadas) {
com.blog.rafacomjava.ConversionUnidades_Service service = new com.blog.rafacomjava.ConversionUnidades_Service();
com.blog.rafacomjava.ConversionUnidades port = service.getConversionUnidadesPort();
return port.polegadasACentimetros(polegadas);
}

este metodo cria, maslembro tem que arrastar, para que o netbeans crie uam serie de comandos, se simplesmente escrever isso na aplicação, quando rodar o sistema, vai dar erro de pacote invalido.

Caso igual apareca este erro:

Created dir: /home/rafael2/projetos2/soa/soa_blog/ClienteConversionUnidades/build/empty
Created dir: /home/rafael2/projetos2/soa/soa_blog/ClienteConversionUnidades/build/generated-sources/ap-source-output
Compiling 1 source file to /home/rafael2/projetos2/soa/soa_blog/ClienteConversionUnidades/build/classes
/home/rafael2/projetos2/soa/soa_blog/ClienteConversionUnidades/src/clienteconversionunidades/ClienteConversionUnidades.java:23: error: package com.blog.rafacomjava does not exist
com.blog.rafacomjava.ConversionUnidades_Service service = new com.blog.rafacomjava.ConversionUnidades_Service();
/home/rafael2/projetos2/soa/soa_blog/ClienteConversionUnidades/src/clienteconversionunidades/ClienteConversionUnidades.java:23: error: package com.blog.rafacomjava does not exist
com.blog.rafacomjava.ConversionUnidades_Service service = new com.blog.rafacomjava.ConversionUnidades_Service();
/home/rafael2/projetos2/soa/soa_blog/ClienteConversionUnidades/src/clienteconversionunidades/ClienteConversionUnidades.java:24: error: package com.blog.rafacomjava does not exist
com.blog.rafacomjava.ConversionUnidades port = service.getConversionUnidadesPort();
3 errors
/home/rafael2/projetos2/soa/soa_blog/ClienteConversionUnidades/nbproject/build-impl.xml:939: The following error occurred while executing this line:
/home/rafael2/projetos2/soa/soa_blog/ClienteConversionUnidades/nbproject/build-impl.xml:269: Compile failed; see the compiler error output for details.
FALHA NA CONSTRUÇÃO (tempo total: 0 segundos)

simplesmente vão à aba de pacotes código fonte da aplicação ClienteConversionUnidades, e vera que o NetBenas criou um pacote mais ou menos com este nome Códigos fontes gerados e logo, com.blog.rafacomjava, copie este pacote e cole em Pacotes Código Fonte, isso deve resolver o problema.

Na classe ClienteConversionUnidades(), metodo main escreva:

System.out.println(""+polegadasACentimetros(10.3));

a classe ClienteConversionUnidades deve ter este formato:



Com as seguintes informações:



/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package clienteconversionunidades;

/**
*
* @author rafael2
*/
public class ClienteConversionUnidades {

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
System.out.println("Resultado = "+polegadasACentimetros(10.3));
}

private static Double polegadasACentimetros(double polegadas) {
com.blog.rafacomjava.ConversionUnidades_Service service = new com.blog.rafacomjava.ConversionUnidades_Service();
com.blog.rafacomjava.ConversionUnidades port = service.getConversionUnidadesPort();
return port.polegadasACentimetros(polegadas);
}
}


Com isso rode a classe e vera o resultado;

ant -f /home/rafael2/projetos2/soa/soa_blog/ClienteConversionUnidades -Djavac.includes=clienteconversionunidades/ClienteConversionUnidades.java -Drun.class=clienteconversionunidades.ClienteConversionUnidades run-single
init:
Deleting: /home/rafael2/projetos2/soa/soa_blog/ClienteConversionUnidades/build/built-jar.properties
deps-jar:
Updating property file: /home/rafael2/projetos2/soa/soa_blog/ClienteConversionUnidades/build/built-jar.properties
wsimport-init:
wsimport-client-ConversionUnidades:
files are up to date
wsimport-client-generate:
Compiling 1 source file to /home/rafael2/projetos2/soa/soa_blog/ClienteConversionUnidades/build/classes
compile-single:
run-single:
Resultado = 25.75
CONSTRUÍDO COM SUCESSO (tempo total: 1 segundo)



Com isso terminamos por enquanto nossa aplicação WebService, logo faremos expor nossos EJB.

Um grande abraço a todos!


Nenhum comentário:

Postar um comentário