Autore Topic: App+Web Service SOAP - errore java.net.SocketTimeoutException  (Letto 1003 volte)

Offline loredana.camerino

  • Nuovo arrivato
  • *
  • Post: 12
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Sensation XE BeatSound
  • Sistema operativo:
    Windows 7/ Windows XP
App+Web Service SOAP - errore java.net.SocketTimeoutException
« il: 08 Gennaio 2012, 16:05:23 CET »
0
Buon pomeriggio!
la mia applicazione deve connettersi a un db remoto (risiede su apache 2.2 che gira sulla mia macchina in locale); ho creato il web service con eclipse e l'ho posizionato nella webapps di tomcat 5.5 (url del service: http://localhost:8080/SiriaWs/services/MyService   il metodo richiamabile dal service è 'echo'), inoltre per testarlo ho creato anche il client in java (sempre posizionato su tomcat\webapps all'url:http://localhost:8080/SiriaWsClient/sampleMyServiceProxy/ ). entrambi funzionano quindi sono passata all'implementazione della chiamata SOAP nella mia app, ma eseguendola sembra che si blocchi sempre su
Codice (Java): [Seleziona]
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
dando come errore java.net.SocketTimeoutException (in allegato ho messo la parte del logcat inerente al problema)

Credo che sia un problema nell'URL, ho fatto varie prove modificando questo e anche gli altri campi (METHOD_NAME,NAMESPACE,SOAP_ACTION), ma sinceramente non sono sicura di ciò che devo metterci (ho studiato e guardato molti tutorial o esempi ma mi hanno creato solo più confusione  :'( )

posto la parte riguardande l'inizializzazione dei campi su citati e la parte dove richiamo i metodi ksoap.

Codice (Java): [Seleziona]
        private static String SOAP_ACTION = "http://SiriaWs/echo";//"NAMESPACE/NOME METODO";
        private static String METHOD_NAME = "echo";
        private static String NAMESPACE =  "http://SiriaWs/";//"NAMESPACE DEL WS";
        private static String URL ="http://10.0.2.2:8080/SiriaWs/services/MyService?WSDL";//"TUO INDIRIZZO WS";  

Codice (Java): [Seleziona]
                    try
                    {
                            //Chiamo il Metodo del WebServer
                            SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
                                    System.out.print("Dati inseriti a video" + utente.toString() + password.toString() + codfil.toString());
                            Log.i("Dati inseriti","A video" + utente.toString() + password.toString() + codfil.toString());
                            Login log_account = new Login(ut,pass,fil);
                            Log.i("business","business " + log_account.getUtente() + log_account.getPassword() + log_account.getCodfil());
                                    System.out.print("business " + log_account.getUtente() + log_account.getPassword() + log_account.getCodfil());
                             
                            request.addProperty("log_account", log_account);
                         
                            Log.i("addProperty","alla request" + request.getPropertyCount());
                                    System.out.print("alla request" + request.getPropertyCount());
                             
                       SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
                       envelope.bodyOut = request;
                       envelope.dotNet = true;
                       envelope.setOutputSoapObject(request);
                       envelope.setAddAdornments(false);
                       envelope.implicitTypes= true;
                       Log.i("Envelope","settata");
                                    System.out.print("settata");
                           
                       HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
                               try
                               {
                                   //envelope.addMapping(NAMESPACE, "MyService",new MyService().getClass());
                                   androidHttpTransport.debug = true;
                                   androidHttpTransport.call(SOAP_ACTION, envelope);
                                   Log.i("","" + androidHttpTransport.requestDump);
                                   Log.i("","" + androidHttpTransport.responseDump);
                                   Log.i("call","call");
                                   System.out.print("call");
                                     
                                    //Prende la risposta SOAP e ne estrae il corpo
       
                                 SoapObject resultsRequestSOAP = (SoapObject) envelope.getResponse();
                                 String risultato = resultsRequestSOAP.toString();
                                 Log.i("SoapObject","Result" + resultsRequestSOAP);
                                 System.out.print("Result" + resultsRequestSOAP);

                               }
                               catch (Exception aE)
                               {
                                  aE.printStackTrace ();
                                  Toast.makeText(imisAndroid.this, aE.toString(), Toast.LENGTH_LONG).show();
                               }              
                    }
                    catch (Exception ec)
                    {
                        throw new Error("errore connessione a WS");
                    }

grazie in anticipo

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:App+Web Service SOAP - errore java.net.SocketTimeoutException
« Risposta #1 il: 08 Gennaio 2012, 17:00:28 CET »
+1
Sono poco esperto dell'argomento e potrei anche dire una corbelleria, ma cercando in giro pare che su Android tu debba passare anche il parametro timeout.
Codice (Java): [Seleziona]
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL,9000);
fonte: LightSoft » ksoap2 with timeout for HttpTransportSE
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline loredana.camerino

  • Nuovo arrivato
  • *
  • Post: 12
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Sensation XE BeatSound
  • Sistema operativo:
    Windows 7/ Windows XP
Re:App+Web Service SOAP - errore java.net.SocketTimeoutException
« Risposta #2 il: 08 Gennaio 2012, 17:17:14 CET »
0
Grazie Bradipao, ho aggiunto il timeout come indicato e nel manifest la string
Codice (Java): [Seleziona]
 
    <uses-permission android:name="android.permission.INTERNET"></uses-permission>

adesso il problema del timeout sembra risolto, solo che viene un'altra eccezione, stavolta un SOAPFault, ho allegato il logcat che la contiene.

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:App+Web Service SOAP - errore java.net.SocketTimeoutException
« Risposta #3 il: 08 Gennaio 2012, 17:30:20 CET »
0
Sempre andando a tentoni, proprio qua sul forum un utente aveva avuto un problema quasi identico e sembra possa essere il fatto che quello che passi deve essere una stringa o essere serializzabile (log_account cosa è? se per test provi a passare delle stringhe prefissate?).

Questo era il post: [Eclipse+adt] Dubbi Connessione ad un Web Service - Android Developers Italia
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline loredana.camerino

  • Nuovo arrivato
  • *
  • Post: 12
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Sensation XE BeatSound
  • Sistema operativo:
    Windows 7/ Windows XP
Re:App+Web Service SOAP - errore java.net.SocketTimeoutException
« Risposta #4 il: 08 Gennaio 2012, 18:30:22 CET »
0
L'errore era nel fatto che con

Codice (Java): [Seleziona]
request.addProperty("log_account", log_account);
passavo un parametro al metodo del service (log_account), ma questo non vuole parametri;
 inoltre avevo un altro problema di ClassCastException superato con:

Codice (Java): [Seleziona]
Object resultsRequestSOAP= envelope.getResponse();
String risultato = resultsRequestSOAP.toString();

grazie per l'aiuto Bradipao!  :D