[Logo] Menta Developers Blog
  [Search] Search   [Recent Topics] Recent Topics   [Hottest Topics] Hottest Topics   [Members]  Member Listing   [Groups] Back to home page 
[Moderation Log] Moderation Log   [Register] Register / 
[Login] Login 
[Logo]
Tutorial SOA Passo a Passo com Java 6  XML
Forum Index » Computação e TI (Português)
Author Message
saoj


[Avatar]

Joined: 13/12/2007 14:28:28
Messages: 41
Offline

Implementando e disponibilizando serviços em Java

Nesse artigo iremos implementar um Web Service em Java como o ponto de partida para uma aplicação orientada a serviços (SOA - Service-Oriented Architecture).

Começamos definindo a interface para o nosso serviço:

Sem muitos mistérios aqui. Apenas note as anotações utilizadas e atente para o fato de que não é possível utilizar overload de métodos num web service, isto é, os nomes dos métodos precisam ser diferentes.

O POJO User está listado abaixo:

Agora vamos implementar o nosso serviço:

De novo sem mistérios aqui. Apenas repare que utilizamos novamente a anotação @WebService e que agora passamos como parâmetro a interface do serviço que estamos implementando. O termo técnico para a interface do serviço é SEI (Service Endpoint Interface) e para a classe que implementa o serviço SIB (Service Implementation Bean).

Feito isso nos resta agora publicar o nosso serviço para o mundo, ou seja, disponibilizá-lo na Internet para que qualquer cliente em qualquer linguagem e em qualquer lugar possa utilizá-lo. Há diversas maneiras de publicar o seu serviço:

Lightweight: Standalone Java Application (simple Java program)

Middleweight: Web Container (Tomcat, Jetty, Resin, etc.)

Heavyweight: Application Server (GlassFish, Weblogic, WebSphere, JBoss, etc.)

Inicialmente utilizaremos o método mais simples e leve (lightweight), que é um aplicativo standalone Java. Em artigos posteriores analisaremos como disponibilizar o serviço no Tomcat.

Abaixo está o código para um pequeno servidor Java que disponibiliza o nosso serviço para o mundo:

Estamos utilizando a classe javax.xml.ws.Endpoint, que é bastante simples e útil. A porta escolhida aleatoriamente é a 54321.

Se você tentar executar a classe acima receberá o seguinte erro:

Isso porque o web service precisa de diversas classes auxiliares que podem ser geradas automaticamente utilizando o comando abaixo dentro do diretório onde suas classes estão, normalmente bin ou classes.

Feito isso o pacote ws.hello.jaxws é gerado com as classes necessárias para a publicacão do serviço.

Agora execute novamente a classe ws.hello.HelloPublisher utilizando o comando abaixo:

Abra o seu browser e digite a seguinte URL para visualizar a especificação do seu serviço, que nada mais é que o documento WSDL (Web Service Definition Language):

http://localhost:54321/hello?wsdl

Se você visualizar um documento XML que começa com a linha <definitions targetNamespace="http://hello.ws/" name="HelloImplService"> então pode comemorar: O seu serviço já está disponível para o mundo!

Para ter certeza disso utilize o script Ruby abaixo para fazer uma requisição ao método sayHello:

Caso você queira receber a segunda parte desse artigo que explica como gerar stubs e implementar um cliente em Java para acessar todos os métodos do serviço e também demonstra como disponibilizar o web service via Tomcat, envie um email para sergio.oliveira.jr at gmail.com com o seguinte título "Artigo SOA".

Em futuros artigos serão também discutidos segurança e como disponibilizar o serviço em alguns applications servers como GlassFish e JBoss.

saoj


[Avatar]

Joined: 13/12/2007 14:28:28
Messages: 41
Offline

Implementando um cliente em Ruby

Continuando o nosso tutorial vamos implementar agora um cliente em Ruby para consumir todos os métodos do nosso serviço. Utilizaremos o Soap4R que é a biblioteca padrão do Ruby para SOAP.

Atenção: A distribuição padrão do Ruby já vem com o Soap4R. Entretanto queremos utilizar a última versão dessa biblioteca e para isso instalaremos o seu gem.

Quando você instala o Soap4R você ganha de presente o script wsld2ruby.rb que você pode utilizar para gerar as classes auxiliares em Ruby a partir do WSDL do serviço publicado. Essas classes serão de grande ajuda na hora de codificar o cliente, como veremos mais adiante.

Gere as classes auxiliares com o comando abaixo:

Veja agora como podemos codificar um cliente para os nossos serviços em Ruby:

