Criando WebServices Java 6

Olá pessoa­­­l,

Preparei este post para quem quer começar a brincar com WebService. Fiz três posts: um “hello world”, outro onde veremos como criar um cliente para consumir o serviço e por último criar um WebService envolvendo banco de dados que será consumido. Usaremos alguns recursos do Java 6 para criar e publicar um WebService.  Eu espero que vocês gostem da série. O objetivo maior é poder compartilhar o conhecimento com quem está chegando, eu tive dificuldades no inicio de juntar todo quebra-cabeça e ver uma simples mensagem. Nem sempre é fácil quando estamos dando os primeiros passos e o objetivo do post é ajudar quem está nesse contexto. Enfim, teremos uma pequena jornada nas próximas semanas.

Lets GO…

WebService

Não vou falar sobre o que é um WebService, pois há vários artigos, posts em blog, Wikipedia explicando exatamente o proposto da tecnologia, o post aqui tem foco de ser prático, ou seja, algo mão na massa, e vou considerar que você já leu sobre o assunto, porém agora quer ver a coisa funcionado. Eu não sou muito bom de teoria, e vou darei um exemplo bem alto nível somente para tentar exemplificar o que é um WebService, caso você tenha dúvida do conceito (eu particularmente quando li o sobre o assunto pela primeira fiquei meio perdido).  Imagine a Amazon (é o servidor) e você é um cliente da Amazon como fornecedor. Você tem uma livraria em parceria com Amazon, porém a aplicação que controla os livros que você tem na sua livraria é diferente do sistema de controle da Amazon, porém você gostaria de realizar uma pesquisa no “banco” da Amazon e poder efetuar compras de livros como fornecedor quando não tivesse o exemplar na livraria fisicamente, como fazer isso a partir da sua aplicação? Através de um WebService. A Amazon disponibiliza esse serviço de consultar e comprar livros como fornecedor e vc como consumidor vai pegar esse serviço e incorporar ao seu sistema, sem precisar adaptar seu sistema (mudar linguagem, banco etc) para nada especifico da Amazon. Supondo que seu sistema é em .NET e o da Amazon em Java, isso pouco importa via WebServices.

Por que Java 6?

No Java 6 foi adicionado anotações que permitem, definimos se a nossa classe é um WebService e quais métodos queremos publicar. Além de outras anotações relacionadas. E isso nos ajuda a criar e publicar um WebService sem precisar de um container (TomCat,Jetty etc). É isso mesmo, vc não vai precisar instalar um desses servidores para criar e testar seus webservices durante desenvolvimento. Evidente que essa forma não vai substitui os benefícios que temos ao usar um servidor de aplicação.  Mas, é uma mão durante o desenvolvimento.

Nosso exemplo

No nosso exemplo vamos fazer um  Hello World + <nomepassado> ou seja, “Hello World Camilo”. É algo muito simples, mas para quem está iniciando é uma felicidade em ver as coisas funcionando mesma que seja com uma mensagem tão tradicional como a nossa.

O que você precisa saber antes de começar:

É importante que você conheça os termos abaixo:

SEI Service Endpoint Interface: temos a interface com as operações (métodos) do webservice

SIB Service Implementation Bean: representa a classe que implementa a interface. Este sempre tem um link através da anotação @WebService para o SEI, ou seja, o endPoint.

WSDL: é um contrato entre o meu serviço com os mais consumidores

SOAP: é um protocolo usado na criação WS

Comando wsimport: usado pelo consumidor, ou seja, pelo cliente que vai usar o webservice. Esse comando tem a responsabilidade de criar o cliente webservice para o webservice (estranho mais é isso que acontece na pratica)

Comando apt: gera o javaws(pacote/package) para o publish do serviço.

apt:<caminho da classe WebService>

@WebService = é sinal que temos um SEI

@WebMethod = é sinal que cada método é uma operação do service

Praticando

Neste primeiro exemplo veremos como criar um WebServices e publicá-lo para que terceiros possa consumir o serviço que disponibilizamos:

  1. Crie um projeto no Eclipse JavaApplication
  2. criamos os três packages: 1 para colocar a classe que é responsável por publicar o webservice, outra para ter a interface (SEI) e mais um para a classe que implementada a interface (SIB).

Interface SEI

Vamos criar a nossa interface que terá dois métodos a serem implementados pela classe que estará no package SIB. Onde o objetivo é dar boas vindas ao usuário em dois idiomas: inglês e português. O código deve ficar assim:

@WebService

public interface Welcome {

@WebMethod

String welcomePt(String nome);

@WebMethod

String welcomeEn(String nome);

}

SIB – Classe que implementa a interface

Vamos criar a classe que tem a responsabilidade dá “colocar” carne no esqueleto. Vale lembrar que poderíamos fazer isso tudo em uma classe sem o uso da interface etc. Mas, por boas praticas de desenvolvimento fizemos assim.

import javax.jws.WebService;

import br.com.camilolopes.ws.sei.Welcome;

