Bonjours a tous,
Voila je dois récupérer des données via un WebService, les données renvoyé par le serveur sont stocké dans un InputStream puis parser via un DocumentBuilderFactory, lorsque je suis connecté en wifi j'y accède (au WebService) via une adresse privée et il n'y a aucun problème.
Lorsque que je suis en 3G j'utilise une adresse public, l'InputStream récupéré semble incomplet puisque lorsque je tente de le parser, une exception est généré :
J'ai remarqué que lorsque je debugué mon application si je resté longtemps sur un point d'arrêt ou autres l'InputStream est parsé "quasiment" sans problème.....comme si mon InputStream n'était pas récupéré complètement, ou qu'il lui faudrait plus de temps.org.xml.sax.SAXParseException: unterminated entity ref (position:ENTITY_REF &@1:27 in java.io.InputStreamReader@2b085d68)
Je précise que la réponse renvoyé par le serveur est correct.
Le code où je me connecte au serveur et récupère la réponse
Le code de mon parser :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66 public SOAPrequest(Context p_context) { //On initialise les variables _context = p_context; _methodName = "Companies"; _nameSpace = "nav/system"; _parameters = new HashMap<String, String>(); if (isNetworkAvailable()) { //Une connexion Internet a ÈtÈ dÈtectÈe try { //On crÈe l'URL createUrl("systemService"); //On ouvre la connexion _connection = (HttpURLConnection) _url.openConnection(); //On ajoute les Headers addHeaders(true); //On crÈe le corps de la requÍte SOAP createSoapBody(); //On crÈe l'enveloppe String _soap = createSoapEnvelope(); //On se connecte _connection.connect(); //On Ècrit la requÍte SOAP OutputStream _request = null; _request = _connection.getOutputStream(); _request.write(_soap.getBytes(), 0, _soap.getBytes().length); //On rÈcupËre l'erreur s'il y en a une if (_connection.getResponseCode() >= 300) { //Il y a eu une erreur _erreur = _connection.getResponseMessage(); } else { //Aucune erreur trouvÈe _erreur = ""; } //On rÈcupËre la rÈponse s'il y en a une _reponse = _connection.getInputStream(); Log.e("PARSE", _reponse.toString()); //On ferme la requÍte _request.close(); } catch (IOException e) { e.printStackTrace(); } } else { //Aucune connexion Internet dÈtectÈe _erreur = "Aucune connection Internet dÈtectÈe, veuillez vous reconnectez"; } }
Merci
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46 public static ArrayList<String> parseToListCompany(InputStream p_reponse) { ArrayList<String> _listContactGeo = new ArrayList<String>(); DocumentBuilderFactory _factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = null; // on crÈÈ un DOM depuis l'inputStream recu en parametre try { builder = _factory.newDocumentBuilder(); } catch (ParserConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); } Document _dom = null; try { _dom = builder.parse(p_reponse); } catch (SAXException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { p_reponse.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } Element _racine = _dom.getDocumentElement(); NodeList _listeElement = _racine.getElementsByTagName("return_value"); int length = _listeElement.getLength(); for(int index_listElement=0 ; index_listElement < length ; index_listElement++) { Element element = (Element)_listeElement.item(index_listElement); //String _chaine =element.getNodeName(); String _fieldName=element.getTextContent(); _listContactGeo.add(_fieldName); } return _listContactGeo; }
Partager