Вы находитесь на странице: 1из 10

Provendo e Consumindo Web-Services com JAX-WS

1 A

25

Captulo

Introduo aos Web-Services via JAX-WS - Um breve histrico sobre Web-Services

distribuda em geral, quando pensamos na Internet. Em sua forma mais clssica, baseada em protocolo SOAP/XML, prover ou consumir servios pode requerer um grande esforo quando implementados manualmente, sem o apoio de um framework e gerador especializados. Para amenizar este problema, desde o incio do sculo que no faltam frameworks e geradores para WebServices. Produtos como o Apache Axis e inmeros outros produtos comerciais, porm, davam suas prprias sadas e modificaram o problema original para outro: falta de padro e at de compatibilidade entre as diversas solues, que introduziam extenses proprietrias aos seus produtos. Felizmente, para problemas como este que o padro Java EE foi criado. A partir da verso 2.0 da API JAX-WS, introduzida no Java EE 5, a simplicidade se concretizou (tanto quanto possvel). E esta simplicidade, aliada a um padro de mercado, tornaram o JAX-WS a melhor opo do mundo Java para se prover ou consumir servios Web via SOAP!

s Web-Services so uma tecnologia popular para apoiar iniciativas de B2B, SOA e computao

- SOAP x REST
No prximo captulo veremos uma soluo alternativa aos Web-Services "SOAP" abordados neste captulo, chamada RESTful Web-Services. Esta alternativa pode ser implementada tambm de forma padro, pela API JAX-RS - e tambm conta com frameworks de apoio produtividade. Na verdade, por ser de fato mais simples de se utilizar, dispensando a camada SOAP sobre o protocolo HTTP, o XML e outras exigncias de Web-Services tradicionais, os RESTful Web-Services j so inclusive mais populares na Internet. H quem diga inclusive que eles iro sepultar os Web-Services, mas h tambm quem aponte vantagens nicas do padro JAX-WS. Possivelmente, neste momento e por algum tempo, o desenvolvedor ter que dominar ambos: muitos servios pblicos so expostos em somente uma destas modalidades e ainda h nicho significativo para ambos. Por este motivo, e como este assunto vasto, deixaremos esta polmica fora de nosso escopo, trabalhando com os dois padres. Do ponto de vista estritamente tcnico, o prprio desenvolvedor poder tirar suas prprias concluses aps as prticas deste e do prximo captulo.

Provendo um Servio - Entendendo a demanda de negcio do "provedor"


Suponhamos que nosso sistema seja instalado em uma filial multinacional e que a matriz ou outras filiais queiram, diretamente de seus sistemas, recuperar dados de um funcionrio. Eles precisam de nome, sexo e data de nascimento, mas possuem o CPF em seu sistema (na falta de um campo mais "neutro" como uma matrcula global). Do ponto de vista tecnolgico, h tambm a preferncia por expor este servio na forma de um WebService tradicional, por questes culturais - os analistas j trabalham h alguns anos com isso e querem manter o padro. Vamos ento implementar este servio no padro JAX-WS 2.0 e, o que ainda mais interessante, fora de um continer EJB! O padro JAX-WS opera de forma ainda mais transparente com o uso de um mtodo de EJB, mas possvel utiliz-lo no Tomcat, por exemplo, atravs de utilitrios de gerao que veremos.

Importante: Podemos utilizar EJB 3.x no jCompany, sem problemas, utilizando o jBoss AS, por exemplo, mas como todo o tutorial do livro se baseou no Tomcat, manteremos esta linha.

- Criando a classe de servio


O primeiro passo para a criao de um WS * a definio de uma classe que ser exposta como servio na Web. No nosso exemplo, teremos uma classe "BuscaFuncionarioWS" em que seu mtodo exposto recebe uma String "CPF" e retorna uma entidade "Funcionario". Vamos implementar a nossa classe de servio na camada de controle, uma vez que no utilizaremos nenhuma lgica de negcios e acesso a banco de dados. Tomamos a iniciativa de simplificar o exemplo para que o foco fique exclusivamente na criao do WS. As classes podem ser vistas na Figura G25.1 e na Figura G25.2. Importante: No se esquea que os objetos a serem transmitidos pelo WS devem ser serializveis!

