Mostrando postagens com marcador Java Web. Mostrar todas as postagens
Mostrando postagens com marcador Java Web. Mostrar todas as postagens

sexta-feira, 25 de fevereiro de 2011

Web Services no Android

Olá povo,

No artigo anterior, apresentei como criar Web Services com o Apache Axis2 no Eclipse EE com o plugin WTP. Nesse post mostrarei como acessar esse WebService através de uma aplicação Android.

Um ótimo framework para acessar web services é o KSOAP. Ele é bem conhecido dos desenvolvedores Java ME, uma vez que era a maneira mais fácil de se acessar web services em celulares MIDP. Vamos utiliza-lo no Android através da sua versão para Java SE. Ela pode ser obtida aqui.
Crie um novo projeto Android (que nomearei de BlogWSClient) e adicione o JAR ao projeto. Isso deve ser feito criando uma pasta chamada lib na raiz do projeto e copiando o JAR para lá. Em seguida, adicione esse JAR ao classpath do seu projeto.
Uma vez que iremos acessar um serviço Web, precisamos da permissão android.permission.INTERNET. Sendo assim, o próximo passo será adiciona-la ao nosso aplicativo através da tag uses-permission que deve ser adicionada ao nosso AndroidManifest.xml conforme abaixo.


<uses-permission android:name="android.permission.INTERNET"/>


Agora vamos para o código da nossa Activity. Não vou me preocupar com a parte da interface gráfica, vou apenas mostrar a utilização dos objetos KSOAP.
Tenha sempre esse princípio básico em mente: TODA comunicação de rede deve ser feita com uma Thread separada da Thread principal da aplicação.
Sendo assim, faremos com que nossa classe implemente a interface java.lang.Runnable e no método onCreate, criamos e inicializamos uma nova thread passando a própria instância da Activity como parâmetro. Com isso, o método run chamará dois métodos que, por sua vez, farão a requisição aos nossos serviços.

package ngvl.android.blogws;

// omiti os imports... :)

public class PrincipalActivity
extends Activity
implements Runnable {

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

new Thread(this).start();
}

public void run() {
chamaHelloWS();
chamaPessoaWS();
}

// Adicione os próximos métodos aqui
}

Agora vamos ver a chamada ao serviço HelloWS. Iniciamos com a criação de um SoapObject que representa o namespace do serviço e o método que queremos chamar. Isso está definido no WSDL do nosso serviço, procure pelas propriedades xml:ns e wsdl:operation respectivamente. Em seguida, passamos o parâmetro que o serviço requer, que no exemplo é o nome da pessoa. As requisições SOAP são feitas através de envelopes. Esse objeto é criado e atrelado ao primeiro que criamos.
A variável url armazena o caminho do nosso serviço. Observe que estamos utilizando o IP 10.0.2.2 que permite com que o emulador acesse a máquina local. Se você usa localhost estará tentando acessar o próprio emulador. No aparelho, você deve colocar o endereço real do seu servidor.
Feita a requisição, é só pegar a resposta a partir do envelope.


private void chamaHelloWS() {
SoapObject soap = new SoapObject(
"http://blogws.jee.ngvl", "digaOla");

soap.addProperty("nome", "glauber");

SoapSerializationEnvelope envelope =
new SoapSerializationEnvelope(SoapEnvelope.VER11);

envelope.setOutputSoapObject(soap);

Log.i("NGVL", "Chamando HelloWS");

String url =
"http://10.0.2.2:8080/BlogWS/services/HelloWS";

HttpTransportSE httpTransport =
new HttpTransportSE(url);

try {
httpTransport.call("", envelope);

Object msg = envelope.getResponse();

Log.i("NGVL", "Mensagem: " + msg);

} catch (Exception e) {
e.printStackTrace();
}
}


O método que acessa PessoaWS é bem similar ao anterior, o que muda é apenas a resposta, uma vez que não mais temos um só retorno, e sim uma lista deles. essa lista é obtida através da propriedade bodyIn do envelope. Então é só percorrer a lista que é retornada.


private void chamaPessoaWS() {
SoapObject soap = new SoapObject(
"http://blogws.jee.ngvl", "obterPessoas");

SoapSerializationEnvelope envelope =
new SoapSerializationEnvelope(SoapEnvelope.VER11);

envelope.setOutputSoapObject(soap);

Log.i("NGVL", "Chamando PessoasWS");

String url =
"http://10.0.2.2:8080/BlogWS/services/PessoaWS";

HttpTransportSE httpTransport =
new HttpTransportSE(url);

try {
httpTransport.call("", envelope);

SoapObject results =
(SoapObject) envelope.bodyIn;

int count = results.getPropertyCount();

for (int i = 0; i < count; i++) {
SoapObject obj = (SoapObject)results.getProperty(i);

Log.i("NGVL",
"Nome: "+ obj.getProperty("nome"));

Log.i("NGVL",
"Idade: "+ obj.getProperty("idade"));
}
} catch (Exception e) {
e.printStackTrace();
}
}


Bem pessoal, espero que vocês tenham gostado. Esse foi um post relâmpago :) dois numa noite só.

4br4ç0s,
nglauber

Web Service com Apache Axis2

Olá povo,

Todo mundo já sabe da atual importância dos Web Services no mundo da TI. Eles promovem a integração entre sistemas inclusive que podem inclusive utilizar tecnologias heterogêneas. Mas como criar esse tipo de software? Bem, como diria a velha propaganda, "existem mil maneiras de se fazer Neston". Traduzindo pra o nosso contexto, existem mil maneiras de se fazer web services. Podemos utilizar os protocolos JSON ou SOAP (pelo menos que eu conheço), e com esses dois podemos desenvolver em várias tecnologias (.net, Java, PHP, ...) , e por fim, para essas tecnologias podemos utilizar alguns frameworks disponíveis no mercado.

