Ir ao conteúdo
  • Cadastre-se
Naun Belo

Ajuda com Webservice + Ksoap2

Recommended Posts

Olá pessoal, estou fazendo um trabalho da faculdade que tem um webservice. acontece que inicialmente eu quero só fazer um teste pra saber se minha aplicação ta conseguindo conectar no WebService de boa.

 

O WebService está hospedado na universidade e tem o seguinte endereço:

 

http://sistema.unir.br:8080/wsunir/ServicosAcademicosService?wsdl

 

A parte de teste que estou fazendo é com a função "consultar". Se eu digitar "1" o retorno deve ser "olá 1". É apenas uma função para teste.

 

O problema é que no momento de fazer a conexão ele entra, faz a conexão, mas quando vai pegar o resultado ele não consegue e pula para o catch.

 

Meu objeto usuario tem apenas uma string, é só pra guardar esse "Olá 1" que vai retornar...

 

Usuario.java

public class Usuario {private String msg;public Usuario(){}public Usuario(String msg) {super();this.msg = msg;}public String getMsg() {return msg;}public void setMsg(String msg) {this.msg = msg;}public String toString(){return "Mensagem: "+ this.msg;}}

Meu UsuarioDAO tem apenas a função de consultar

 

UsuarioDAO.java

import org.ksoap2.SoapEnvelope;import org.ksoap2.serialization.SoapObject;import org.ksoap2.serialization.SoapSerializationEnvelope;import org.ksoap2.transport.HttpTransportSE;import android.util.Log;public class UsuarioDAO {private static final String URL = "http://sistema.unir.br:8080/wsunir/ServicosAcademicosService?wsdl";private static final String NAMESPACE = "http://ws.unir.br/";private static final String CONSULTAR = "consultar";public Usuario consultar(String id){Usuario usr=null;SoapObject buscarUsuario = new SoapObject(NAMESPACE, CONSULTAR);buscarUsuario.addProperty("id", id);SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);envelope.setOutputSoapObject(buscarUsuario);envelope.implicitTypes = true;HttpTransportSE http = new HttpTransportSE(URL);try {http.call("urn:" + CONSULTAR, envelope);//PASSOU DO HTTP.CALLSoapObject resposta = (SoapObject) envelope.getResponse();//AQUI ELE NÃO PASSOU E FOI PARA O CATCHusr = new Usuario();usr.setMsg(resposta.getProperty(0).toString());} catch (Exception e) {usr = new Usuario();usr.setMsg("Falha na Conexão");e.printStackTrace();//return null;}return usr;}}

O MainActivity só mostra o que deu de resposta...

 

Em user = dao.consultar("1"); eu estou enviando esse 1 porque quero obter a resposta "Olá 1" MainActivity.java

import android.app.Activity;import android.os.Bundle;import android.widget.TextView;public class MainActivity extends Activity {@[member="override"]protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Usuario user = new Usuario();UsuarioDAO dao = new UsuarioDAO();user = dao.consultar("1");TextView view = new TextView(this);view.setText(user.getMsg());setContentView(view);}}

Por favor pessoal, me ajudem aí eu nao sei porque ele não está obtendo essa resposta do WebService. Já tentei muito resolver e não consegui.

 

Em XML, a resposta obtida é essa:

<?xml version="1.0" encoding="UTF-8"?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"><SOAP-ENV:Header/><S:Body><ns2:consultarResponse xmlns:ns2="http://ws.unir.br/"><return>Olá 1</return></ns2:consultarResponse></S:Body></S:Envelope>

Obs.: biblioteca ksoap2 instalada perfeitamente e funcionando. 

Obs.2.: Realizei testes do WebService com o SoapUI e sim, ele está funcionando.

 

O stack está acusando nullPointerException, mas não sei o porquê. Sei que a minha aplicação é Android, mas meu problema é intrínseco com Java. Por favor, me ajudem.
 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acredito que seja o formato do xml. Tenta pegar a resposta inteira como String ... algo como:

Object result = (Object) envelope.getResponse();String results = result.toString();

Veja se ele está capturando a mensagem completa.

 

Mas conselho: Se possível, adapte o Webservice para trabalhar com JSON ao invés de SOAP. Para dispositivos mobile, o container XML é muito grande, fazendo o payload ser grande demais. além disso, trabalhar com JSON é muito mais simples. Mesmo que seja necessário implementar um REST Token para as comunicações, ainda vejo mais vantagem gastar no back-end do serviço, do que deixar pro mobile essa carga.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×