Figura G25.1. Classe "Funcionario".

Figura G25.2. Classe de servio "BuscaFuncionarioWS".

#1. Anotao "@WebService" indica que a classe "BuscaFuncionarioWS" um servio web (WS). #2. Anotao "@WebMethod" indica que esse mtodo ser exposto no WS. #3. Anotao "@WebParam" serve para informar o nome do parmetro do WS. #4. Nesse ponto, pedimos a nossa fachada para recuperar o funcionrio baseado no nosso CPF. No vamos entrar em detalhe na implementao da camada de modelo para no fugir do nosso foco principal.

Nesta documentao iremos utilizar a sigla WS para indicar Web-Service.

Captulo G22

- Configurando dependncias no projeto para gerao dos artefatos de suporte a Web-Services JAXWS (somente Tomcat)
1. Adicione as dependncias do JAX-WS no arquivo "pom.xml" do projeto onde ser implementado o WS.

Figura G25.3. Configurando o arquivo "pom.xml" com as dependncias do JAX-WS.

2.

Adicione o plugin para gerao dos Stubs em tempo de empacotamento. A documentao detalhada do plugin se encontra em: https://jax-ws-commons.dev.java.net/jaxws-maven-plugin/. Vamos adicionar configuraes de profile no arquivo "pom.xml".

Figura G25.4. Adicionando profile do maven no arquivo "pom.xml".

#1. Esta URL indica para o arquivo "pom.xml" o uso da classe de servio do WS.

- Configurando o JAX-WS.
Para configurar o JAX-WS, vamos seguir os passos abaixo: 1. Crie o arquivo "sun-jaxws.xml" dentro da pasta WEB-INF do projeto, informando os WEB-SERVICES criados.

Figura G25.5. Arquivo "sun-jaxws.xml" com as configuraes do WS criado.

2.

Mapeie a aplicao para responder ao servio. Essa configurao dever ser feita no arquivo "web.xml".

Figura G25.6. Mapeando o servio no arquivo web.xml.

- Ativando a execuo de deploy-completo e testando.


O jCompany deve ser configurado com uma tarefa de deploy especfica para WS, para isso devemos implantar a demanda abaixo: 1. 2. Acione o menu Run -> External Tools -> External Tools Configurations.... Selecione qual tipo de Deploy voc vai utilizar e adicione mais o parmetro "-Dwebservice=S" no campo "Arguments" e libere a aplicao.

Captulo G22

Figura G25.7. Adicionando parmetro do WS na Liberao para Tomcat Completa Desenvolvimento.

3.

Verifique a disponibilidade do servio pelo browser atravs da URL: http://localhost:8080/rhtutorial/busca. O servio pode ser visto na Figura G25.8.

Figura G25.8. Tela identificando que o servio est ativo.

Consumindo um Servio - Entendendo o lado do "consumidor"


Como no traz nenhuma restrio proprietria, o servio que criamos no passo anterior est disponvel para ser consumido por qualquer "cliente" de WS, que pode utilizar qualquer tecnologia para acess-lo. Mas como nossa tecnologia Java, precisamos fechar o nosso ciclo para tambm entender quais so os padres JAX-WS para o lado "consumidor". Como teste, e para evitar a proliferao de aplicaes, vamos definir nossa classe consumidora no mesmo projeto "rhtutorial". Fica sob responsabilidade do desenvolvedor test-la em outra aplicao, se desejado.

- Configurando dependncias no projeto para gerao dos artefatos de suporte ao JAX-WS (somente Tomcat)
Para estabelecer o servio de consumo, ns devemos seguir a demanda abaixo para configurar o JAX-WS como uma dependncia da classe provedora *. 1. Adicione o plugin para gerao dos Stubs em tempo de empacotamento. A documentao detalhada do plugin se encontra em: https://jax-ws-commons.dev.java.net/jaxws-maven-plugin/. Vamos adicionar configuraes de profile no arquivo "pom.xml"

