Esse artigo faz parte da revista Java Magazine edição 67. Clique aqui para ler todos os artigos desta edição

AN style="FONT-FAMILY: Verdana; BACKGROUND: white; COLOR: red; FONT-SIZE: 10pt; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial">

PAN>

ng=EN-US>t-com:office:smarttags" />em Java ME através da implementação de um leitor de web feeds para o seu dispositivo móvel

 

De que se trata o artigo:

Uso da plataforma Java ME como base para o desenvolvimento de um leitor de web feeds. Neste artigo, as principais partes do aplicativo foram descritas e explicadas, além de introduzir para o leitor, a manipulação de documentos XML, através da JSR 172 e da biblioteca kXML 2, as quais deram o suporte para o desenvolvimento deste aplicativo.

 

Para que serve:

Proporcionar um melhor entendimento sobre a JSR 172 e a kXML 2, através da apresentação do desenvolvimento de um aplicativo, o qual as principais funcionalidades são totalmente baseadas nestas duas API’s. Além disso, mostrar o amadurecimento da plataforma Java ME em relação a manipulação de documentos XML.

 

Em que situação o tema é útil:

Existem situações em que o seu aplicativo pode precisar acessar informações externas, por exemplo, de sistemas coorporativos. E neste caso, as informações retornadas por eles, geralmente, se baseiam em documentos XML. Para isto, o seu aplicativo precisa dispor de um componente (parser) para analisar e transformar esta informação na estrutura de dados a ser utilizada.

 

Web Feed Reader:

A plataforma Java ME tem permitido a construção de aplicativos práticos e interessantes com acesso à Internet, XML, Bluetooth, assim como diversos outros recursos. Baseado em algumas dessas tecnologias, um leitor de web feeds foi desenvolvido com a finalidade de acessar algumas web feeds, no formato RSS 2.0, disponíveis na Internet.

Dessas tecnologias, vamos apresentar a JSR 172 – Web Services Specification e a biblioteca kXML 2, que foram utilizadas para desenvolver um componente para manipulação de documentos XML. Mostraremos também como trabalhar com as principais classes e interfaces destas API’s (SAXParser, DefaultHandler e KXmlParser), além das vantagens e desvantagens na utilização de cada uma.

O desenvolvimento mostrou como é simples construir um aplicativo funcional com a Java ME, quando se possui conhecimento, prática e criatividade. É a isto que o artigo se propõe: introduzir as APIs e mostrar exemplos práticos, através do desenvolvimento de um aplicativo.

Por fim, apresentamos algumas informações adicionais, além de lançar um desafio para o leitor. O intuito é incentivar o mesmo a se aprofundar ainda mais em todo o assunto abordado no artigo.

 

 

Quem não gosta de antes de começar um novo dia de trabalho, dar uma olhada nas notícias ou saber o que aquele seu “blogueiro” favorito tem falado ultimamente? Com o advento da Internet, o acesso à informação ficou muito fácil e rápido, onde somente poucos clicks são necessários para achar o que procuramos. No entanto, com o passar do tempo, o número de websites que costumamos visitar diariamente aumenta, dificultando um pouco o acompanhamento destes, tendo em vista que perdemos muito tempo entre um acesso e outro.

A idéia de web feed (to feed = “alimentar”) veio a calhar para a minimização deste problema, pois o seu objetivo é sumarizar uma coleção de informações de um website (ou vários) num só local. Isto evita que o usuário tenha que acessar uma série de páginas para poder acompanhar as notícias, por exemplo. Esta estratégia de divulgação de conteúdo tem sido muito utilizada não só por portais de notícias, mas também por blogs.

A fim de se acessar uma web feed, existem tanto aplicativos específicos, comumente chamados de agregador, feed reader ou news reader, quanto outros que também fornecessem este tipo de funcionalidade, como por exemplo, os browsers de Internet (e.g. IE e Firefox). Este tipo de ferramenta permite que os usuários registrem os links de suas web feeds favoritas, além de se encarregar de baixar todas as informações e apresentá-las de forma sintetizada.

Neste artigo, mostraremos o desenvolvimento de um aplicativo Java ME, explorando conceitos e práticas, que se encarregará de acessar as informações de uma web feed e mostrá-las na tela do dispositivo móvel. Para isto, também apresentaremos um pouco sobre a manipulação de arquivos XML em Java ME, através da JSR 172 - Web Services Specification e da biblioteca kXML 2. Já que o formato dos dados de uma web feed é baseado em XML.

Declaração do escopo

Como aconselha a Engenharia de Software, todo processo de desenvolvimento de software deve começar com a fase de especificação de requisitos, ou seja, temos que identificar tudo o que o software que nos propomos a fazer deve ter. Como adiantado na introdução, mostraremos o desenvolvimento de um leitor de web feeds simples, onde a partir de uma URL, todas as informações retornadas serão apresentadas na tela do dispositivo móvel.

