Você está na página 1de 6

ASSINE 0800 703 3000

BATE-PAPO

E-MAIL

SAC

BUSCAR

VOIP

E-MAIL GRTIS

SHOPPING

NDICE PRINCIPAL

Login
>

Registre-se

HOME

NOTCIAS

ARTIGOS

FRUM

WIKI

BUSCA

SOBRE

ENVIAR NOTCIA

CONTRIBUIR

O QUE JAVA?

Home > Artigos > Frameworks, APIs, Instalao e Configurao >

Web Services. Construindo, disponibilizando e acessando Web Services via J2SE e J2ME.
Publicado por Tutoriais Admin em 05/07/2010 - 547.217 visualizaes

comentrios: 1 Vitor Fernando Pamplona Nos ltimos anos o termo " Web Service " tem chamado a ateno de muitos analistas e arquitetos, principalmente dos mais fnticos por business-to-business (B2B). O conceito foi criado, implementado e agora est comeando a ser utilizado. As espectativas so grandes, altos investimentos, frameworks poderosos, ganhos em produtividade, portabilidade e em independncia. Neste artigo, ser apresentado um pouco desta grande tecnologia que prometeu e, j est cumprindo, revolucionar o modo como os sitemas so desenvolvidos.

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 independencia 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.

Conhecendo o ambiente servidor


Todo o Web Service precisa ficar ativo e esperando requisies, portanto, necessita estar executando em um servidor. Neste artigo ser utilizado o servidor Tomcat para executar um framework de Web Service chamado Axis . Ambos so sub-projetos livres da Apache, sendo que o Tomcat est no projeto Jakarta e o Axis est no projeto Web Services. O Tomcat um container para JSP e Servlets muito conhecido e muito utilizado. Encontra-se vrios tutoriais e artigos sobre ele espalhados em pginas na internet. J o Axis um conjunto de ferramentas para desenvolver WebServices. Dentre suas principais funcionalidades esto: implementao do protocolo SOAP ; implementao de classes para agilizar a comunicao e a publicao de Web Services; utiliza containers JSP para disponibilizar os Web Services na rede.

Instalando o ambiente servidor.


Para criarmos o servidor necessrio baixar e instalar o Tomcat . Na poca do lanamento deste artigo, a verso do Tomcat em produo era a 5.0 e poderia ser encontrada neste endereo: http://apache.usp.br/jakarta/tomcat-5/v5.0.28/bin/jakarta-tomcat-5.0.28.zip Aps baixar o Tomcat , deve-se descompactar o zip e criar a varivel de ambiente CATALINA_HOME que dever indicar o local onde ser descompactado. Depois de concludo esse passo possvel iniciar o servidor executando o arquivo: CATALINA_HOME / bin / startup.bat no Windows ou CATALINA_HOME / bin / startup.sh no Linux. Para verificar se o Tomcat est rodando, utiliza-se um navegador com o seguinte endereo: http://localhost:8080/ . Se a instalao estiver correta o Tomcat ir apresentar uma mensagem de ok. claro, esta a instalao padro do Tomcat , voc poder modificar e adicionar mais segurana a ela. O prximo a ser baixado e configurado o Axis que tem um fonte em Java e um em C + +. Ser utilizado o fonte em java na verso 1.1 que pode ser encontrado neste endereo: http://apache.usp.br/ws/axis/1_1/axis-1_1.zip Aps baixar o arquivo zip do Axis , e descompact-lo, deve-se mover a pasta " axis ", que encontra-se dentro do diretrio webapps do arquivo, para a pasta webapps do Tomcat . 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:

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.

Implementando um Web Service simples


O objetivo aprender, ento ser criado um servio bem simples. O servio a soma de duas variveis inteiras retornando o resultado. Este exemplo poder servir para qualquer outra implementao. Abaixo est a classe implementada. O nome do arquivo Servico.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:

<?xml version="1.0" encoding="UTF-8"?> <wsdl:definitions targetNamespace="http://localhost:8080/axis/Servico.jws" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://localhost:8080/axis/Servico.jws" xmlns:intf="http://localhost:8080/axis/Servico.jws" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <wsdl:message name="somaRequest"> <wsdl:part name="valor1" type="xsd:int"/> <wsdl:part name="valor2" type="xsd:int"/> </wsdl:message> <wsdl:message name="somaResponse"> <wsdl:part name="somaReturn" type="xsd:int"/> </wsdl:message> <wsdl:portType name="Servico"> <wsdl:operation name="soma" parameterOrder="valor1 valor2"> <wsdl:input message="impl:somaRequest" name="somaRequest"/> <wsdl:output message="impl:somaResponse" name="somaResponse"/> </wsdl:operation> </wsdl:portType> <wsdl:binding name="ServicoSoapBinding" type="impl:Servico"> <wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/> <wsdl:operation name="soma"> <wsdlsoap:operation soapAction=""/> <wsdl:input name="somaRequest"> <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://DefaultNamespace" use="encoded"/> </wsdl:input> <wsdl:output name="somaResponse"> <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://localhost:8080/axis/Servico.jws" use="encoded"/> </wsdl:output> </wsdl:operation> </wsdl:binding> <wsdl:service name="ServicoService"> <wsdl:port binding="impl:ServicoSoapBinding" name="Servico"> <wsdlsoap:address location="http://localhost:8080/axis/Servico.jws"/> </wsdl:port> </wsdl:service> </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.

Realizando um teste bsico


