Criando Web Services com Apache Axis Palestrante: Daniel Destro do Carmo
Tópicos do Tutorial Introdução O que são Web Services? Padrões Web Services SOAP WSDL Web Services com Java O que é Apache Axis? Desenvolvendo Web Services com Axis Server side Client side
Introdução
A Internet A internet revolucionou a maneira de se fazer negócios. Sites e aplicações são facilmente acessados. O HTML e o protocolo HTTP são o padrão de troca de informações. Os navegadores web tornaram essa comunicação simples e possível. Diversas tecnologias foram criadas para o desenvolvimento web. clientes web internet Java PHP ASP C++ etc... Web server
A Evolução Com o grande sucesso, os negócios na internet evoluíram. A necessidade de novas soluções aumentaram. Transações e trocas de informações comerciais tornaram-se cruciais para os negócios. A automatização era fundamental. solicitar crédito fazer pedido de compra acompanhar o pedido confirmar envio dos produtos Empresa ABC Fornecedor XYZ
O Grande Problema Diferentes empresas tendem a utilizar diferentes tecnologias e soluções. Grande problema para integrar todas essas soluções, de forma automatizada. Algumas tecnologias não são interoperacionais. Uma solução para cada tecnologia tornaria isso inviável e caro. Mudança de provedor de serviços pede nova implementação. ASP.NET PHP Empresa ABC Corba XML DCOM Solução proprietária Sockets RMI Fornecedor XYZ Java Delphi
Web Services
Web Services Solução para o grande problema de integração visto anteriormente. Independe de tecnologia, sistema operacional e plataforma. Qualquer aplicação pode chamar os serviços de outra aplicação. Web Services usam protocolos e padrões abertos, baseados em XML. Constante processo de padronização pelo W3C e OASIS. ASP.NET PHP Empresa ABC WEB SERVICES Fornecedor XYZ Java Delphi
Web Services Desenhada para ter um baixo acoplamento entre as partes. Para se ter um baixo acoplamento, as partes devem concordar em: Utilizar um formato de troca de mensagens em comum (SOAP) Utilizar um protocolo em comum (HTTP) Web Service é uma arquitetura orientada a serviços. A interface é crucial é o contrato entre o provedor e o cliente. Web Services têm dois participantes: provedor do serviço e o requisitante do serviço. O requisitante (cliente ou consumidor) acessa o Web Service. arquitetura básica O provedor oferece a interface e a implementação do serviço.
Padrões Web Services
Padrões Web Services Web Service é uma tecnologia baseado em padrões abertos. HTTP XML SOAP WSDL UDDI Outros... Estes nomes de padrões são constantemente mencionados quando se fala de Web Service.
Padrões Web Services SOAP O SOAP (Simple Object Access Protocol) é um protocolo de comunicação, baseado em XML, trafegando, geralmente sobre HTTP. Utilizado para comunicação e troca de dados entre aplicações distintas. Inicialmente criada pela Microsoft e IBM. Agora é padronizada pelo W3C. SOAP é um simples documento XML que contém os elementos: Envelope, que identifica a mensagem SOAP; Header, opcional, que contém informação de cabeçalho; Body, que contém as informações da chamada e resposta; Fault, opcional, que contém informações sobre erros.
Padrões Web Services SOAP SOAP pode seguir o modelo RPC e o modelo de Documentos. SOAP também suporta attchments (anexos). Exemplo de documento SOAP <?xml version="1.0"?> <soap:envelopexmlns:soap="http://www.w3.org/2001/12/soap-envelope" soap:encodingstyle="http://www.w3.org/2001/12/soap-encoding"> <soap:header>... </soap:header> <soap:body>... <soap:fault>... </soap:fault> </soap:body> </soap:envelope>
Padrões Web Services WSDL WSDL (Web Services Description Language) é um documento XML que descreve os Web Services de uma maneira estruturada. WSDL descreve um ou mais serviços, como um conjunto de endpoints. Ele informa a interface de acesso, os tipos de dados usados e a localização do serviço. Os WSDLs são fornecidos pelos provedores de aplicativos de Web Services. A partir do WSDL fornecido geraremos os clientes dos Web Services.
Padrões Web Services UDDI UDDI (Universal Description, Discovery and Integration) é um serviço que possibilita uma forma padrão, rápida e fácil de se encontrarem Web Services, de acordo com seu interesse. É uma espécie de lista de Web Services públicos fornecidos. Hoje, várias empresas mantêm o serviço de registro e busca do UDDI. UDDI Org Microsoft IBM SAP entre outras
Padrões Web Services Conclusão Imagine-se com fome. Você procura no Google (UDDI) por um restaurante. No restaurante você lê o cardápio (WSDL), para saber o que pedir. Em seguida, você faz o pedido ao garçom (SOAP), que leva o pedido até a cozinha (HTTP). O cozinheiro prepara sua comida (Classe que implementa o serviço). Depois de pronta, o garçom traz de volta sua comida (SOAP de resposta). É, basicamente, assim que funcionam os Web Services.
Web Services com Java
Web Services com Java A plataforma J2EE oferece APIs e ferramentas para trabalhar com os Web Services. Criar serviços e seus clientes. A tecnologia Java oferece as seguintes APIs: Java Web Services Developer Pack (Java WSDP) Java API for XML-Based RPC (JAX-RPC) Java API for XML Registries (JAXR) Java API for XML Processing (JAXP) Java Architecture for XML Binding (JAXB) SOAP with Attachments API for Java (SAAJ) Com estas APIs você não precisa saber como criar o SOAP. Você só precisa saber utilizar as classes da API para criar e acessar os Web Services. Porém...
Web Services com Java Desvantagens O desenvolvimento de Web Services com estas APIs não é tão simples. A curva de aprendizado é grande. Você deve conhecer várias classes, e saber como utilizá-las. Então, como desenvolver Web Services mais facilmente???
Web Services com Apache Axis
W.S. com Apache Axis Apache Axis é um framework para se construir processadores SOAP. Com Axis é possível criarmos os serviços web e os clientes desses serviços. Axis fornece as ferramentas necessárias para trabalharmos com os Web Services de forma fácil e simplificada. Axis pode ser muito facilmente integrado à sua aplicação web, independente do container (Tomcat, JBoss, outros). Axis usa a API JAX-RPC internamente para trabalhar com SOAP. O projeto Apache Axis é a terceira geração do Apache SOAP. Atualmente está na versão 1.1 versão 1.2 com melhorias em breve.
W.S. com Apache Axis Instalando o Apache Axis Vá até o site do Apache Axis: http://ws.apache.org/axis/ Faça o download da última versão (1.1) arquivo zip. Descompacte o zip no seu disco. Crie a variável de ambiente %AXIS_HOME%. Coloque todos os jars do diretório AXIS_HOME/lib no CLASSPATH. * Certifique-se que você tenha o JAVA_HOME configurado. Pronto! Agora podemos trabalhar com os Web Services.
W.S. com Apache Axis Server Os Web Services são publicados através de servidores web. O Apache Axis pode rodar em qualquer Web Container Java. Usaremos o container Apache Tomcat. Copie o diretório axis localizado em AXIS_HOME/webapps/ para o diretório webapps do seu Tomcat. Com isso temos o Axis instalado no Tomcat. Fácil! Este diretório já contém as configurações básicas do Axis. Inicie o Tomcat e valide a instalação, clicando nos links disponíveis. http://127.0.0.1:8080/axis/
W.S. com Apache Axis Server - JWS Como nosso primeiro Web Service, vamos disponibilizar um serviço simples de soma, implementado pela classe abaixo: public class Calculadora { } public int somar( int a, int b ) { return a + b; } Esta classe pode ser publicada como um Web Service facilmente como um endpoint JWS. Para isto, basta renomear o arquivo.java para.jws e copiá-lo para a pasta axis do webapps do seu Tomcat.
W.S. com Apache Axis Server - JWS Ao publicarmos o nosso JWS, iniciamos o Tomcat e vamos testá-lo. Para acessar o Web Service da Calculador, aponte o navegador para: http://127.0.0.1:8080/axis/calculadora.jws Aparecerá um link para visualizarmos o WSDL que é gerado automaticamente pelo Axis. É a partir deste WSDL que criaremos nosso cliente de acesso ao Web Service da Calculadora. Com estes passos bem simples temos nosso primeiro Web Service publicado.
W.S. com Apache Axis Server - JWS Para classes de serviços bem simples, o JWS é suficiente, porém ele tem algumas desvantagens: Sempre precisamos ter o fonte Java disponível. A classe não pode fazer parte de nenhum pacote. Não pode utilizar outros tipos, senão os básicos do Java (primitivos, wrappers e String).
W.S. com Apache Axis Server Avançado O Axis nos permite disponibilizar nossas classes como serviços web, de forma mais completa e com maior flexibilidade, através de suas ferramentas. Para isso devemos nos familiarizar com o WSDD (Web Service Deployment Descriptor) do Axis. O WSDD contém informações do que você deseja publicar na sua aplicação Axis. Geralmente teremos um arquivo chamado deploy.wsdd e um outro chamado undeploy.wsdd, para fazer e desfazermos o deploy de nossos Web Services. O Axis nos fornece as ferramentas necessárias para podermos criar todos estes arquivos de configuração, além de fazer o deploy de nosso Web Service.
W.S. com Apache Axis Server Avançado Para iniciar, definimos a interface do nosso Web Service: package bovespa; public interface IStockQuote { public String gethigherstock(); public double getstockquote( String stock ); } A partir desta interface, vamos gerar as classes do Web Service do lado servidor e também os arquivos de configurações WSDL e WSDD.
W.S. com Apache Axis Server Avançado Primeiro criamos o descritor do serviço (WSDL ) utilizamos a ferramenta Java2WSDL: java -cp org.apache.axis.wsdl.java2wsdl -o StockQuote.wsdl -l"http://127.0.0.1:8080/axis/services/stockquote" -n "urn:stockquote" -p"bovespa.ws" "urn:stockquote" bovespa.istockquote Em seguida, criamos as classes do servidor e os WSDD com a ferramente WSDL2Java: java org.apache.axis.wsdl.wsdl2java -o./src -s -S true -Nurn:StockQuote bovespa.ws StockQuote.wsdl Agora já temos todas as classes e arquivos gerados pelo Axis.
W.S. com Apache Axis Server Avançado A ferramenta do Axis gerou as classes Stub e Skeleton baseada na nossa interface IStockQuoteWS. Os Stubs são as classes que ficam no lado cliente e que invocam o Web Service. O Skeleton é a classe que é invocada no lado servidor quando o Web Service é solicitado. Uma classe de implementação do nosso Web Service também é criada. Nesta classe podemos delegar a chamada aos métodos para a nossa classe que realmente implementa a funcionalidade.
W.S. com Apache Axis Server Avançado Agora vamos disponibilizar o nosso Web Service. Primeiro, copiamos os binários (.class) para o diretório classes da nossa aplicação no Tomcat (ou no lib sob a forma de um jar). Reiniciamos o Tomcat. Em seguida, executamos o comando do Axis para, de fato, fazer o deploy: java org.apache.axis.client.adminclient./ src/bovespa/ws/deploy.wsdd O programa AdminClient faz o deploy baseado no WSDD informado.
W.S. com Apache Axis Após feito o deploy do nosso Web Service, podemos acessá-lo, via browser, para fins de teste, da seguinte maneira: Apontar o navegador para: http://127.0.0.1:8080/axis/ Clicar sobre o link: View all deployed services. E então escolher o serviços disponível.
W.S. com Apache Axis Client Os clientes do nosso Web Service poderão gerar os clientes de acesso a partir do WSDL que é fornecido pelo Axis, como o que vimos pelo próprio navegador web. Portanto, não necessitamos fornecer nenhum tipo de código para os interessados em acessar nosso serviço. Mas, e se quisermos acessar algum Web Service por aí, ou mesmo um Web Service que nós publicamos. A ferramenta WSDL2Java, que já vimos, gera as classes de Stub pra nós.
W.S. com Apache Axis Client Imagine que queremos acessar o nosso primeiro Web Service de Calculadora. Vamos então gerar as classes Stub para o cliente acessar o Web Service. Primeiro acessamos o WSDL do Web Service e o salvamos em disco. Em seguida utilizamos a ferramenta para gerar o cliente: java org.apache.axis.wsdl.wsdl2java Calculadora.wsdl -o src
W.S. com Apache Axis Client Utilizando as classes geradas, vamos fazer um teste de acesso ao Web Service: CalculadoraServiceLocator loc = new CalculadoraServiceLocator(); Calculadora calc = loc.getcalculadora(); int result = calc.somar( 1, 2 ); System.out.println( result );
Para finalizar Com isso podemos ter uma idéia do que é possível fazer com o Apache Axis, podendo irmos além do que foi apresentado. O Apache Axis ainda pode ser mais produtivo trabalhando com a ferramenta Ant, que oferece tasks das ferramentas do Axis. Para maiores informações: Apache Axis: http://ws.apache.org/axis/ Web Services e SOAP http://www.w3c.org
Fim OBRIGADO! Daniel Destro do Carmo danieldestro@uol.com.br