Analyse XML à partir d'un flux d'entrée de Java

Salut tout le monde travaille actuellement sur une application qui a besoin de parser un document xml afin d'authentifier les utilisateurs.Suis en utilisant la classe URLConnection de l'java.net.* package de se connecter à une URL spécifique qui donne un renvoie sa réponse au format xml. Lorsque j'essaie d'analyser le document à l'aide de jdom , j'obtiens l'erreur suivante:

org.jdom2.input.JDOMParseException: Error on line 1: Premature end of file

Quelqu'un peut-il identifier le problème et m'aider avec un remède? merci, voici une partie de mon code

try {
String ivyString = "http://kabugi.hereiam.com/?username=" + ivyUsername + "&password=" + ivyPassword;
URL authenticateURL = new URL(ivyString);
URLConnection ivyConnection = authenticateURL.openConnection();
HttpURLConnection ivyHttp = (HttpURLConnection) ivyConnection;
System.out.println("Response code ==>" + ivyHttp.getResponseCode());
if (ivyHttp.getResponseCode() != 200) {
ctx.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Invalid username or password!", ""));
page = "confirm.xhtml";
} else {
BufferedReader inputReader = new BufferedReader(new InputStreamReader(ivyConnection.getInputStream()));
String inline = "";
while ((inline = inputReader.readLine()) != null) {
System.out.println(inline);
}
SAXBuilder builder = new SAXBuilder();
Document document = (Document) builder.build(ivyConnection.getInputStream());
Element rootNode = document.getRootElement();
List list = rootNode.getChildren("data");
for (int i = 0; i < list.size(); i++) {
Element node = (Element) list.get(i);
System.out.println("Element data ==>" + node.getChildText("username"));
System.out.println("Element data ==>" + node.getChildText("password"));
}
page = "home.xhtml";
}
} catch (Exception ex) {
ex.printStackTrace();
//ctx.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Invalid username or password!", ""));
}
  • Le problème peut être tout simplement que les données retournées par le inputStream est mal formaté en XML - avez-vous vérifié le contenu réel?
  • Comme l'a indiqué @mattb, le contenu, la récupération ne peut pas être un document XML valide. Pour analyser les pages HTML, vous pouvez utiliser un moyen plus souple de la bibliothèque, par exemple JSoup, voir: jsoup.org
  • Ou vous pouvez utiliser les API fluent "RestAssured" ou un autre projet appelé "RestEasy"...
  • b merci pour la réponse rapide, lorsque je visite le lien sur mon navigateur, le fichier xml semble être bien formé!
  • Il n'est pas rare pour certains services en vue de produire des données différentes selon le "client". Vous avez besoin de "décharger" le contenu de la URLConnection pour s'assurer que ce que vous voyez dans un navigateur est le même que ce que le serveur envoie à votre navigateur application.
  • Dans le code de la lecture des flux à deux reprises. Si vous voulez regarder le flux de données, vous devez le lire dans une chaîne, de l'imprimer, puis de créer un nouveau InputStream autour d'un StringReader à la main sur l'analyseur syntaxique.
  • vous avez effectivement résolu mon problème!!!!!
  • débarrassé de BufferedReader inputReader = new BufferedReader(new InputStreamReader(ivyConnection.getInputStream())); String inline=""; while((inline=inputReader.readLine())!=null){ System.out.println(inline); } everythin est maintenant ok!
  • Vous pouvez trouver un FilteredInputStream utile pour le débogage d'un jour.

InformationsquelleAutor bugiman | 2012-09-17