segunda-feira, 16 de fevereiro de 2009

JME com RESTful

3

Esse eu descobri fuçando na net, pois a muito pouco material sobre isso, que seria como usar o metodo PUT utilizando JME. Atualmente estou na 9ª fase do Curso de Ciência da Computação na UNOESC, a ultima fase do curso, e estou desenvolvendo meu TCC (Trabalho de Conclusão de Curso), meu projeto consiste em prover acesso a um servidor LDAP (O padrão LDAP, não em um serviço especifico), pelo celular, na verdade irei construir somente um prototipo da aplicação aonde seja possivel criar, editar, excluir e listar os usuários do LDAP.
No começo do projeto, minha intenção seria usar Web Services (XML) e consumir os retorno com o JME, porém ao pesquisar as APIs de consumo de XML para JME, elas são mal documentadas, e os exemplos são criados pela comunidade, algumas APIs você nem acha aonde baixar. Sem contar que o consumo de XML no celular é muito custoso para o aparelho que não tem muitos recursos, eis que a nova versão do NetBeans veio com suporte a RESTful, e resolvi fazer alguns testes, inicialmente iria usar o KXML, e transmitir XML usando RESTful, a listagem eu consegui pegar com a ajuda do jLDAP, uma biblioteca do novell para ajudar a comunicar o java com o LDAP, a biblioteca é bem simples de se usar, e achei ela muito interessante.
Bah, eu não tava afim de usar a biblioteca de parser de XML, não funcionava como eu gostaria, e era bem limita, eis que me surge uma idéia de usar JSON, o Java Script Object Notation, que é um formato de arquivo leve parecido com o YAML, mais para minha felicidade, havia bibliotecas para Java e JME para JSON. Maravilha, e ainda por cima o RESTful do Java tem suporte a compoartilhar aquivos JSON.
O GET novamente funcionou perfeitamente, mas e o PUT? não havia jeito de funcionar, e o metodo HTTPConnection do JME suporta somente o GET e POST. Como resolver isso?
Pesquisando na net axei o seguinte post, que falava para simular o PUT como o Rails faz, porém não obtive sucesso dessa maneira, o jeito que encontrei foi o de usar um metodo POST, que consome um JSON e produz um text/plain, seguindo as definições do POST ele precisa retornar algo, vejam o código abaixo:


@POST
@Produces("application/json")
@Consumes("text/plain")
public String postJson(String content){
try {
JSONObject obj = new JSONObject(content);
Person person = new PersonApacheDs().fromJSON(obj);
dao.save(person);
} catch (LDAPException ex) {
ex.printStackTrace();
return ex.getMessage();
} catch (JSONException ex) {
ex.printStackTrace();
return ex.getMessage();
}
return "OK";
}


existem algumas classes ai que são do meu projeto é não vou explica-las agora :). Desse modo consegui criar um serviço post que funcione para inserir dados, esse não é o metodo certo, o ideal seria usar o PUT, ainda vou fazer alguns testes, ver bem certo como o rails trabalha com o PUT, e depois eu experimento. No exemplo do outro blog, acima, ele mandava passar a data na URL, agora imagine passar um arquivo JSON na URL? Lógico que não foi aceito, por isso resolvi usar o POST. E para se comunicar é simples, primeiramente você usa um OutputStream para transmitir seus dados.


HttpConnection con = (HttpConnection) Connector.open(url, Connector.READ_WRITE);
con.setRequestMethod(HttpConnection.POST);
DataOutputStream dos = con.openDataOutputStream();
String json = obj.toString();
byte[] b = json.getBytes();
for (int i = 0; i < json.length(); i++) {
dos.writeByte(b[i]);
}
dos.flush();


obj é um objeto do tipo JSONObject, que cria o objeto no formato JSON, e para ler vc cria um InputStream atravez da conexão, e pronto, você se comunica perfeitamente com um Serviço REST, meu próximo teste é tentar comunicar com o Rails, que pra quem não sabe utiliza o REST por padrão em todas as paginas.

Isso ai galera, espero que gostem, qualquer dúvida, ou se alguem conseguiu usar o PUT deixem um comentario ou me mandem por e-mail.

att

3 comentários:

Marcell Freitas disse...

Interessante o tema do seu projeto. Até agora só usei Restful no Rails. Boa sorte com seu projeto.

rams disse...

Rafael, quais as bibliotecas para utilizar o JSon no JME você encontrou?

Abraços!

Rafael Felix disse...

Eu tinha baixado no JSON.org

nesse link encontrado no Google vc consegue baixar

http://jimmod.com/blog/2010/03/java-me-j2me-json-implementation-tutorialsample/

 
Design by ThemeShift | Bloggerized by Lasantha - Free Blogger Templates | Best Web Hosting