Documente Academic
Documente Profesional
Documente Cultură
html#ixzz2TfQFOfxh
Web Services. Construindo, disponibilizando e acessando Web Services via J2SE e J2ME.
Introduo a Web Service
Um requisito bsico de qualquer empresa prover servios, sejam os vendedores de uma empresa, o setor de custos e compras, os prestadores de servio, etc. Cada empresa oferece servios para a comunicao entre ela e outras pessoas, sejam pessoas fsicas ou jurdicas, internas ou externas a empresa. Alguns desses servios podem ser automatizados. Por exemplo, no necessrio existir um representante de vendas se o seu cliente j tem, em mos, o preo e todos os outros dados relevantes para constituir um pedido de compra. Este pedido pode e, em muitos casos, j feito, via interfaces computacionais. O cliente entra em seu site, monta o pedido como desejar e confirma a compra. Isto um servio web, ou seja, um servio que est publicado na web para que qualquer pessoa possa fazer uso. Web Services foram criados para construir aplicaes deste tipo, aplicaes que so servios na internet. Porm no faz parte do conceito de Web Service a criao de interfaces grficas para os usurios, deixando esta parte para outras empresas ou pessoas desenvolverem. comum encontrar textos afirmando que Web Services disponibilizam servios somente para desenvolvedores, ou que Web Services nada mais so do que chamada de mtodos usando XML. Estas definies esto corretas. Web Services a tecnologia ideal para comunicao entre sistemas, sendo muito usado em aplicaes B2B. A comunicao entre os servios padronizada possibilitando a independncia de plataforma e de linguagem de programao. Por exemplo, um sistema de reserva de passagens areas feito em Java e rodando em um servidor Linux pode acessar, com transparncia, um servio de reserva de hotel feito em. Net rodando em um servidor Microsoft. Para comunicar com o Web Service, necessrio uma implementao do protocolo SOAP (Simple Object Access Protocol) definido no W3C. Este protocolo o responsvel pela independncia que o Web Service precisa. Atualmente j encontra-se vrias implementaes disponveis em vrias linguagens. s escolher uma e usar.
Na Figura 1 encontra-se um diagrama mostrando as mensagens trocadas entre cliente e servidor em uma comunicao SOAP. Existem duas aplicaes se comunicando, um Client Wrapper e um Server Wrapper que esto disponibilizando a transparncia para as aplicaes. Entre eles s trafega XML, seguindo o protocolo SOAP sobre HTTP.
Figura1: Retirada do Artigo Developing JAX-RPC Based Web Services Using Axis and SOAP
Um Web Service ser publicado, e para que outras pessoas possam utiliz-lo necessrio definir como ele , como deve ser acessado, e que valores ele retornar. Estas definies so descritas em um arquivo XML de acordo com a padronizao Web Service Description Language (WSDL). Este arquivo deve ser construdo para que os usurios do servio possam entender o funcionamento do Web Service e, logicamente, ser de acesso pblico. Os Web Services tambm podem ser utilizados para implementar arquiteturas orientadas a servios, as Service-Oriented Architectures (SOA). Neste modelo de arquitetura os principais requisitos viram servios e so acessados por outros servios, modularizando e aumentando a coeso dos componentes da aplicao. O que ser implementado neste artigo um Web Service simples, para aprendizado da tecnologia e para desmentir a afirmao que Web Services so complexos de construir e complexos para utilizar.
Agora basta reiniciar o servidor Tomcat , abrir um navegador e ir para pgina: http://localhost:8080/axis . Uma pgina do Axis ser apresentada conclundo a instalao como a Figura 2:
Nesta mesma pgina de apresentao, existiro dois links importantes: um link para validar a instalao: clicando nele ser apresentado uma lista de componenetes necessrios (" Needed Components "). Caso algum desses no for encontrado ele ir solicitar a instalao. Com as verses trabalhadas neste artigo, o Tomcat e o Axis estaro completos portanto a validao OK; um link para visualizar os Web Services j instalados: clicando nele, existiro dois Web Services e clicando no link (wsdl) voc ver o arquivo de especificao de ambos. Se, ao clicar, no aparecer nenhuma informao, no se preocupe, alguns navegadores no exibem XML, outros exibem como HTML, sendo necessrio abrir o fonte da pgina para ver o cdigo. Mas ele estar l e funcionando.
java:
public class Servico { public int soma(int valor1, int valor2) { return valor1 + valor2; } }
Agora s falta disponibiliz-lo no nosso servidor para o mundo acessar. E, para fazer isso, deve-se alterar o nome do arquivo de Servico.java para Servico.jws, coloca-lo no diretrio: CATALINA_HOME / webapps / axis / e iniciar o servidor, se ele j no estiver iniciado. Se j estiver iniciado, o seu Web Service est publicado. Os arquivos. jws so lidos pelo Axis e representam Java Web Services. O Axis se basear nesses arquivos (. jws) para criar os arquivos de definio WSDL. Todos os mtodos pblicos existentes nessas classes sero automaticamente disponibilizados para terceiros. Criar documentos XML demorado e, muitas vezes, chato. Gerar o WSDL uma caracterstica muito relevante na escolha de uma implementao de SOAP e o Axis um dos poucos frameworks que conseguem fazer essa faanha de maneira transparente para o desenvolvedor. por esse motivo que ele altamente recomendado na construo de Web Services. Para acessar o Web Service criado basta abrir um navegador e ir ao endereo: http://localhost:8080/axis/Servico.jws . Da mesma forma que os outros dois Web Services foram vistos, este tambm ter um link para ver a especificao WSDL, e novamente poder ser visto ou no dependendo do seu navegador.
O arquivo WSDL da classe Servico ficar como abaixo: 1. <?xml version="1.0" encoding="UTF-8"?> 2. <wsdl:definitions targetNamespace="http://localhost:8080/axis/Servico.jws" 3. xmlns="http://schemas.xmlsoap.org/wsdl/" 4. xmlns:apachesoap="http://xml.apache.org/xml-soap" 5. xmlns:impl="http://localhost:8080/axis/Servico.jws" 6. xmlns:intf="http://localhost:8080/axis/Servico.jws" 7. xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" 8. xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 9. xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" 10. xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 11. <wsdl:message name="somaRequest"> 12. <wsdl:part name="valor1" type="xsd:int"/> 13. <wsdl:part name="valor2" type="xsd:int"/> 14. </wsdl:message> 15. <wsdl:message name="somaResponse"> 16. <wsdl:part name="somaReturn" type="xsd:int"/> 17. </wsdl:message> 18. <wsdl:portType name="Servico">
19. <wsdl:operation name="soma" parameterOrder="valor1 valor2"> 20. <wsdl:input message="impl:somaRequest" name="somaRequest"/> 21. <wsdl:output message="impl:somaResponse" name="somaResponse"/> 22. </wsdl:operation> 23. </wsdl:portType> 24. <wsdl:binding name="ServicoSoapBinding" type="impl:Servico"> 25. <wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/> 26. <wsdl:operation name="soma"> 27. <wsdlsoap:operation soapAction=""/> 28. <wsdl:input name="somaRequest"> 29. <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" 30. namespace="http://DefaultNamespace" use="encoded"/> 31. </wsdl:input> 32. <wsdl:output name="somaResponse"> 33. <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" 34. namespace="http://localhost:8080/axis/Servico.jws" use="encoded"/> 35. </wsdl:output> 36. </wsdl:operation> 37. </wsdl:binding> 38. <wsdl:service name="ServicoService"> 39. <wsdl:port binding="impl:ServicoSoapBinding" name="Servico"> 40. <wsdlsoap:address location="http://localhost:8080/axis/Servico.jws"/> 41. </wsdl:port> 42. </wsdl:service> 43. </wsdl:definitions>
Analisar este arquivo essencial para entender a profundidade da implementao. Uma das linhas mais importantes para este arquivo a linha 19, onde define-se o nome do mtodo e o nome de seus parmetros. Eles devero ser de conhecimento pblico para que as interfaces cliente consigam se comunicar com o Web Service.
Este cdigo est dentro de um arquivo chamado Cliente.java, aps compilar e executar esta classe exibir o resultado " Resultado da soma: 6 " como desejado. O framework do Axis trata a primitiva int e a classe wrapper Integer como sendo iguais. Portanto, tanto faz usar uma ou outra. Neste exemplo, foi criado o Web Service com dois parmetros int e aqui no cliente estamos usando dois parmetros Integer . Como pode-se notar, o framework do Axis abstrai qualquer trabalho com XML, evitando que o desenvolvedor necessite conhecer a sintaxe do XML do SOAP.
O fonte do KSOAP pode ser encontrado aqui: http://ksoap.objectweb.org/software/downloads/current/ksoap-source.zip E o fonte do KXML pode ser encontrado aqui: http://kxml.objectweb.org/software/downloads/current/kxml-source.zip
# SeuProjetoJ2ME * org o kxml o - - Todas as suas pastas e arquivos internos a esta pasta que esto no zip. kobjects o - - Todas as suas pastas e arquivos internos a esta pasta que esto no zip. ksoap + transport - - Necessrio excluir o pacote marshal.
No sero utilizados as pastas referentes a servlets e a j2se do ksoap. Somente referente a J2ME e ao fonte bsico. No diretrio SeuProjetoJ2ME, deve ser criado a classe ClienteJ2ME.java conforme abaixo:
1. import javax.microedition.lcdui.Display; 2. import javax.microedition.lcdui.TextBox; 3. 4. import org.ksoap.SoapObject; 5. import org.ksoap.transport.HttpTransport; 6. 7. public class ClienteJ2ME extends javax.microedition.midlet.MIDlet { 8. private Display display; 9. private String url = "http://localhost:8080/axis/Servico.jws"; 10. TextBox textbox = null; 11. 12. public void startApp() { 13. display = Display.getDisplay(this); 14. try { 15. testWebService(); 16. } catch (Exception ex) { 17. System.out.println(ex); 18. } 19. } 20. 21. public void pauseApp() {} 22. public void destroyApp(boolean unconditional) {} 23. 24. public void testWebService() throws Exception { 25. StringBuffer stringBuffer = new StringBuffer(); 26. 27. TextBox textBox = null; 28. 29. // Chama o WebService 30. SoapObject client = new SoapObject(url,"soma"); 31. client.addProperty("valor1",new Integer(2)); 32. client.addProperty("valor2",new Integer(4)); 33. HttpTransport ht = new HttpTransport(url,"soma"); 34. stringBuffer.append(" 35. Resultado: " + ht.call(client)); 36. 37. // mostra o valor do resultado na tela. 38. textBox = new TextBox("Teste WebService", stringBuffer.toString(), 1024, 0); 39. display.setCurrent(textBox); 40. } 41. }
Pronto! Aplicao construda. Essas poucas linhas de cdigo iro gerar os mesmos documentos XML de envio e recepo que o cliente Desktop produziu. Esse exemplo um MIDlet para MIDP2 e deve ser executada com o Java Wireless Toolkit. Abaixo segue os passos para compilar e executar a aplicao no Java Wireless Toolkit.
* Abrir o JWT e criar um novo projeto * Configure as opes do projeto para utilizar MIDP2.0 e CLDC1.1 * Configure o nome do MIDlet para ClienteJ2ME * Copiar este ltimo arquivo e os fontes que voc separou do KSOAP e do KXML para a pasta src do projeto. * Compilar e Executar (O servidor Tomcat deve estar inicializado). Em J2ME as aplicaes clientes de Web Services so mais difceis de serem desenvolvidas, pois requerem mais conhecimento que os clientes Desktop. Mas, pela simplicidade dos dispositivos e o valor agregado, essa implementao, em alguns casos, ainda vivel. O que deve ser analizado o custo da conexo em produo. Conexes com a internet via celulares normalmente so pagos por kilobyte trafegado nas redes das operadoras. O valor caro, e como os arquivos XMLs so grandes, o custo de fazer a comunicao com Web Service pode no ser a melhor sada. Analise antes de qualquer escolha.