@WebService(endpointInterface=”br.com.camilolopes.ws.sei.Welcome”)

public class WelcomeImpl implements Welcome {

@Override

public String welcomePt(String nome) {

// TODO Auto-generated method stub

return “Olá “+ nome;

}

@Override

public String welcomeEn(String nome) {

// TODO Auto-generated method stub

return “Hello ” +nome;

}}

Anotação @WebService na classe é necessário fazer, pois precisamos indicar o endPointInterface que nesse caso é a nossa classe que colocamos no package xx.sib

Publicando o Serviço

Para publicarmos é muito simples. Criaremos uma classe responsável, como a seguir:

public class WelcomePublish {

public static void main(String[] args) {

Endpoint.publish(“http://localhost:9876/welcome”, new WelcomeImpl());

}}

No código acima estamos informando onde será publicado o serviço: endereço (localhost) e a porta (9876). Depois informamos à classe que tem a implementação do serviço. É o mesmo que dizer: publique neste endereço, o que temos na classe WelcomeImpl.Na pratica é isso que acontece.

Note: cuidado com a porta se estiver ocupada veja qual o processo está usando e finalize. Normalmente a porta acima está disponível. Depois que terminar de publicar seu serviço e quiser subir outro na mesma porta, vá ao gerenciador de tarefa e mate o process javaws, ele será o que o seu webservice estava usando ou pare sua aplicação via Eclipse.

Testando o Serviço

Para testarmos se o nosso serviço está funcionando, vamos publicá-lo executando a classe WelcomePublish. Ao rodar a classe devemos ter a imagem a seguir no console:

Verificando serviço publicado

Para verificar o serviço, vamos acessar usando o browser e obter o wsdl. Certifique que a classe WelcomePublish está rodando e acesse: http://localhost:9876/welcome?wsdl . Já temos o serviço publicado, e agora qualquer outra pessoa pode criar o cliente e consumir. Acesse o link e veja o resultado :).

Acho que por hoje é só isso, no próximo vamos conhecer a SOAPUI e como criar um cliente para consumir esse serviço.Não se preocupe por agora como será consumido e sim entender a base de WebService e praticar um pouco mais.

Abraços,  espero que tenham gostado. See ya!!

Curso preparatório SCJP/OCJP

olá Pessoal,

O post desta semana é bem diferente. Já recebi alguns emails dos leitores perguntando se eu não teria interesse em ministrar um curso preparatório para SCJP. Sempre respondi que estava em analise esse ponto. Daí nasceu a parceria com a Fontoura Education, a seguir conto como tudo aconteceu, assim vocês vão entender melhor que não se trata de um curso qualquer.Um detalhe que não posso esquecer limitamos número de vagas, pois sabemos que o nro de alunos tem influência na condução das aulas e para o conforto de cada um há uma limitação.

  • A  Fontoura Education

Fui apresentado ao Diretor da Fontoura Education (Edison) através de uma colega de trabalho que é instrutora da antiga Sun. Daí começamos a falar sobre cursos, projetos, ideias consequentemente caimos nesse meu projeto e começamos a estudar a possibilidade de colocar no ar.

Mais sobre a fontoura no site http://www.fontouraeducation.com.br/

  • Como vai funcionar o curso?

O curso será ministrado apenas pelo Camilo, serão 10 dias de foco na certificação, ou seja, preparação total. Aulas de Seg-Sext das 19:00-22:30. . E com vagas limitadas de alunos por turma.Não mais que 12 alunos em sala. O material didático para estudo será o livro “Guia do Exame SCJP” que será entregue ao aluno em sala de aula. Além do conteúdo o aluno terá simulados disponíveis em português e inglês, para atender tantos aqueles que vão fazer a prova em um dos idiomas.

  • Onde está focado o curso?

O curso vai focar naquilo que vc precisa saber para o exame, descomplicar os assuntos que são considerados mais complicados, trabalhar em cima de pegadinhas, testes e exercícios feitos em sala junto com o instrutor.

  • Publico-Alvo

Candidatos a se tornar um SCJP/OCJP.

  • O que não vou ver no curso

Aprender Java

  • Mais Info…

O Instituto IQTI está trazendo com exclusividade para Porto Alegre uma preparação ao exame baseada no livro “Guia do Exame SCJP” do Engenheiro de Software Camilo Lopes, editado pela Ciência Moderna, que foi destaque de vendas na FNAC. O evento noturno será conduzido pelo próprio autor e terá duração de 10 noites, sendo que os participantes terão acesso liberado ao simulado on-line.

Programa detalhado
  • Data e Horário – de 14 a 25/março das 19h as 22h30
  • Investimento: 5x 250,00 ou 1.125,00 a vista
  • Material de estudo, Simulado e Certificado.
Os participantes recebem como material de estudo um exemplar do livro, terão acesso online ao simulado e recebem um certificado de participação emitido pelo IQTI.

Leia mais AQUI.

Espero que tenham gostado da novidade, e encontro vcs na primeira aula 🙂