Consumir um Web Service Axis2

4 respostas
A

Boa tarde,

Desenvolvi um WS no framework Axis2, o mesmo tem como função acessar o banco de dados MySQL e trazer o resultado de uma consulta. Aparentemente tudo está funcionando corretamente, quando eu clico no link http://localhost:8080/axis2/services/ObterGeoPointService/queryLatitude ele retorna o xml com o dado que consta no banco de dados:

<ns:queryLatitudeResponse>
               <ns:return>-25.421571</ns:return>
</ns:queryLatitudeResponse>

A dúvida é como eu faço para fazer com que uma aplicação acesse este WS e coloque o retorno do xml dentro de uma variável?

4 Respostas

LPJava

já tentou criar um client usando o Eclipse? Dar uma olhada no Eclipse como criar um WS Client.

flw.

A

Preciso consumir através de uma aplicação Android.

A

Creio que o erro esteja em alguma parte deste código, já li vários tutoriais, e cada um explica de uma forma diferente, mas nenhum funcionou.

Meu WS possui o método “queryLatitude”, quando acesso pelo navegador o link http://localhost:8080/axis2/services/ObterGeoPointService/queryLatitude , ele retorna o resultado do banco:

<a>ns:queryLatitudeResponse</a>

<a>ns:return</a>-25.421571</ns:return>

<a>ns:return</a>-26.878695</ns:return>

<a>ns:return</a>-27.878695</ns:return>

</ns:queryLatitudeResponse>

O WSDL do WS é este : http://localhost:8080/axis2/services/ObterGeoPointService?wsdl

E a classe que utilizo no Android é esta:

package org.ci.geo.route;

import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;

import android.app.Activity;
import android.os.Bundle;

public class Conexao extends Activity {

	private static final String SOAP_ACTION = "queryLatitude";
    private static final String METHOD_NAME = "queryLatitude";
    private static final String NAMESPACE = "http://localhost:8080/";
    private static final String URL = "http://localhost:8080/axis2/services/ObterGeoPointService";
 
	
	double lat, lon = 0;

	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
	
		try {
	        SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);

	        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
					SoapEnvelope.VER11);
	        envelope.setOutputSoapObject(request);
	        HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
	        androidHttpTransport.call(SOAP_ACTION, envelope);

	        Object result = envelope.getResponse();
	        String[] results = (String[]) result;
			lat =Double.parseDouble(results[0]);
			lon = Double.parseDouble(results[1]);

	    } catch (Exception e) {
	        e.printStackTrace();
	    }
	}
	public double getLatitude(){
		return this.lat;
	}
	public double getLongitude(){
		return this.lon;
	}
}
sigma2k

alexandrebpsjc, se você tem uma única string de retorno, tente:

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

se forem vários elementos no retorno, tente usar:

int total = response.getPropertyCount(); //conta os elementos do retorno
SoapObject[] objetos = new SoapObject[total]; // cria um array para receber os objetos
for (int i = 0; i &lt; total; i++) { // adiciona cada elemento do retorno ao array
	SoapObject sp = (SoapObject) response.getProperty(i);
	sb.append(sp.getName() + "\n");
	objetos[i] = sp;
}

e depois você converte para Double.

Criado 15 de abril de 2012
Ultima resposta 7 de mai. de 2012
Respostas 4
Participantes 3