Autore Topic: Problema Parsing - Unexpected token  (Letto 797 volte)

Offline MisterHide

  • Utente junior
  • **
  • Post: 65
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows XP
Problema Parsing - Unexpected token
« il: 10 Aprile 2013, 15:57:48 CEST »
0
Buongiorno a tutti.
Allora, dovrei inviare una richiesta ad un web-service.
Fino ad ora tutte le richieste fatte a questo web-service hanno funzionato egregiamente (Grazie soprattutto al tutorial di Qlimax)
L'ultima mi sta facendo dannare. In pratica mi genera un eccezione

E/DomParsing(31613): org.xml.sax.SAXParseException: Unexpected token (position:TEXT

il codice è il seguente:
Codice: [Seleziona]
try {
        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost("http://........."); url da richiamare
        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
               
                nameValuePairs.add(new BasicNameValuePair("ID", "1234"));
                nameValuePairs.add(new BasicNameValuePair("DATE", "10/04/2013"));
                httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
               
        HttpResponse response=httpclient.execute(httppost);
        HttpEntity entity = response.getEntity();
       
        InputStream is = entity.getContent();
        DocumentBuilderFactory dbf= DocumentBuilderFactory.newInstance();
        DocumentBuilder db = dbf.newDocumentBuilder();
        Document doc=db.parse(is);                // riga in cui da l'errore
Questa richiesta in effetti è una prenotazione e fatto stranissimo la cosa va a buon fine, infatti il web-service mi effettua la prenotazione, ma io non ricevo il consueto messaggio di SUCCESS in quanto mi genera quell'eccezione e quindi dalla mia app non posso comunicare il successo della prenotazione.
Da quello che ho capito in giro dovrebbe essere un problema di codifica dell'XML, ma è strano in quanto tutte le altre richieste mi funzionano bene, riesco a parsare tranquillamente l'XML che ricevo in risposta.

Ho fatto una prova a togliere uno dei 2 parametri obbligatori che il web-service mi chiede ...
L'eccezione non esce, il parser funziona e ottengo il giustissimo messaggio di FAILED dal XML. (e la motivazione che manca un parametro).

Che cosa posso fare per risolvere?
Devo provare con un altra codifica? (se si come si fa?)

A proposito vi posto un esempio del file xml della richiesta dove ho omesso volutamente il parametro DATE.
Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8" ?>
- <res_book>
  <RES>FAILED</RES>
  <MSG>Data prenotazione non trasmessa</MSG>
  </res_book>

Mi aiutate per favore, grazie.

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:Problema Parsing - Unexpected token
« Risposta #1 il: 10 Aprile 2013, 19:38:30 CEST »
0
Puoi incollare l'XML di risposta che ti fa fallire il parsing?

NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline MisterHide

  • Utente junior
  • **
  • Post: 65
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows XP
Re:Problema Parsing - Unexpected token
« Risposta #2 il: 11 Aprile 2013, 09:41:11 CEST »
0
Scusa Bradipao, ma non ho capito cosa chiedi.

Quando il parsing fallisce, io non riesco a vedere l'XML perchè da errore  sulla riga:

Document doc=db.parse(is);               

e questo è il logcat:

04-11 09:29:20.269: E/DomParsing(13959): org.xml.sax.SAXParseException: Unexpected token (position:TEXT
04-11 09:29:20.269: E/DomParsing(13959): Notice: Undefin...@9:1 in java.io.InputStreamReader@41b88260)

ma potrebbe essere che non accetta come parametro l'Email ?

Allora io oltre a quei due parametri (ID e DATE) io gli invio anche altri parametri tra cui l'email, te li scrivo tutti.

Codice: [Seleziona]
        nameValuePairs.add(new BasicNameValuePair("ID", "2357"));
        nameValuePairs.add(new BasicNameValuePair("DATE", "12/04/2013"));
        nameValuePairs.add(new BasicNameValuePair("HOUR", "20:00"));
        nameValuePairs.add(new BasicNameValuePair("PEOPLE", "2"));
        nameValuePairs.add(new BasicNameValuePair("NAME", "PROVA_NOME"));
        nameValuePairs.add(new BasicNameValuePair("SURNAME", "PROVA_COGNOME"));
        nameValuePairs.add(new BasicNameValuePair("MAIL", "pippo@libero.it"));
        nameValuePairs.add(new BasicNameValuePair("MOBILE", "3450000000"));


Se invece non gli passo qualche parametro obbligatorio, il parsing funziona ma giustamente mi risponde con FAILED e la risposta è questa:
Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8" ?>
- <res_book>
  <RES>FAILED</RES>
  <MSG>Data prenotazione non trasmessa</MSG>
  </res_book>

boh provo a inviargli un email vuota come parametro forse gli da fastidio la @ ?????
provo e ti faccio sapere.
a dopo  :-)

Post unito: 11 Aprile 2013, 10:02:47 CEST
Purtroppo non è l'email che gli da fastidio
Cosa può essere?

« Ultima modifica: 11 Aprile 2013, 10:02:47 CEST da MisterHide, Reason: Merged DoublePost »

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Problema Parsing - Unexpected token
« Risposta #3 il: 11 Aprile 2013, 10:25:55 CEST »
0
secondo me non è quello che Invii ma quello che ricevi che da errore. tanto che nel log hai un "InputStreamReader" che non ha nulla a che fare con l'invio dei parametri...
dovresti riuscire a salvarti/stamparti l'xml sotto forma di stringa prima che venga fatto il parsing.
Puoi provare ad andare in debug e settare dei breakpoint
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline MisterHide

  • Utente junior
  • **
  • Post: 65
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows XP
Re:Problema Parsing - Unexpected token
« Risposta #4 il: 11 Aprile 2013, 11:04:26 CEST »
0
Nicola_D il tuo suggerimento è giusto, infatti io ci avevo pensato, ma non so cosa stampare
Io di solito lo faccio nel passo successivo alla riga

Document doc=db.parse(is);

In questo caso dove potrei inserire il Log e cosa potrei stampare?

grazie 1000.

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Problema Parsing - Unexpected token
« Risposta #5 il: 11 Aprile 2013, 11:23:57 CEST »
+1
Nicola_D il tuo suggerimento è giusto, infatti io ci avevo pensato, ma non so cosa stampare
Io di solito lo faccio nel passo successivo alla riga

Document doc=db.parse(is);

In questo caso dove potrei inserire il Log e cosa potrei stampare?

grazie 1000.
InputStream is = entity.getContent();
hai la risposta del webservice (o endpoint) direttamente nell'input stream.
Usi l'input stream per scrivere su uno stringbuffer, su una string, su file, dove vuoi!
Io ti consiglio di scrivere su file e textarea sul device oltre che nel log.
E soprattutto, di andare in debug nel punto in cui hai trasformato l'input stream in stringa. In tal modo ti puoi guardare la risposta
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline MisterHide

  • Utente junior
  • **
  • Post: 65
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows XP
Re:Problema Parsing - Unexpected token
« Risposta #6 il: 11 Aprile 2013, 12:20:25 CEST »
0
Allora, avevo già provato precedentemente a visualizzarmi il contenuto dell'inputStream
ma Sbagliavo perchè facevo
Codice: [Seleziona]
InputStream is = entity.getContent();
Log.d("Parsing",is.toString())

e ottenevo una cosa strana  :-[

giustamente ho corretto e fatto 

Codice: [Seleziona]
        BufferedReader r = new BufferedReader(new InputStreamReader(is));                               
        StringBuilder total=new StringBuilder();
        String line;
        while ((line=r.readLine())!=null){
               total.append(line);
        }
e ho visto finalmente l'xml di risposta
ancora non ho risolto ma già il fatto di poter vedere l'XML prima di parsarlo è un passo in avanti.
Ora lo analizzo e vedo se riesco a capire il problema

per il momento ti ringrazio infinitamente.
Ti/Vi faccio sapere se risolvo.


Post unito: 11 Aprile 2013, 12:46:46 CEST
Allora succede questo:

nell'inputstream oltre all'xml trovo altre cose cioè:

Notice: Undefined index: IDEVENT in /var/www/**********.php on line 742
Notice: Undefined index: MSG in /var/www/**********.php on line 750
<?xml version="1.0" encoding="utf-8"?><res_book><RES>SUCCESS</RES><MSG>SUCCESS</MSG></res_book>

Che sono quelle prime 2 righe?
dovrei ottenere solo la terza riga, infatti se nella richiesta provo a togliere un parametro obbligatorio, nell'inputstream trovo:

Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<res_book>
     <RES>FAILED</RES>
     <MSG>Numero cellulare non trasmesso</MSG>
</res_book>

che sarà mai???  :-o

Post unito: 11 Aprile 2013, 12:59:22 CEST
OK risolto.
non era un problema mio, in effetti non mi avevano avvisato  >:(
che c'erano altri 2 parametri da inviare.

grazie e buon pranzo.

« Ultima modifica: 11 Aprile 2013, 12:59:22 CEST da MisterHide, Reason: Merged DoublePost »