O objetivo deste desenvolvimento é mostrarmos a JSR 172 e a kXML 2 em ação, ou seja, duas das mais populares ferramentas para se trabalhar com XML em Java ME. As funcionalidades deste aplicativo focam basicamente em mostrar como ambas alternativas de manipulação de XML funcionam e as particularidades de cada uma. Veja o quadro “Desafio ao Leitor”.

Assim, podemos enumerar os requisitos deste aplicativo da seguinte maneira:

·       Listar algumas URL’s de web feeds disponíveis na Internet, a fim de apresentar o conteúdo das mesmas na tela do dispositivo móvel;

·       Apresentar uma lista com todo o conteúdo baixado de uma determinada web feed, onde somente o título de cada item de informação contido na web feed é apresentado;

·       Apresentar o título e a descrição de um item de informação de uma web feed numa tela separadamente;

·       O conteúdo XML de cada web feed deve ser baixado da Internet;

·       O formato XML das web feeds devem ser o Really Simple Syndication 2.0 (RSS).

Antes de mostrarmos o desenvolvimento do aplicativo, vamos, nas seções seguintes, fazer uma introdução sobre cada API de manipulação de XML que utilizamos para ler as informações de uma web feed. Esta introdução é importante, pois nos ajudará a entender de forma fácil, tudo o que foi implementado.

JSR 172 – Web Services Specification

A primeira alternativa que utilizamos para manipular o arquivo XML retornado por uma determinada web feed foi através da JSR 172 – Web Services Specification. Esta é mais uma das API’s opcionais da Java ME, mas que a partir da especificação JSR 248 – Mobile Service Architecture (MSA) se tornou obrigatória[1]. A JSR 172 é dividida em dois componentes independentes: acesso a SOAP/XML web services e manipulação de XML. Veja o quadro “XML e suas outras aplicações”.

O componente para manipulação de XML, o qual nos interessa neste artigo, é um subconjunto da especificação JAXP 1.2, da qual somente as funcionalidades que eram viáveis, em termos de processamento e memória, para os dispositivos móveis, foram mantidas. Com isto, as seguintes funcionalidades estão presentes na especificação:

·         Subconjunto da Simple API for XML Parsing 2.0 (SAX);

·         XML namespace;

·         Codificações UTF-8 e UTF-16;

·         Validação via DTD (opcional).

Com relação aos seus pacotes, a JSR 172 possui somente três: javax.xml.parsers, org.xml.sax e org.xml.sax.helpers. O primeiro deles contém as classes do parser (e.g. SAXParser); o segundo compreende algumas classes do SAX 2.0 API (e.g. Attributes); e finalmente o que contém a classe DefaultHandler, estendida pelos aplicativos para receber as notificações dos eventos do parser.

Na seção a seguir, veremos como funciona a manipulação de XML através da SAX 2.0 API.

Simple API for XML Parsing 2.0 (SAX)

A SAX define um tipo de parser to tipo push, pois este provê acesso serial ao documento XML, no qual a leitura é feita do início ao fim do documento. Durante a leitura, o parser emite uma série de eventos referentes a partes do XML que ele encontra ao longo do caminho, como por exemplo, o início ou fim de uma tag. A classe que representa o parser é a SAXParser, que por sua vez é criada através da chamada ao método newInstance() da classe SAXParserFactory.

A fim de capturar os eventos que ocorrem durante a leitura do documento, um aplicativo deve estender a classe DefaultHandler. Esta classe define os métodos de callback que são chamados pelo parser, no momento em que ele encontra uma parte significativa do XML (e.g. uma tag). Veja a seguir alguns dos métodos de callback que são definidos em DefaultHandler:

·       startDocument(): Notifica o início do documento;

·       endElement(): Notifica o fim do documento;

·       startElement(String uri, String localName, String qName, Attributes attributes): Notifica o inicio de uma tag;

·       endElement(String uri, String localName, String qName): Notifica o fim de uma tag;

·       characters(char[] ch, int start, int length): Notifica a existência de um texto entre o início e o fim de uma tag.

Uma vez definido o handler do XML a ser lido, basta passar a instância do mesmo para o método SAXParser.parse(java.io.InputStream is, DefaultHandler dh), junto com o objeto que aponta para o stream do documento a ser lido, para que a leitura se inicie.

A principal vantagem do SAX é o menor consumo de memória, o qual é conseguido através do processamento serial do documento. Além disso, o processamento em fluxo é ideal para leituras contínuas no disco ou recebimento através da rede. Como desvantagem, a própria natureza serial impossibilita saltos e leituras em trechos anteriores do documento.

...

Quer ler esse conteúdo completo? Tenha acesso completo