Por motivos didticos, neste livro a classe provedora e consumidora pertencem ao mesmo projeto. No mundo real isso muito dificilmente ir acontecer, uma vez que o objetivo de uso dos WS a transmisso de dados entre aplicaes. No contexto de aplicaes diferentes para o uso do WS a classe consumidora precisaria tambm das dependncias do jCompany Service em seu arquivo "pom.xml".

2.

Adicione ao arquivo "pom.xml" os parmetros de profile e dependncias mostrados na Figura G25.9.

Figura G25.9. Adicionando profile do maven no arquivo "pom.xml".

#1. Este trecho no tem muitas novidades quanto ao descrito anteriormente, a diferena a tag "goals" que neste caso indica que os artefatos importados pertencem classe provedora. 3. Execute o comando maven "install" com o parmetro "-Dwebservice=S" para gerar os artefatos. Se preferir execute o script de deploy que configuramos na Figura G25.7. Aps rodar o script, sero gerados os artefatos para consumo com os mesmos pacotes da aplicao do servio. Veja Figura G25.10.

Captulo G22

Figura G25.10. Artefatos gerados no consumidor do WS.

Importante: Lembrando que para gerao dos artefatos no consumidor, ao executar o script de deploy, a aplicao provedora do servio deve estar executando.

- Criando a classe de consumo


Vamos criar um formulrio para entrada dos dados, no nosso caso o CPF e uma classe de controle que recebe esse parmetro da tela e retorna o funcionrio. Para o exemplo vamos utilizar o padro "controle simples", que um padro que dispensa diversos itens de arquitetura da camada viso e controle. 1. Crie a classe de controle conforme Figura G25.11.

Figura G25.11. Classe de controle para consumir o servio.

2.

Crie o arquivo "buscafuncionarioCtl.xhtml" dentro da pasta ".../WEB-INF/fcls/buscafuncionario/". Esse arquivo ser utilizado para entrada e exibio dos dados.

Figura G25.12. Arquivo xhtml para entrada e exibio dos dados da classe de controle para consumir o servio.

#1. Tag que cria o campo para o usurio informar o "CPF". #2. Lgica para mostrar o retorno da pesquisa. Se o funcionrio for retornado, seus dados so mostrados, caso contrrio a mensagem "Funcionrio no encontrado!" exibida. 3. Crie o arquivo "package-info.java" da classe de consumo informando o caminho para o XHTML de configurao da tela. A Figura G25.1 mostra o arquivo pronto.

Figura G25.13. Arquivo "package-info.java" com configuraes para utilizao de um caso de uso "Controle Simples".

4.

Crie um menu para acessar o nossa classe provedora. Para isso adicione o cdigo da Figura G25.14 no arquivo "geralMenu.xhtml" da aplicao.

Figura G25.14. Adicionando um item de menu.

- Testando o novo servio de consumo


Neste ponto, nossa aplicao estar pronta para fornecer e consumir o servio estabelecido anteriormente. D um "Liberao Para Tomcat Completa Desenvolvimento", acione o tomcat e teste o servio gerado pelo WS.

Captulo G22

Figura G25.15. Tela com o acesso ao servio de busca de funcionrio por CPF.

Sumrio
Neste captulo discutimos brevemente sobre Web-Services tradicionais, baseados em SOAP sob o protocolo HTTP e uso de XML/WSDL. Criamos um primeiro servio para recuperar os dados principais de um funcionrio a partir de seu CPF. Em seguida, implementamos um exemplo do lado "consumidor", utilizando em ambos os casos o padro JAX-WS sobre o Tomcat. No prximo captulo, iremos explorar a alternativa RESTful Web-Services, baseada no padro JAX-RS, para viabilizar uma comparao entre os dois modelos, alm de conhecer generalidades do jCompany nesta rea, atravs do jCompany Service.

Вам также может понравиться