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!