Autore Topic: Invocare Web Service da Android su GAE  (Letto 1149 volte)

Offline winner03

  • Nuovo arrivato
  • *
  • Post: 13
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    HTC MAGIC
  • Sistema operativo:
    Windows 7
Invocare Web Service da Android su GAE
« il: 01 Febbraio 2011, 15:23:40 CET »
0
Ciao a tutti,

ho pubblicato online su Google App Engine il seguente Web Service:
http://marcoapplicazione.appspot.com/soap/employeeService.wsdl[/url]

dove ci sono 3 operazioni:
- createEmployee
- getEmployee
- pingApplication

Dove il primo servizio prende dei parametri dell'Employee e risponde con un booleano, il secondo non lo prendiamo in considerazione e il terzo ha un parametro nullabile e risponde sempre TRUE.

Premetto che ho provato i servizi da SoapUI e da Visual Studio e funzionano!

Volevo provare a fare un applicazione su Android che invoca uno di questi servizi, ad esempio ho scritto questa classe velocemente:
Codice (Java): [Seleziona]
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;

public class Test {
        private static final String SOAP_ACTION = "pingApplicationRequest";
        private static final String METHOD_NAME = "pingApplicationRequest";
        private static final String NAMESPACE = "[url]http://marcoapplicazione.appspot.com/";
        private static final String URL = "http://marcoapplicazione.appspot.com:80/soap/";
         
        public void test() {
            try {
                SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
               
                SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
                envelope.setOutputSoapObject(request);
               
                HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
                androidHttpTransport.debug = true;
                androidHttpTransport.call(SOAP_ACTION, envelope);
               
                Object result = envelope.getResponse();
         
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }
        }
}

Di proposito non ho gestito la risposta, perchè quando faccio il call mi cattura la seguente eccezione:
Codice (XML): [Seleziona]
expected: START_TAG {http://schemas.xmlsoap.org/soap/envelope/}Envelope (position:START_TAG <html>@2:7 in java.io.InputStreamReader@e89b94)
Dalle ore perse a smattetare sul codice e a cercare su google, ho notato che il problema è l'URL, perchè provandone un altro non dà questa eccezione.

Avete qualche idea da suggerirmi????
PS se volete provare x conto vostro non ci sono problema, il servizio è pubblico

Offline dom4

  • Utente normale
  • ***
  • Post: 158
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Vodafone Ideos, Nexus 5
Re:Invocare Web Service da Android su GAE
« Risposta #1 il: 18 Maggio 2011, 10:47:54 CEST »
0
Ciao a tutti,

ho pubblicato online su Google App Engine il seguente Web Service:
http://marcoapplicazione.appspot.com/soap/employeeService.wsdl[/url]

dove ci sono 3 operazioni:
- createEmployee
- getEmployee
- pingApplication

Dove il primo servizio prende dei parametri dell'Employee e risponde con un booleano, il secondo non lo prendiamo in considerazione e il terzo ha un parametro nullabile e risponde sempre TRUE.

Premetto che ho provato i servizi da SoapUI e da Visual Studio e funzionano!

Volevo provare a fare un applicazione su Android che invoca uno di questi servizi, ad esempio ho scritto questa classe velocemente:
Codice (Java): [Seleziona]
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;

public class Test {
        private static final String SOAP_ACTION = "pingApplicationRequest";
        private static final String METHOD_NAME = "pingApplicationRequest";
        private static final String NAMESPACE = "http://marcoapplicazione.appspot.com/";
        private static final String URL = "[url]http://marcoapplicazione.appspot.com:80/soap/";
         
        public void test() {
            try {
                SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
               
                SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
                envelope.setOutputSoapObject(request);
               
                HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
                androidHttpTransport.debug = true;
                androidHttpTransport.call(SOAP_ACTION, envelope);
               
                Object result = envelope.getResponse();
         
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }
        }
}

Di proposito non ho gestito la risposta, perchè quando faccio il call mi cattura la seguente eccezione:
Codice (XML): [Seleziona]
expected: START_TAG {http://schemas.xmlsoap.org/soap/envelope/}Envelope (position:START_TAG <html>@2:7 in java.io.InputStreamReader@e89b94)
Dalle ore perse a smattetare sul codice e a cercare su google, ho notato che il problema è l'URL, perchè provandone un altro non dà questa eccezione.

Avete qualche idea da suggerirmi????
PS se volete provare x conto vostro non ci sono problema, il servizio è pubblico

Prova a mettere l'indirizzo completo del wsdl in String URL;

private static final String URL="http://marcoapplicazione.appspot.com/soap/employeeService.wsdl"
Vedi se funziona.