Caso o código acima não tenha ficado claro pra você, dê uma olhada no arquivo HelloImplService.rb que foi gerado automaticamente pelo wsdl2ruby. Nesse arquivo você encontrará a definição das classes utilizadas pelo nosso cliente tais como SayHelloTo, SayHelloToUserResponse, User, etc.

Nada te impede por exemplo de "abrir" a classe User que foi gerada automaticamente no arquivo acima para melhorá-la adicionando novos métodos:

saoj


[Avatar]

Joined: 13/12/2007 14:28:28
Messages: 41
Offline

Implementando um cliente em Java

Assim como no caso do Ruby, vamos utilizar o programa wsimport do JAX-WS para gerar automaticamente todas as classes que precisamos a partir do WSDL e codificar nosso cliente de maneira muito fácil.

Os parâmetros utilizados são:

-p ws.hello.client.wsdl Pacote onde as classes serão geradas

-d classes Diretório onde as classes (*.class) serão copiadas

-s src Diretório onde o código fonte (*.java) será gerado

Resumindo: O código gerado terá a linha package ws.hello.client.wsdl em todos as classes Java. O código fonte (arquivos *.java) vai ficar em src\ws\hello\client\wsdl e as corresopndentes classes (ele gera *.class também) em classes\ws\hello\client\wsdl.

Feito isso basta você pegar o port do serviço que nada mais é que uma interface com todos os métodos do serviço para você chamar como se estivesse fazendo chamadas locais de uma API. Veja como é fácil:

Note que o objeto User (ws.hello.client.wsdl.User) também é criado de forma automática pelo wsimport.


saoj


[Avatar]

Joined: 13/12/2007 14:28:28
Messages: 41
Offline

Disponibilizando o seu serviço via Tomcat

A classe HelloPublisher.java serve apenas para testar o nosso web service, não sendo viável para o ambiente de produção. Veremos então como publicar o nosso serviço num web container como o Tomcat.

Crie um projeto novo para o Tomcat e copie o pacote ws.hello junto com o código para dentro do diretório onde fica o seu código-fonte, no meu caso WEB-INF\src.

Crie o arquivo WEB-INF\web.xml com o seguinte código XML:

A classe com.sun.xml.ws.transport.http.servlet.WSServlet é o servlet que vai publicar e servir para o mundo o serviço. Já a classe com.sun.xml.ws.transport.http.servlet.WSServletContextListener é responsável por ler o arquivo sun-jaxws.xml com a especificação da implementação do serviço. Crie o arquivo WEB-INF\sun-jaxws.xml abaixo:

Até o momento temos utilizado a implementação do JAX-WS que vem junto com o Java 6, mas agora teremos que utilizar a última versão desse framework pois as classes acima não estão presentes na implentação que vem junto com a distribuição da JSE. Para baixar e instalar o JAX-WS é fácil:

Acesso o site https://jax-ws.dev.java.net/

Baixe o jar da última versão

Execute o comando java -jar jaxwsXXXXXX.jar para instalá-lo.

O diretório jaxws-ri será criado no mesmo diretório onde você baixou o jar do jax-ws. Dentro desse diretório, na pasta lib, estão os jars que precisaremos adicionar na nossa aplicação web. Coloque os jars a seguir dentro do seu diretório WEB-INF\lib: jaxb-impl.jar, jaxws-rt.jar, stax-ex.jar e streambuffer.jar.

Estamos quase prontos para publicar o nosso serviço, faltando ainda utilizar o programa wsgen para gerar as classes auxiliares do nosso web service. Rode o comando abaixo:

Repare que fizemos isso dentro do diretório WEB-INF\classes para que as classes geradas fiquem no lugar correto dentro do pacote ws.hello.jaxws.

Nota: Temos utilizado até agora a versão do wsgen que vem junto com o Java 6. Caso queira utilizar a última versão do wsgen e do wsimport basta colocar o diretório jaxws-ri\bin que você baixou no seu path.

Feito isso você está pronto para rodar a sua aplicação web e publicar o seu serviço para o mundo. A estrutura do seu projeto web deve ter ficado assim:




saoj


[Avatar]

Joined: 13/12/2007 14:28:28
Messages: 41
Offline

Segurança e Autenticação para o seu serviço

Caso queira receber o restante desse tutorial envie um email para sergio.oliveira.jr at gmail.com colocando no assunto "Artigo SOA".

 
Forum Index » Computação e TI (Português)
Go to:   
Powered by JForum 2.1.8 © JForum Team