Alguns meses atrás, eu tive que migrar o WebServices do meu projeto pessoal baseado em Axis para JAX-WS, que é a API do Java para XML Web Services suportada pela Java Platform, Standard Edition 6 (Java SE 6).
Existem várias implementações do JAX-WS, como:
- Glassfish – Metro.
- JBoss WS.
- Axis2.
- Spring JAX-WS.
- Apache CXF que é baseado no XFire.
No meu caso, meu projeto profissional não usa Spring. Escolhemos o Apache CXF, que usa o Spring por padrão, mas você pode gerenciar o CXF sem o Spring.
Eu descobri e aprendi CXF com Eclipse JEE Indigo (funciona também com Eclipse JEE Helios), que fornece o Wizard para gerar a anotação JAX-WS e iniciar a aplicação CXF. Acredito que brincar com o CXF Eclipse Wizard é um bom ponto de partida para aprender o CXF, então eu decidi escrever alguns artigos chamados JAX-WS with Apache CXF and Eclipse, que explicam passo-a-passo como gerar o WebService e o Consumer do WebService com o CXF Eclipse Wizard.
Em meus artigos, usarei:
- A última versão 2.4.2 do CXF.
- Tomcat 7 como servidor.
- Eclipse JEE Indigo.
Mas você pode fazer a mesma coisa com outra versão do CXF e outro servidor. Neste artigo, irei explicar como
- Inicializar o CXF Plugin
- E criar um Eclipse Dynamic Web Project vazio com o Tomcat 7.
Download
Você pode fazer o download do jaxwswithcxf_step1.zip, que é um zip que contém o Dynamic Web Project jaxwswithcxf vazio.
Por que CXF?
Minha experimentação com Axis2
Quando eu comecei a brincar com JAX-WS, decidi testar o Axis2 porque eu estava feliz com o Axis, mas desapontado com a implementação do JAX-WS do Axis2 por vários motivos:
- A documentação é muito complexa quando você é novato.
- A distribuição do axis2 fornece muitos JARs, e não sabemos quais JARs devemos selecionar.
- O deploy service padrão força você a configurar seu WebService JARs em uma pasta servicejars.
- É por isso que tentei implementar meu próprio deployer para seguir minha arquitetura customizada (WebService JARs são armazenados em outras pastas), mas o código do deployer padrão do axis2 não é baseado em JAX-WS Endpoint#publish(String address, Object implementor) para fazer o deploy de um WebService.
- WebService não é um singleton
- Existem alguns bugs com métodos que não tem nenhum parâmetro etc.
Minha experimentação com CXF
Depois da minha experimentação com o Axis2, eu notei que o Eclipse JEE fornece um wizard para gerar anotações JAX-WS e inicializar um Dynamic Web Project com CXF usando Spring. Infelizmente, não temos Spring no nosso projeto, mas o CXF pode funcionar sem Spring! Irei explicar para você como fazer isso nos próximos artigos.
Hoje não estou desapontado com o CXF por vários motivos:
- Eclipse JEE Indigo gera bem as anotações JJAX-WS para a classe Java que você irá publicar como WebService.
- Se você puder usar o Spring, o CXF Wizard será bastante útil, porque ele gera bem o web.xml com o Spring CXF Servlet e o Spring beans, que são usados para declarar classes que devem ser publicadas como WebService. Escrever um serviço com Spring explica isso.
- Se você não usar Spring, você ainda pode usar o CXF Wizard para gerar as anotações JAX-WS. Para a publicação do WebService, você precisa fazer isso manualmente com o código Java usando a API JAX-WS Endpoint#publish(String address, Object implementor) para fazer o deploy de um WebService
1 MyService serviceInstance = new MyService();
2 Endpoint.publish("http://localhost:8080/MyService", serviceInstance);
irá fazer o deploy do seu serviço e o tornará disponível em http://localhost:8080/MyService.
Um simples serviço JAX-WS explica isso.
- A arquitetura do CXF é baseada em CXF Interceptors (In/Out) para fazer algum processo antes (In)/ depois (Out) de chamar o seu WebService. Você pode usar um CXF Interceptor existente ou desenvolver seu próprio interceptor para gerenciar login, segurança etc.
- O CXF Team está sempre disponível. Assim que você envia suas perguntas/requisitos para a lista de e-mail do CXF, você tem uma resposta.
Instale o CXF
A distribuição CXF fornece várias ferramentas para gerar anotações de JAX-WS, WSDL etc. O CXF Eclipse Plugin usa essas ferramentas para o wizard do CXF.
Instalar o CXF significa:
- fazer o download da distribuição CXF
- Iniciar o CXF Eclipse Plugin para determinar o caminho da distribuição CXF em Preferences do CXF Eclipse.
Faça o download da distribuição CXF
Vá até CXF Download e baixe a última versão da distribuição CXF. Neste artigo, usamos article apache-cxf-2.4.2.zip:
Unzipe o apache-cxf-2.4.2.zip no seu disco rígido onde você quiser. No meu caso, eu o fiz em C:\Apache\apache-cxf-2.4.2:
Inicie o CXF Eclipse Plugin
Nesta seção, iremos determinar o caminho da distribuição CXF dentro de Preferences do CXF Eclipse. Abra seu Eclipse JEE (Helios ou Indigo) e vá até o menu Window / Preferences:
Essa ação abre a caixa de diálogo Preferences. Clique no item de menu Web Services / CXF 2.x Preferences:
Clique no botão Add… (na parte direita da caixa de diálogo) para selecionar o caminho da distribuição CXF. Essa ação abre o Add CXF Runtime. Adicione o botão Browse… e selecione o caminho da distribuição CXF (no meu caso, C:\Apache\apache-cxf-2.4.2):
Se o caminho da distribuição do CXF for válido, os campos da caixa de diálogo serão preenchidos automaticamente, assim:
Clique no botão Finish, a caixa de diálogo fecha e a aba do CXF Runtime é preenchida com o CXF Runtime:
Nesse ponto, o CXF Runtime não está disponível. Clique na checkbox para torná-lo disponível:
O CXF Runtime agora está disponível. No próximo artigo, veremos que o CXF Runtime estará presente no wizard genérico do WebServices.
Inicie a aplicação Web CXF
Aqui iremos criar um Dynamic Web Project vazio chamado jaxwswithcxf, que irá hospedar o JAX-WS WebService.
Faça o download do Tomcat 7
Vá até Tomcat 7 Download e baixe a última versão da distribuição Tomcat. Neste artigo, usamos o apache-tomcat-7.0.20.zip:
Unzipe o apache-tomcat-7.0.20.zip no seu disco rígido onde você quiser. No meu caso, eu o fiz em C:\Apache\apache-tomcat-7.0.20:
Crie um Dynamic Web Project
Nesta seção, iremos criar uma aplicação WEB vazia jaxwswithcxf com Dynamic Web Project. Para fazer isso, vá até menu File/New /Dynamic Web Project:
O wizard do New Dynamic Web Project abre. Complete com o nome do projeto – jaxwswithcxf – e selecione Target runtime com seu servidor. Se nenhum servidor estiver definido, clique no botão New Runtime… para defini-lo.
Defina o novo servidor
Clique no botão New Runtime… abra o wizard para criar um servidor. Selecione o Tomcat v7.0 Server:
Clique no botão Next, a página do wizard mostra a seleção do diretório do Tomcat (Tomcat existente ou pasta vazia onde o Tomcat deve ser instalado). Aqui iremos selecionar o Tomcat 7 instalado. Clique no botão Browse… para selcionar o Tomcat home (no meu caso, C:\Apache\apache-tomcat-7.0.20):
New Dynamic Web Project configurado
Clique no botão Finish, a nova página do wizard do New Dynamic Web Project aparece:
Os campos nesse wizard estão pré-preenchidos como a versão 3.0 Dynamic Module Web, o que significa que o Tomcat 7.0 suporta o 3.0 servlet (você pode selecionar outra versão se quiser). Clique no botão Finish, e a aplicação WEB vazia jaxwswithcxf é gerada:
Inicie uma aplicação WEB vazia
Agora você pode iniciar o servidor Tomcat e iniciar a aplicação web vazia. Selecione o projeto jaxwswithcxf, clique com o botão direito e selecione menu Run As->Run on Server.
Essa ação abre o wizard para selecionar o servidor:
Selecione Tomcat 7.0 server e clique no botão Finish. Essa ação cria uma pasta Server na sua área de trabalho que é a configuração do seu Tomcat e inicia a aplicação WEB jaxwscxf WEB:
Você pode notar que terá um erro 404 porque o web.xml gerado está assim:
01 <?xml version="1.0" encoding="UTF-8"?>
02 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
03 <display-name>jaxwswithcxf</display-name>
04 <welcome-file-list>
05 <welcome-file>index.html</welcome-file>
06 <welcome-file>index.htm</welcome-file>
07 <welcome-file>index.jsp</welcome-file>
08 <welcome-file>default.html</welcome-file>
09 <welcome-file>default.htm</welcome-file>
10 <welcome-file>default.jsp</welcome-file>
11 </welcome-file-list>
12 </web-app>
E sua aplicação web não contém tais arquivos.
Conclusão
Neste artigo, iniciamos o CXF Eclipse Plugin e criamos um Dynamic Web Project vazio com o Tomcat 7.
No próximo artigo, [passo2], iremos criar uma simples classe Java HelloServiceImpl e iremos usar o CXF Eclipse wizard para o expor como um WebService com JAX-WS e CXF.
?
Texto original disponível em http://angelozerr.wordpress.com/2011/08/23/jaxwscxf_step1/