Login Registre-se

Home > Artigos > Frameworks, APIs, Instalação e Configuração >

WebService WSDL e RESTful com Java e Apache CXF

Publicado por dchohfi em 17/09/2009 - 105.926 visualizações


comentários: 3

Neste tutorial demonstrarei como criar um WebService WSDL e RESTful na mesma aplicação de modo simplificado, utilizando Spring e Apache CXF que na nova versão traz suporte total para JSR 311 de forma clara e via annotations. Usaremos também o Maven2 para gerenciar nosso projeto, assumo que você já tem prévio conhecimento, recomendo este tutorial para entender o Maven2 e também como configura-lo. Também presumo que você tenha conhecimento sobre os dois protocolos, porém, caso queira aprender mais sobre leia: WSDL e RESTful.

Bom, cabe a você também decidir qual tipo de serviço sua aplicação deve prover, tanto o WSDL como o RESTful tem suas vantágens e desvantágens e é necessário saber qual delas prover para seu cliente e se preciso prover as duas soluções, com o Apache CXF isso é possível, cheguei a essa conclusão pois a pouco tempo, participei de um projeto onde inicialmente províamos acesso a um WebService WSDL para o cliente, porém foi necessário disponibilizar também o acesso ao RESTful e como utilizávamos o Apache CXF não tivemos que mudar nada no projeto e nenhúm cliente foi afetado, pois a interface do projeto continuava a mesma.

Bom, vamos ao nosso projeto.

Primeiro precisamos mapear nossas dependências no Maven2, segue o pom do nosso projeto:


O Apache CXF utiliza dentro dele o Spring como dependência, removemos o mesmo para utilizar uma versão atualizada do SpringFramework. Adicionei ao nosso POM também o Plugin do Jetty que iremos utilizar para debugar nossa aplicação dentro do Eclipse. Utilizei também um plugin para compilar nosso projeto o Maven Compiler Plugin dizendo qual versão do Java estamos utilizando e qual o encoding do nosso projeto (não esqueça de mudar o encoding no seu projeto do Eclipse para UTF-8). Agora nossa dependências estão prontas e nosso projeto configurado.

Nosso projeto possui uma interface seguindo o padrão de projeto Façade, essa interface será exposta como nosso WebService, de maneira simplificada, o Façade torna o projeto mais fácil de entender e usar.

Interface:


Verifique como é simples desenvolver uma interface para disponibilizar acesso tanto para RESTful como para WSDL, utilizamos annotations para dizer ao CXF qual o tipo de retorno que o nosso WebService vai prover tanto para o RESTful quanto para o WSDL, no mesmo código! Na implementação da nossa interface não iremos precisar de praticamente nenhuma configuração adicional para o Apache CXF saber o que deve fazer.

Implementação:


Veja que tivemos apenas uma anotação indicando ao Apache CXF qual o Endpoint que ele deve procurar para fazer o mapeamento do XML para o WSDL. Criei também uma interface de ClienteDAO, faremos uma implementação simples do DAO, mas você pode integrá-lo ao Hibernate, por exemplo, ou qualquer outra forma para obter acesso ao seus dados, até mesmo outro WebService. É sempre bom trabalhar com interfaces para garantir o baixo acoplamento das suas classes garantindo uma escalabilidade maior, você não precisa saber o que a classe faz em si, deste que você tenha a assinatura dela.

Implementação Simples do ClienteDAO:


Verifique que na implementação lançamos uma Exception do tipo ClienteException caso nenhúm usuário seja encontrado com aquela ID, o Apache CXF ainda não consegue mapear para o REST a exception lançada e responder adequadamente a requisição ao usuário, precisamos então ter um ExceptionMapper para dizer ao Apache CXF o que fazer caso aquela Exception seja lançada.

ClienteExceptionMapper:


Verifique como é simples, você pode dizer qual o Status do Response gerado pelo método, ainda é possível colocar uma mensagem para mostrar para o usuário o que aconteceu com a requisição que ele fez. Agora precisamos configurar o Spring juntando tudo o que fizemos, considere isso como um pequeno tutorial desse incrivel framework. Leia os comentários dentro do XML e qualquer dúvida poste um comentário e caso seja necessário farei um breve tutorial sobre Spring.

Configuração do Spring:


Considero que a configuração feita em XML é pequena visto o tamanho da aplicação que temos em tão pouco tempo, normalmente a configuração do Spring é bem extensa em projetos de grande porte, então quem já trabalha com Spring não terá problema para entender o contexto. Agora precisamos configurar o servlet dentro do web.xml para nossa aplicação.

web.xml


Bom, aqui estamos dizendo ao Spring o que fazer com a nossa aplicação e estamos carregando o Apache CXF para rodar dentro de um servidor de aplicações escolhido por você, aqui você pode ficar tranquilo pois a configuração é padrão.

Neste momento temos nossa aplicação funcionando e pronta para ser colocada para rodar. Lembra do plugin do Jetty dentro do POM do Maven2? Iremos utilizá-lo agora. Demonstrarei rapidamente como fazer as configurações para debugar seu projeto dentro do Eclipse.

Faça as seguintes configurações, dentro de Run Configurations no Eclipse crie um novo Java Application e siga as instruções como nas imagens:

0
0
0
0

Acredito que com isso você consiga subir seu projeto dentro do Eclipse e debugar sem problemas sua aplicação, você poderá consumir sua aplicação REST a partir do link http://localhost:8080/ServiceSample/rest/cliente/1/ por exemplo, deixo como dica utilizar um complemento para o FireFox o RESTClient, onde você pode consumir aplicações RESTful sem problema e analizar com clareza os resultados obtidos e para consumir WebServices WSDL recomendo o soapUI que possui diversas funcionalidades para testar e sobrecarregar seu servidor e verificar o número de acessos simultâneos que ele aguenta.

É importante ressaltar que você pode escolher se deseja prover acesso aos dois WebServices dentro da aplicação para o cliente, cabe a você decidir o que é melhor.

Bom, aqui acaba nosso tutorial que acabou ficando maior do que eu esperava, tomara que eu não tenha me perdido em alguma parte e caso algo tenha ficado confuso ou passado desapercebido deixe um comentário que tentarei esclarecer.

Espero que quem leia goste do material e por favor, comente, é importante. Quero continuar este pequeno projeto adicionando funcionalidades como integração do Spring com o Hiberante entre outras coisas, para realmente ter um tutorial completo para uma aplicação robusta.

Qualquer dúvida ou sugestão, novamente, deixe um comentário.
O código fonte do projeto pode ser encontrado no meu Blog na parta de comentário para esse tutorial.

Artigos desta série:
WebService WSDL e RESTful com Java e Apache CXF
Hibernate 3 com Spring e DAO Generico



Leia também:
Web Services. Construindo, disponibilizando e acessando Web Services via J2SE e J2ME


Diego Chohfi Turini,
diegochohfi@hotmail.com
http://dchohfi.wordpress.com/

comentários: 3