LPJava 16 de abr. de 2012
já tentou criar um client usando o Eclipse? Dar uma olhada no Eclipse como criar um WS Client.
flw.
alexandrebpsjc 21 de abr. de 2012
Preciso consumir através de uma aplicação Android.
alexandrebpsjc 21 de abr. de 2012
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 7 de mai. de 2012
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.