InputStream incomplet en 3G
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é :
Citation:
org.xml.sax.SAXParseException: unterminated entity ref (position:ENTITY_REF &@1:27 in java.io.InputStreamReader@2b085d68)
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.
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
Code:
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";
}
} |
Le code de mon parser :
Code:
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;
} |
Merci