Apache CXF é um framework open source que dá suporte a criação e consumo de Web Services. Ele segue as especificações JAX-WS e JAX-RS e oferece suporte a uma variedade grande de protocolos de mensagem: SOAP, XML/HTTP, RESTful HTTP ou CORBA. Ainda permite trabalharmos com os protocolos de transporte HTTP e JMS.

Vamos entender essa descrição com calma. Framework é uma coleção de coisas. Essa coleção pode incluir uma ou mais arquiteturas, tecnologias, conceitos, modelos e até mesmo outros frameworks. O CXF é exatamente isso: uma coleção de várias bibliotecas diferentes, organizadas dentro de uma arquitetura que divide esses seus componentes em camadas diferentes que conversam entre si através de uma API definida. Um fato sobre o CXF: ele não é e não pretende ser um servidor, uma plataforma ou um barramento de serviços. Para isso existem outros produtos como Oracle OSB, Apache Service Mix, Mule ESB entre outros.

A próxima expressão é Web Service. O framework estabelecido por Web Services é caracterizado por uma existência abstrata definida através de padrões regulados por organizações e implementados por plataformas tecnológicas de vendedores. Todo Web Service existe para prover operações. Operações fazem parte de contratos que podem ser descritos através de um XML chamado WSDL ou WADL. Protocolos, padrões de troca de mensagem, políticas, meta-dados são outras informações que fazem parte da definição de um Web Service.

Em seguida, JAX-WS ou Java API for XML Web Services e JAX-RS ou Java API for RESTful Web Services entram pra nossa sopa de letrinhas. Em termos bem simples, essas APIs permitem a construção de serviços através do uso de anotações trazendo criando um nível de indireção entre a definição do serviço, feito em termos de classes JAVA anotadas e as plataformas que os executam através da interpretação dessas anotações.

Um protocolo de comunicação, em termos simples, é um conjunto de regras que determinam como dados são trocados entre duas partes. Na descrição vemos dois tipos de protocolos: de mensagem e de transporte. É fácil de entendermos a diferença se pensarmos que o primeiro refere-se a regras que definem o formato da mensagem como por exemplo XML, SOAP (um tipo de xml), JSON, entre outros. O segundo tipo de protocolo define a regra como uma ligação pode ser estabelecida entre dois sistemas. O protocolo de mensagem é comparável a uma carta (com selo, envelope pardo ou não) enquanto o protocolo de transporte é comparável ao carteiro (que caminha lentamente ou usa um carro para fazer suas entregas).

O framework CXF pode ser obtido no endereço http://cxf.apache.org/download.html. Quando acessamos essa página vemos que existem várias últimas versões, criadas a partir de branchs separadas. As versões 2.7.X suportam apenas o Java 6, enquanto as outras suportam o Java 5 ou anterior. A diferença entre as versões 2.6.X, 2.5.X e 2.4.X são diversas e grandes. Essas versões oferecem pouca compatibilidade entre elas de forma que se você usa a versão 2.5.X e deseja utilizar a 2.6.X, vai se deparar com módulos que sumiram, APIs desaparecidas ou substituídas por outras em pacotes diferentes e assim por diante.

Pacotes do Apache CXF da versão 2.7.0

Figura 1: Pacotes do Apache CXF da versão 2.7.0

Vamos fazer o download do pacote da versão 2.7.0. Alguns preferem baixar o pacote source (src) para Window ou Unix dependendo da sua plataforma de desenvolvimento já que nele temos o código fonte, tão necessário para debug. Quando descompactamos o pacote, as seguintes pastas são criadas:

  • api: é o código fonte do core do CXF. Contém também o arquivo pom.xml que permite que o framework seja construído através do programa maven (maven.apache.org). Para fazer a “build” do cxf nessa versão 2.7.X, é necessário o maven 3;
  • common: contém dois componentes com nomes curiosos: wstx-msv-validation e xerces-xsd-validation. O primeiro é um validador de XMLs baseado em um produto chamado woodstox (http://http://woodstox.codehaus.org/). O interessante desse validador é que ele se baseia em uma API escrita pela antiga Sun (criadora e mantenedora do Java por muitos anos) que pretende validar múltiplos tipos de documentos suportando DTD, XML Schema, Relax/NG daí o nome wstx (woodstox) msv (multi schema validator). O segundo componente provê validação de documentos XML Schema baseados no xerces (http://xerces.apache.org/)
  • distribution: contém o suporte para construção do pacote de distribuição do framework, bastante parecido com o arquivo que baixamos do site do CXF;
  • etc: contém arquivos de suporte aos IDEs Idea e Eclipse;
  • integration: através do seu suporte JCA (Java Connector Architecture), o CXF permite que clientes acessem seu Bus que é o componente principal de interação com o framework, através de conexões gerenciadas pelo servidor de aplicações. Para maiores detalhes, acesse http://cxf.apache.org/docs/using-cxf-jca-rar-in-application-server.html.
  • Licenses: contém as licenças dos frameworks e produtos que estão integrados ao CXF. Infelizmente esse diretório é tão negligenciado pelos desenvolvedores e arquitetos assim como o entendimento de como as licenças funcionam e melhor, se podemos usar ou não um produto quando desenvolvemos nossas soluções.
  • Osgi: contém artefatos que permitem ao CXF ser utilizando dentro de containers osgi como Karaf e Servicemix.
  • Rt: Componentes de Runtime. São aqueles que adicionam funcionalidades ao cxf através de suporte a transportes, protocolos, especificações, clientes, binding entre outros. Não se preocupe em entender tudo de cara pois o CXF é gigantesco e mesmo os mais experientes não o conhecem por completo.
  • Services: nesse diretório são encontrados os serviços especiais e naturalmente demandam um conhecimento um pouco mais avançado. Sts (security token service) que é o serviço utilizado quando trabalhamos com segurança (autenticação e autorização) e criptografia. wsn (WS-Notification) é a implementação de uma especificação da Oasis que permite o uso de notificações e eventos com Web Services e finalmente Ws-discovery, outra especificação que permite a localização dinâmica de Web Services.

É isso pessoal. Finalizamos nossa breve visão do que é o framework Apache CXF. Recomendo que se possível, façam a build a partir do fonte e deem uma boa olhada nos artefatos e exemplos que acompanham o pacote descrito. Até a próxima.