Nesse post, que é baseado nesse tutorial de Lars Vogel, apresentarei um exemplo da disponibilização de um Web Service utilizando o padrão SOAP, criado com a linguagem Java e usando o framework Apache Axis2. Vamos utilizar o Eclipse EE com WTP (Web Tools Platform) e as ferramentas Tomcat 6.0 e obviamente do Axis 2. Baixe essas ferramentas e mãos a obra!

Devemos incialmente configurar o Eclipse indicando onde decompactamos o Axis2. Para isso, vá até o menu Window > Preferences. No lado esquerdo, selecione Web Services > Axis 2 Preferences, e na aba Axis 2 Runtime indique o diretório do Axis 2. Ainda na opção Web Services, selecione a subopção Server and Runtime. Então, selecione Tomcat v6.0 Server e Apache Axis 2 nos campos Server e Web service runtime respectivamente.

Crie um novo Dynamic Web Project, vou dar o nome de BlogWS. Uma vez com o projeto criado, adicione um novo pacote, nomearei como ngvl.jee.blogws. Inciaremos criando um serviço bem simples que simplesmente dirá um olá com a hora do servidor. Crie uma classe chamada HelloWS conforme abaixo:

package ngvl.jee.blogws;

import java.text.SimpleDateFormat;
import java.util.Date;

public class HelloWS {
public String digaOla(String nome){
String result;
SimpleDateFormat df =
new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");

Date date = new Date(System.currentTimeMillis());
result = df.format(date);

return "Olá "+ nome +" a hora atual é "+ result;
}
}

Criada a classe, clique com o botão direito sobre a classe e selecione a opção Web Services > Create Web service. A tela abaixo será exibida:


Selecione Web service runtime: Apache Axis2 e clique em Next. Na tela que abrirá em seguida, selecione Generate default services.xml file e clique em Finish.

Feito isso seu WebService está pronto! Mas já? :) Pois é. O Axis2 é bem simples. E com uma ajudinha do WTP fica mais fácil ainda. Pra ver seu serviço rodando, basta clicar com o botão direito sobre o projeto e escolher a opção Run as > Run on server. O browser deve exibir esse endereço (se não exibir digite-o): http://localhost:8080/BlogWS/axis2-web/. Será exibida uma tela de boas vindas do Axis2. Clique no link Services e será exibido os serviços disponíveis. Entre eles está o nosso magistoso HelloWS :) com a operação digaOla. Se você clicar sobre o nome do serviço verá o WSDL (Web Service Descriptor Language) que é o XML que define nosso WS. Nele temos detalhes sobre o serviço, como as operações que estamos disponibilizando, tipos de parâmetros de entrada (response) e de retorno (response).
Mostraremos no próximo post como acessar esse serviço através de uma aplicação Android. Mas antes vamos fugir a regra. Milhões de tutoriais na internet mostram como fazer um serviço simples, que não envolve tipos complexos. Vamos mostrar como criar um serviço que retorna uma lista de objetos do tipo Pessoa.
Primeiro crie uma interface que vai representar seu objeto complexo.


package ngvl.jee.blogws;

public interface Pessoa {
void setNome(String nome);
String getNome();
void setIdade(int idade);
int getIdade();
}

Depois crie a classe que implementa essa interface:

package ngvl.jee.blogws;

public class PessoaImpl implements Pessoa {
private int idade;
private String nome;

public PessoaImpl(String nome, int idade) {
setIdade(idade);
setNome(nome);
}

public int getIdade() {
return idade;
}

public String getNome() {
return nome;
}

public void setIdade(int idade) {
this.idade = idade;
}

public void setNome(String nome) {
this.nome = nome;
}
}


Feito isso, criaremos agora o serviço que retornará uma lista fake de objetos do tipo Pessoa. No mundo real, esse serviço faria uma busca no banco de dados. Mas não vamos colocar isso aqui :)

public class PessoaWS {

public Pessoa[] obterPessoas(){
Pessoa[] pessoas = new Pessoa[]{
new PessoaImpl("Nelson", 27),
new PessoaImpl("Glauber", 18),
new PessoaImpl("Leal", 65)
};
return pessoas;
}
}

Agora gere o WebService a partir dessa última classe, e em seguida execute-a conforme fizemos no exemplo anterior. O resultado ficará como na imagem abaixo:


Pronto! Temos dois serviços HelloWS e PessoaWS publicados. No próximo artigo mostrarei como acessá-los com uma aplicação Android.

4br4ç0s,
nglauber

terça-feira, 13 de outubro de 2009

Hospedagem grátis: Java + MySql

Olá povo,

Aqui vai uma boa dica para quem precisa hospedar, para testes, sites em Java . O site EATJ permite que você hospede sua aplicação de graça com as seguintes configurações:
  • Java 1.5 ou 1.6;
  • Servidor Tomcat 5.5 ou 6.0 (permitindo o acesso ao Manager e o Administrator);
  • Banco de dados MySql 4.1 ou 5.0 com acesso através do PHPMyAdmin.
Tudo isso através de uma interface bem simples. Para fazer o deploy basta fazer o upload do seu arquivo WAR (de até 50MB para conta gratuita) e pronto! Sua aplicação já está no ar.

A URL fica no seguinte formato: http://seuusuario.s156.eatj.com/
Um ponto negativo que eu verifiquei, é que as contas gratuitas tem seus servidores reiniciados a cada 6 horas. Mas como utilizei para testes, é uma boa opção.

4br4ç05,
nglauber