O Axis aceita que um Web Service seja chamado via uma requisio HTTP-GET. Portanto, ao digitar um endereo possvel testar o web service. No exemplo deste artigo o endereo este: http://localhost:8080/axis/Servico.jws?method=soma&valor1=2&valor2=4 . Como pode-se notar, o endereo a juno de um namespace, que o endereo do WebService representado por http://localhost:8080/axis/Servico.jws , a varivel method que, como seu nome diz, contm o nome do mtodo que se deseja executar, e uma sequncia dos parmetros deste mtodo. Lembrando que o nome dos parmetros deve ser o mesmo definido na funo da classe. O resultado da execuo um documento XML com a resposta execuo est abaixo:
01 <?xml version="1.0" encoding="UTF-8"?> 6

. Novamente, dependendo do browser no ser visivel as tags XML. O XML que retornou na

02 <soapenv:Envelope 03 xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 04 xmlns:xsd="http://www.w3.org/2001/XMLSchema" 05 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 06 <soapenv:Body> 07 <somaResponse soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> 08 <somaReturn xsi:type="xsd:int">6</somaReturn> 09 10 </somaResponse> 11 </soapenv:Body> 12 </soapenv:Envelope>

Criando um cliente em Java para acessar o Servidor


O cliente tambm uma classe simples, mas exige conhecimento em algumas classes no to comuns no dia-a-dia. As classes Service e Call so classes do Axis , portanto, para compilar e executar esta classe necessrio que todo o diretrio lib, encontrado dentro do zip do Axis esteja no CLASSPATH da aplicao. Visto este detalhe, abaixo encontra-se o arquivo fonte do cliente de Web Service. Esta classe far a conexo ao Web Service para somar 2 com 4 e ir apresentar o resultado 6 na sada padro.
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 import org.apache.axis.client.Service; import org.apache.axis.client.Call; public class Cliente { public static void main(String[] args) throws Exception { // Endereo, local onde encontra-se o Web Service String local = "http://localhost:8080/axis/Servico.jws"; // Criando e configurando o servio Call call = (Call) new Service().createCall(); // Configurando o endereo. call.setTargetEndpointAddress(local); // Marcando o mtodo a ser chamado. call.setOperationName("soma"); // Parmetros da funo soma. Object[] param = new Object[]{new Integer(2),new Integer(4)}; // Retorno da Funo Integer ret = (Integer)call.invoke(param); // Imprime o resultado: ret = 2 + 4. System.out.println("Resultado da soma : " + ret); } }

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 desenvovedor necessite conhecer a sintaxe do XML do SOAP.

Acessando o Web Service via J2ME


Para este passo, necessrio que o Java Wireless Toolkit esteja instalado e funcionando no ambiente. A comunicao com Web Services se d atravs de XML e do protocolo SOAP. Como o J2ME no possui classes para tratar estas implementaes, necessrio utilizar outros dois projetos para atender as transparncia. Os projetos so o KSOAP e o KXML da ObjectWeb . Ambos esto sob licena pblica. Como pretende-se criar uma simples aplicao para celular (MIDP2), ser utilizado o fonte dos dois projetos junto um outro arquivo fonte que ser criado. o jeito mais fcil de executar uma aplicao J2ME com duas bibliotecas 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:

import javax.microedition.lcdui.Display; import javax.microedition.lcdui.TextBox; import org.ksoap.SoapObject; import org.ksoap.transport.HttpTransport; public class ClienteJ2ME extends javax.microedition.midlet.MIDlet { private Display display; private String url = "http://localhost:8080/axis/Servico.jws"; TextBox textbox = null; public void startApp() { display = Display.getDisplay(this); try { testWebService(); } catch (Exception ex) { System.out.println(ex); } } public void pauseApp() {} public void destroyApp(boolean unconditional) {} public void testWebService() throws Exception { StringBuffer stringBuffer = new StringBuffer(); TextBox textBox = null; // Chama o WebService SoapObject client = new SoapObject(url,"soma"); client.addProperty("valor1",new Integer(2)); client.addProperty("valor2",new Integer(4)); HttpTransport ht = new HttpTransport(url,"soma"); stringBuffer.append(" Resultado: " + ht.call(client)); // mostra o valor do resultado na tela. textBox = new TextBox("Teste WebService", stringBuffer.toString(), 1024, 0); display.setCurrent(textBox);

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. Leia tambm WebService WSDL e RESTful com Java e Apache CXF Quer aprender mais sobre Java? O que Java? Caractersticas Bsicas Orientao a Objetos

Tutoriais para Certificao Java Fundamentos da Linguagem Modificadores Operadores e atribuies Controle de Fluxo Orientao a Objetos Java Lang e Wrappers Objetos e Conjuntos Classes Internas Threads (Segmentos)

comentrios: 1

Tpicos Relacionados
s uma duvida Get Remote Properties Dicas e Livro sobre J2ME Assunto pra Monografia Idias para TCC WebServices ???? [AXIS] Web Service - Session IDE para Web Service... e Aplicacoes JAX RPC comunicao entre sistemas WEB atravs de XML j2me - nokia Problema com ksoap2 Certificao SOAP ou JMS Detalhes da SCJA Beta! WebService WSDL e RESTful com Java e Apache CXF

Home

Sobre

Anuncie

Hospedado em oxxus.net

RSS Notcias RSS Frum

O JavaFree.org uma comunidade java formada pela coolaborao dos desenvolvedores da tecnologia java. A publicao de artigos alm de ajudar a comunidade java, ajuda a dar maior visibilidade para o autor. Contribua conosco. JavaFree um site do Grupo DevMedia www.devmedia.com.br | www.javafree.org | www.mrbool.com |

Você também pode gostar